1.1 KiB
Side-Effect Considerations for Full Optimization Level
{{#include ../../links.md}}
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) causing side-effects.
Therefore, the rule-of-thumb is:
-
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.