Repository navigation
EGCL v0.0.8
0.0.8 - 2026-10-14
Native compilation and performance
- Compile eligible recursive self-calls directly through the x86-64 Lisp ABI, preserving
NOTINLINE, lexical function bindings, and the executing definition across redefinition and garbage collection. Retain this behavior in source-free BFASL files (#307). - Reduce ordinary T2 call overhead with cheaper multiple-value handling, smaller frames, execution-local polling, and fewer redundant checks. Let proven noncollecting entry paths, including simple recursive base cases, return before constructing a native frame (#308, #309, #310, #326).
- Preserve bounded integer parameter ranges in T2. Use proven numeric bounds to remove redundant recursive argument checks and add/subtract overflow checks, while retaining checks where safety cannot be proved. Optimize eligible pure return paths with bounded partial evaluation (#326).
- Eliminate redundant native frame-slot reloads while retaining the stores needed for garbage collection and recovery (#326, incorporating the reload optimization from #311).
Benchmark details and caveats are recorded in the checked-range recursion report. Its measured release revision ran warmed, bounded-integer fib(35) in a median 30 ms on the benchmark host, versus 33 ms for an implementation-specifically tuned SBCL version. This is a workload-specific comparison, not a general performance claim or a matched v0.0.7-to-v0.0.8 comparison.
Fiber scheduling and cancellation
- Schedule fibers cooperatively without automatic CPU time slices or per-fiber CPU budgets. Add cooperative cancellation with explicit checkpoints and interruptible public sleep, park, and join; retain opt-in sandbox CPU limits (#326, incorporating #312).
Correctness and compatibility
- Accept global
INLINEandNOTINLINEdeclarations for SETF function names without confusing their policies with the corresponding getters, fixing ASDF loading (#326). - Enforce declared argument bounds on direct recursive calls, including calls replaced by pure return shortcuts. Correct constant-left subtraction when the result reuses the right operand's register (#326).
- Retain global
FTYPEdeclaration metadata during compilation and source-free BFASL loading (#326). - Reject oversized typed allocations before their body lengths or aligned footprints overflow GC size metadata (#302).
- Convert huge rational values to floating point without intermediate infinity, preserving subnormal values and correct rounding (#304).
- Preserve large-object identities, payload references, and true header pinning when restoring and resaving heap images (#305).
Tooling
- Label native profiler maps with the actual T1, T2, or OSR tier (#303).
Scope limits
Retaining FTYPE metadata does not yet enable result-type enforcement or optimization based on declared result types. General recursive inlining with nested deoptimization and a private unboxed local-call ABI remain separate work.