Guile Hoot v0.4.1 released!
Dave Thompson —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 toguild compile-wasm
for quickly testing programs in the terminal. -
Added
--mode
flag toguild compile-wasm
to control how the Hoot ABI is exported/imported in the resulting module. -
Added
--dump-tree-il
flag toguild 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 indefine-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 alambda
. -
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! 🦉