foldable
Factor handbook » The language » Words » Compiler declarations

Prev:inline
Next:flushable


Vocabulary
syntax

Syntax
: foo ... ; foldable


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.

Definition