Expand description
§Lisp Evaluator
A Lisp evaluator with fully trampolined evaluation - no Rust stack recursion, enabling unlimited recursion depth (bounded only by heap/arena size).
§Key Features
- Full Trampolining: All evaluation uses continuation-passing style with an explicit continuation stack. No Rust recursion means no stack overflow.
- Strict Evaluation: Call-by-value semantics - all arguments are evaluated before function application
- Proper TCO: Tail calls reuse the same continuation frame
- Lexically Scoped Closures: First-class functions with captured environments
- Rich Error Handling: Error messages with stack traces
- Pattern Matching:
casefor value matching - Iteration:
doloops for imperative-style iteration - Meta-programming:
evalfor runtime code evaluation,quasiquote/unquote - Mutation:
set!,set-car!,set-cdr!for imperative programming
§Evaluation Strategy
This evaluator uses strict (call-by-value) evaluation:
- All function arguments are fully evaluated before the function is called
- This provides predictable evaluation order and side-effect timing
- Tail call optimization is supported for constant-space recursion
§Mutation
This Lisp supports mutation operations for imperative programming:
set!- Mutate a variable bindingset-car!- Mutate the car of a cons cellset-cdr!- Mutate the cdr of a cons cell
Note: Mutation breaks referential transparency but enables imperative patterns.
§Truthiness
Only #f is false. Everything else (including the empty list '()) is truthy.
§Special Forms
quote- Return expression unevaluatedif- Conditionalcond- Multi-way conditionalcase- Pattern matching on valueslambda- Create closuredefine- Define variable/functionset!- Mutate variable bindinglet- Local bindinglet*- Sequential local bindingbegin- Sequence of expressionsand/or- Short-circuit boolean operationsdo- Iteration with initialization and step expressionsquasiquote- Template withunquoteandunquote-splicingeval- Evaluate expression at runtimeapply- Apply function to argument listvalues- Return multiple values as a list
Re-exports§
pub use native::FromLisp;pub use native::ToLisp;pub use native::NativeRegistry;pub use native::NativeEntry;pub use native::NativeFn;pub use native::extract_arg;pub use native::args_empty;pub use native::count_args;pub use native::simple_hash;pub use native::MAX_NATIVE_FUNCTIONS;
Modules§
- native
- Native Function Interop
Macros§
- register_
native - Register a native Rust function as a Lisp builtin with automatic argument extraction.
Structs§
- Arena
- Fixed-size arena allocator with O(1) allocation.
- Arena
Index - Index into the arena.
- Error
Message - Fixed-size message buffer for no_std
- Eval
Error - Evaluation error with context
- Evaluator
- Maximum number of macros that can be defined The Lisp evaluator with full trampolined TCO
- GcStats
- Statistics returned by garbage collection.
- Lisp
- A Lisp execution context wrapping an arena
- Parse
Error - Parser error with location
- Source
Loc - Source location for error reporting
- Stack
Frame - A stack frame for error reporting
Enums§
- Arena
Error - Errors that can occur during arena operations.
- Builtin
- Built-in functions (optimization to avoid symbol lookup)
- Error
Kind - Error kind enumeration
- Num
- Numeric value that can be either an integer or a float. Used internally for arithmetic operations with type promotion.
- Parse
Error Kind - StdLib
- Standard library functions (stored in static memory, not arena)
- Value
- A Lisp value
Traits§
- Trace
- Trait for types that can be traced by the garbage collector.
Functions§
- parse
- Parse a string into a Lisp expression
Type Aliases§
- Arena
Result - Result type for arena operations.
- Eval
Result - Result type for evaluation