Which Antiforms Are In Use?

As an aid for myself, I made a summary table:

Type Antiform Usage Stable?
BLANK! nothing Unset variables
TAG! tripwire Unset variable with informative message
WORD! keyword Special constant values (e.g. ~null~, ~void~)
GROUP! splice Multiple values without a surrounding block
FRAME! action Trigger function execution from words
PARAMETER! hole Unspecialized slots in a function frame
BLOCK! pack Multi-returns from a function
COMMA! barrier Discarded by evaluator
ERROR! raised Errors raised from a function call
OBJECT! lazy (to be confirmed)
1 Like

Very useful. Do note that the %types.r table encodes the type/antiform information, as well as an annotation to say whether it's unstable or not. Such as for splice:

group       "array that evaluates expressions as an isolated group"
~splice~    (CELL_FLAG_FIRST_IS_NODE)
            [any-series? any-branch? any-plain-value?]
            [array       *       *]

And for error:

error       "error context with id, arguments, and stack origin"
~raised~    (CELL_FLAG_FIRST_IS_NODE | CELL_FLAG_SECOND_IS_NODE)
#unstable   [any-inert?]
            [context     +       +]

As much as possible, I like to use Rebol to do code generation for properties in the C (and also to put in the binary for HELP). A string describing the antiform would be good to stick in here...

In any case, %types.r is a pretty good example of dialecting!

1 Like

2 posts were merged into an existing topic: Antiform Explanations