Script Optimization

Rhai includes an optimizer that tries to optimize a script after parsing. This can reduce resource utilization and increase execution speed.

Script optimization can be turned off via the no_optimize feature.

Optimization Levels

There are three levels of optimization: None, Simple and Full. The default is Simple.

An Engine’s optimization level is set via Engine::set_optimization_level.

// Turn on aggressive optimizations
engine.set_optimization_level(rhai::OptimizationLevel::Full);

None

None is obvious – no optimization on the AST is performed.

Simple (Default)

Simple performs only relatively safe optimizations without causing side-effects (i.e. it only relies on static analysis and built-in operators for constant standard types, and will not perform any external function calls).

After _constants propagation_ is performed, if the [constants] are then modified (yes, it is possible, via Rust functions),
the modified values will _not_ show up in the optimized script.

Only the initialization values of [constants] are ever retained.

Overriding a [built-in operator] in the [`Engine`] afterwards has no effect after the
optimizer replaces an expression with its calculated value.

Full

Full is much more aggressive, including calling external functions on constant arguments to determine their results.

One benefit to this is that many more optimization opportunities arise, especially with regards to comparison operators.