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

April 9, 2026
Person making an online payment using a laptop and card reader.
Photo by REINER SCT on Pexels

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