Side-Effect Considerations for Full Optimization Level
All of Rhai’s built-in functions (and operators which are implemented as functions) are pure
(i.e. they do not mutate state nor cause any side-effects, with the exception of print
and debug
which are handled specially) so using OptimizationLevel::Full
is usually quite safe unless
custom types and functions are registered.
If custom functions are registered, they may be called (or maybe not, if the calls happen to lie within a pruned code block).
If custom functions are registered to overload built-in operators, they will also be called when
the operators are used (in an if
statement, for example), potentially causing side-effects.
-
Always register custom types and functions after compiling scripts if
OptimizationLevel::Full
is used. -
DO NOT depend on knowledge that the functions have no side-effects, because those functions can change later on and, when that happens, existing scripts may break in subtle ways.