Expand description
§Lisp Parser
A classic Lisp parser with arena-allocated values.
§Design
- Symbols use contiguous string storage for memory efficiency
- Symbol interning ensures the same symbol name returns the same index
- All values are stored in a
grift_arenaarena - Supports garbage collection via the
Tracetrait - Explicit boolean values (#t, #f) separate from nil/empty list
- Strict evaluation - All arguments are evaluated before function application (call-by-value)
§Value Representation
Nil- The empty list (NOT false!)True- Boolean true (#t)False- Boolean false (#f)Number(isize)- Integer numbersChar(char)- Single characterCons { car, cdr }- Pair/list cell with inline indicesSymbol(ArenaIndex)- Symbol pointing to interned stringLambda { params, body_env }- Closure with inline indicesBuiltin(Builtin)- Optimized built-in functionStdLib(StdLib)- Standard library function (static code, parsed on-demand)Array { len, data }- Vector with inline lengthString { len, data }- String with inline lengthNative { id, name_hash }- Native Rust function reference
§Reserved Slots
The Lisp singleton values (nil, true, false) are pre-allocated in reserved slots at initialization time.
The first 4 slots of the arena are reserved:
- Slot 0:
Value::Nil- empty list singleton - Slot 1:
Value::True- boolean true singleton - Slot 2:
Value::False- boolean false singleton - Slot 3:
Value::Cons- intern table reference cell
§Pitfalls and Gotchas
§Truthiness
- Only
#fis false! Everything else is truthy, including:nil/'()(the empty list)0(the number zero)- Empty strings
§Garbage Collection
- The intern table is always a GC root - interned symbols are never collected
- Reserved slots (nil, true, false) are implicitly preserved
- Run
gc()with appropriate roots to reclaim memory
§StdLib Functions
- Body is parsed on each call (minor overhead, but keeps code out of arena)
- Recursive stdlib functions work via the global environment
- Errors in static source strings are only caught at runtime
Macros§
- define_
builtins - Macro for defining built-in functions.
- define_
stdlib - Macro for defining standard library functions.
Structs§
- Arena
- Fixed-size arena allocator with O(1) allocation.
- Arena
Index - Index into the arena.
- GcStats
- Statistics returned by garbage collection.
- Lisp
- A Lisp execution context wrapping an arena
- Parse
Error - Parser error with location
- Parser
- Parser state
- Source
Loc - Source location for error reporting
Enums§
- Arena
Error - Errors that can occur during arena operations.
- Builtin
- Built-in functions (optimization to avoid symbol lookup)
- Parse
Error Kind - StdLib
- Standard library functions (stored in static memory, not arena)
- Value
- A Lisp value
Constants§
- RESERVED_
SLOTS - Number of reserved slots in the arena:
Traits§
- Trace
- Trait for types that can be traced by the garbage collector.
Functions§
Type Aliases§
- Arena
Result - Result type for arena operations.