Word description Declares that the most recently defined word may be evaluated at compile-time if all inputs are literal. Foldable words must satisfy a very strong contract:
•
foldable words must not have any observable side effects,
•
foldable words must halt - for example, a word computing a series until it coverges should not be foldable, since compilation will not halt in the event the series does not converge.
•
both inputs and outputs of foldable words must be immutable.
The last restriction ensures that words such as clone do not satisfy the foldable word contract. Indeed, clone will output a mutable object if its input is mutable, and so it is undesirable to evaluate it at compile-time, since doing so would give incorrect semantics for code that clones mutable objects and proceeds to mutate them.
Notes Folding optimizations are not applied if the call site of a word is in the same source file as the word. This is a side-effect of the compilation unit system; see Compilation units.
Examples Most operations on numbers are foldable. For example, 2 2 + compiles to a literal 4, since + is declared foldable.