The Logic Graph
A node is exactly two pointers, a type and a value, sixteen bytes, and a
node's identity is its address. The type pointer defines how the value is read:
the type's definition specifies the node's layout, how it consumes surrounding
tokens during parsing, and the IR it lowers to.
Operands are not stored inline. A binary + is a single cell whose value points
at a two-field record (its left and right operands), so the operator is a
higher-level identity describing how to read its operands rather than a node that
holds them. Which concrete machine operation runs is resolved from the operator
together with the operand types, not from the + node alone.
Execution has one rule: to evaluate a node, read its type. If that type is a
function, invoke it on the node's value; otherwise the node is data, read through
its type's layout. Everything runnable is a function, operators and control flow
included. Interpreted code is its Logic Graph, and a frozen region JIT-compiled
with Cranelift stays reflectable through the same graph it was compiled from.