rhai/doc/src/engine/optimize/side-effects.md
2020-06-20 12:06:17 +08:00

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.