VocabularysyntaxSyntax: foo ... ; foldable
Word descriptionDeclares 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.
NotesFolding 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.
ExamplesMost operations on numbers are foldable. For example,
2 2 + compiles to a literal 4, since
+ is declared foldable.
Definition