We are excited to announce the first official release of Guile Hoot, v0.1.0! Hoot is a Scheme to WebAssembly compiler backend for GNU Guile, as well as a general purpose WebAssembly toolchain. In other words, Scheme in the browser! At long last, thanks to WASM GC, it’s finally possible for other dynamic languages to be first-class citizens on the web. Make room, JavaScript, you’re no longer the only game in town!
This initial v0.1.0 release features support for a subset of R7RS-small Scheme, a JavaScript library providing an interface to Scheme, and a full WASM toolchain implemented as a set of Scheme libraries.
Features
Hoot has a number of notable features that distinguish it from many other WASM tools out there:
- Self-contained toolchain: No emscripten, binaryen, wabt, etc.
- GC reference type usage: The host provides the garbage collector.
- Small programs produce small binaries: Kilobytes, not megabytes.
- Full development environment: Compile and run WASM binaries without leaving Guile.
Hoot’s WASM toolchain includes:
- WAT parser: Converts WAT to WASM. Both folded and unfolded forms are supported.
- Assembler: Generates WASM binaries.
- Binary parser: Converts WASM binaries to an internal WASM data structure.
- Disassembler: Converts WASM to WAT.
- Linker: Composes WASM modules with a standard libary, adding in only what is actually used.
- Interpreter: Validates and evaluates WASM without having to jump into the web browser.
Limitations
Hoot is still in an early phase of active development and there are many missing features, including:
- Module system
- Record types
- Environments and evaluation
- Foreign function interface
For our next release, we intend to provide full R7RS-small support as we work towards the larger goal of supporting all of Guile.
Get Hoot v0.1.0!
Hoot is already available in GNU Guix:
$ guix pull
$ guix install guile-next guile-hoot
(Hoot currently requires a bleeding-edge version of Guile, hence
guile-next
above.)
Otherwise, Hoot can be built from source via our release tarball. See the Hoot landing page for a download link and GPG signature.
Learn more!
Documentation for Hoot v0.1.0, including build instructions, can be found here.
For code samples and a live demo of Hoot, check out last week’s blog post about implementing Wireworld in Scheme and running it inside a web browser.
BONUS: Three members of the Spritely team recently appeared on the System Crafters live stream to talk with David Wilson in detail about Hoot. If this interests you, check out the recording of the stream.
For bug reports, pull requests, or just to follow along with development, check out the Hoot project on GitLab.
If you build something cool with Hoot, let us know on our community forum! (Use OCAPN2023 for the Invite Code when you join.)
This release was brought to you by Andy Wingo, Christine Lemmer-Webber, Robin Templeton, and David Thompson. Special thanks to the MetaMask folks for funding this work!
Happy hooting! 🦉