Seed: Adding `vau` with an immutable dynamic environment to Chez Scheme

Lisp’s wildest idea gets a safety lock — and the comments go feral

TLDR: Seed adds a safer version of Kernel’s “vau” to Chez Scheme by making the caller’s environment read‑only, promising speed without chaos. Comments erupted: pragmatists celebrate “finally practical,” purists call it “Kernel‑lite,” and a Kraken vs. Seed rivalry flares over purity vs. real‑world usefulness.

Lisp old‑timers and curious newcomers are losing their minds over Seed’s big swing: bringing Kernel’s vaunted “vau” (think: a function that can choose what to evaluate) into Chez Scheme, but with a twist — the caller’s environment is read‑only. Translation for non‑nerds: it can peek at your variables, not poke them, so compilers can finally go fast.

The crowd split instantly. The pragmatists are cheering: “At last, fexprs without turning the compiler into spaghetti!” They say this safety lock solves a 1998 rant that said these things were basically un-optimizable. The purists? Furious. “If you can’t mutate the caller, is it even Kernel?” They’re calling it Kernel‑lite, accusing Seed of declawing the very power that made vau magical. Cue memes: “child locks on parentheses,” “set! boundaries,” and “therapy for macros.”

Then the turf war kicked in. Fans of the purely functional Kraken paper flexed receipts: “We did fast fexprs first, no side effects needed.” Seed backers fired back that real‑world code needs some mutation—and this keeps it where it’s safe. Chez Scheme veterans, meanwhile, are clutching benchmarks and asking for numbers before the parade. One thing’s clear: unifying macros and functions with a read‑only vibe check just lit up the most dramatic Lisp flame war of 2026.

Key Points

  • Seed extends Chez Scheme with Kernel’s vau while making the dynamic environment immutable to enable competitive compilation.
  • The approach preserves vau’s ability to introspect the caller’s environment but forbids mutation (no define or set! on the dynamic environment).
  • The article traces Kernel’s lineage and credits John Nathan Shutt’s SINK interpreter and 2009/2010 works on the Kernel language and $vau.
  • Wand’s 1998 result is cited as the historical barrier to compiling fexprs; the immutability fix is presented as a 2026 turning point.
  • An edit notes Kraken’s purely functional partial-evaluation approach to compiling fexprs and distinguishes seed as non-pure and a Chez Scheme extension.

Hottest takes

"They put child locks on fexprs and now it actually drives" — u/parenPatrol
"If you can’t mutate the caller, is it still Kernel or just Kernel‑flakes?" — u/syntax_skeptic
"Macros are shaking; vau just did a speedrun to practicality" — u/sideEffectZero
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.