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.
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
Otherwise, Hoot can be built from source via our release tarball. See the Hoot landing page for a download link and GPG signature.
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.)
Happy hooting! 🦉