This repository has been archived on 2025-08-04. You can view files and clone it, but cannot push or open issues or pull requests.
rhaj/rhai_engine/rhaibook/engine/optimize/side-effects.md
2025-04-19 08:10:30 +02: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), 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.