Guile Hoot v0.4.1 released!

-- Tue 30 April 2024

Hoot version 0.4.1

We are excited to announce the release of Guile Hoot v0.4.1! Hoot is a Scheme to WebAssembly compiler backend for Guile, as well as a general purpose WebAssembly toolchain. In other words, Scheme in the browser!

This is a maintenance release that primarily fixes many bugs present in Hoot 0.4.0, but there are also a few developer experience improvements. Read on for the full release notes.

New features

  • Added initial support for Guile's define-module syntax with the caveat that modules must be marked as #:pure. Impure modules implicitly import (guile) which Hoot does not yet provide.

  • Added hashq procedure to (hoot hashtables).

  • Added --run flag to guild compile-wasm for quickly testing programs in the terminal.

  • Added --mode flag to guild compile-wasm to control how the Hoot ABI is exported/imported in the resulting module.

  • Added --dump-tree-il flag to guild compile-wasm for debugging.

  • Added (hoot web-server) module which provides a development static file web server. Updated tutorial and project template to use it.

  • Non-continuable exceptions now include a message explaining what such an error means.

  • Improved define-foreign macro to validate that the module and name fields are string literals.

  • Removed requirement to have an expression at the end of a program.

Bug fixes

  • Fixed prompt unwinding in tailify that caused miscompilations.

  • Fixed known-return-arity calls in tailify that caused miscompilations.

  • Fixed kargs-splitting in tailify that caused compilation errors.

  • Fixed (ref extern) parameters not working in define-foreign.

  • Fixed records and parameters being unable to be created at expansion-time.

  • Fixed several small issues in port implementation.

  • Fixed call-with-values to allow arbitrary consumer expression, not just a lambda.

  • Fixed weak map imports for Hoot VM.

  • Fixed syntax definitions in programs not being evaluated.

  • Fixed linker to allow exports to pull in tag definitions.

  • Worked around partial evaluator giving up inlining dynamic-wind.

Browser compatibility

  • Compatible with Firefox 121 or later.

  • Compatible with Google Chrome 119 or later.

  • Safari/WebKit is unsupported, unfortunately, as Wasm GC and tail calls are still not available.

Get Hoot 0.4.1!

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 homepage for a download link and GPG signature.

Documentation for Hoot 0.4.1, including build instructions, can be found here.

Make a game with Hoot!

The annual Spring Lisp Game Jam is coming up! Starting on Friday, May 17th, the Lisp Game Jam is a 10-day long event in which participants make small games using their favorite Lisp dialect. If this sounds like a fun time to you, we encourage you to register for the jam and try making a game with Hoot!

To help you get started right away, we've put together a game jam template repository that has everything you need to make a 2D game using Hoot and HTML5 canvas.

Get in touch!

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!

The code in this release was brought to you by Andy Wingo and David Thompson. Thanks and apologies to Juliana Sims, who found so many bugs. The lovely Hoot art is by tessa. Special thanks to the MetaMask folks for funding this work!

Until next time, happy hooting! 🦉