Wastrel milestone: full Hoot support, with generational GC as a treat

What happened
It has been reported that Wastrel can now produce native binaries from WebAssembly files emitted by the Hoot Scheme toolchain — and crucially, that those binaries include a working REPL. No browser required: compile your Hoot code to a single .wasm with runtime modules enabled, run Wastrel’s compile step, and you get a console REPL that behaves like the Hoot web demo. Magic? A little. Practical? Definitely.
How to reproduce
The workflow is straightforward: build Hoot from source, compile a tiny REPL stub with -fruntime-modules (to avoid tree-shaking away bindings the REPL will need), then run wastrel compile on the resulting repl.wasm. With runtime modules enabled the wasm produced for the REPL balloons to about 6.6 MB; with tree-shaking it would be more like 1.2 MB. It has been reported that Wastrel’s C generation produces roughly 6.6 million lines of C spread across a couple hundred ~30KLOC files — about three minutes to emit C and another two minutes to compile with GCC + LTO on a 32-core machine.
Size, GC and performance
The native repl binary is large: a debug build sits around 180 MB and strips down to about 33 MB, with ~92% in .text. Dynamically it’s lean in dependencies (glibc, libm, libgcc), and it bundles a Whippet garbage collector implementation with no extra run-time deps. Running the REPL with WASTREL_PRINT_STATS=1 shows a peak live heap near 4 MB but totals roughly 15 MB; startup and exit can be as fast as ~17 ms when the heap is fixed via GC_OPTIONS (heap-size=15m,heap-size-policy=fixed). Benchmarking collectors is messy — allocation/heap-growth heuristics differ between generational and non‑generational or Boehm collectors — but generational GC support is now available as an option, offered as a bit of a treat for those worried about throughput.
Why this matters
This is a neat moment for the small-but-feisty Lisp-on-WebAssembly scene: a path from Hoot’s high-level Scheme toolchain through Wasm into a usable native REPL. Want a portable, browser-free development loop for Scheme that leverages Wasm tooling? Now you can. It’s also a clear snapshot of trade-offs: convenience and expressiveness today, size and compilation-time quirks tomorrow. Expect optimizations — both in the C emitter and in binary size — to be the next battleground.
Sources: wingolog.org, Lobsters
Comments