Hoot 0.10.0 released

Lobsters Hottest Tools

Summary

Spritely Institute 发布了 Hoot 0.10.0,这是一个将 Scheme 编译到 WebAssembly 的 Guile 编译器后端及通用 WebAssembly 工具链。本次更新包含大量编译器、运行时和 Scheme 标准库(如 SRFI-13、SRFI-60、多个 R6RS 模块)的新增功能与修复,并发布了用于 Lisp Game Jam 的游戏开发模板。

<p><a href="https://lobste.rs/s/m3gsln/hoot_0_10_0_released">Comments</a></p>
Original Article
View Cached Full Text

Cached at: 10/28/26, 05:31 PM

# Hoot 0.10.0 released! — Spritely Institute Source: [https://spritely.institute/news/hoot-0-10-0-released.html](https://spritely.institute/news/hoot-0-10-0-released.html) Dave Thompson —October 28, 2026We are excited to announce the release of[Hoot](https://spritely.institute/hoot)0\.10\.0\! Hoot is a Scheme to WebAssembly compiler backend for[Guile](https://gnu.org/software/guile), as well as a general purpose WebAssembly toolchain\. In other words,*Scheme in the browser\!* This release contains new features and bug fixes and since the[0\.9\.0 release](https://spritely.institute/news/hoot-0-9-0-released.html)back in May\. ## Use Hoot in the upcoming Lisp Game Jam\! On Friday \(October 30th 2026\), the[autumn edition of the Lisp Game Jam](https://itch.io/jam/autumn-lisp-game-jam-2026)will begin\! It's a 10\-day long game jam where participants make games using their favorite flavor of Lisp\. Does making a small web game in Scheme using Hoot sound appealing to you? Well, then we have just the thing to get you started: the[Hoot game jam template\!](https://codeberg.org/spritely/hoot-game-jam-template)This template project has everything you need to start making an HTML5 game with Hoot quickly\. The template repository includes: - Bindings to the necessary web APIs to make an interactive game with HTML5 canvas - A Makefile for compiling, running a development web server, and generating a \.zip bundle for uploading to itch\.io - A very simple Breakout\-like example game that demonstrates how to put all the pieces together For more inspiration, here are some games made with Hoot for past jams: - [Cirkoban](https://davexunit.itch.io/cirkoban) - [Strigoform](https://davexunit.itch.io/strigoform) - [Shields TYVM](https://podatus.itch.io/shields-tyvm) Now, onto the release notes\! ## Compiler changes - Added module name to contextualize duplicate import errors\. - Added support for library versioning for R6RS compatibility\. - Fixed default version for`define\-module`libraries\. - Fixed`locate\-library`not respecting configured load extensions\. Previously, we were using Guile's load extension parameter instead of Hoot's own\. ## Runtime changes - Added`%struct\-ref`and`%struct\-set\!`primitives for accessing record types defined using the interpreter\. - Stopped raising errors when importing an undefined symbol in the runtime module system\. Guile is lax about this so Hoot being strict caused compatibility issues\. - Fixed optional argument parsing in`primitive\-eval`\. - Fixed keyword argument parsing for procedures with both optional and keyword arguments in`primitive\-eval`\. - Fixed error messages regarding runtime module registry to include the correct CLI flag:`\-fruntime\-modules`\. ## Scheme changes - Added partial implementation of[SRFI\-13](https://srfi.schemers.org/srfi-13/srfi-13.html): String Libraries\. It's just a set of re\-exports, very similar to Guile, but Guile's SRFI\-13 module is not declarative and is thus rejected by Hoot's compiler\. - Added partial implementation of[SRFI\-60](https://srfi.schemers.org/srfi-60/srfi-60.html): Integers as Bits\. - Added`define\-macro`,`defmacro`,`delete`,`list\-\>symbol`, and`symbol`to`\(guile\)`\. - Exported`define\-syntax\-parameter`and`syntax\-parameterize`,`symbol\-append`,`integer\-length`, and`gensym`from`\(guile\)`\. - Added`list\-\>bitvector`and`bitvector`to`\(hoot bitvectors\)`and re\-exported them in`\(guile\)`\. - Implemented`get\-bytevector\-all`in`\(rnrs io ports\)`\. - Made`bytevector=?`a publicly exported procedure from`\(hoot bytevectors\)`and`\(rnrs bytevectors\)`\. - Added`define\-syntax\-parameter`and`syntax\-parameterize`primitives\. - Improved`\(ice\-9 exceptions\)`exports to more closely match Guile\. - Added`\(rnrs\)`module\. - Added`\(rnrs base\)`module\. - Added`\(rnrs syntax\-case\)`module\. - Added`\(rnrs r5rs\)`module\. - Added`\(rnrs hashtables\)`module\. - Added`\(rnrs files\)`module\. - Added`\(rnrs enums\)`module\. - Added`\(rnrs exceptions\)`module\. - Added`\(rnrs arithmetic fixnums\)`module\. - Added`\(rnrs records inspection\)`module\. - Added`\(rnrs records procedural\)`module\. - Added`\(rnrs records syntactic\)`module\. - Added`\(rnrs io simple\)`module\. - Added`\(rnrs io ports\)`module\. - Added`port\-has\-position?`to`\(hoot ports\)`for R6RS compatibility\. - Added stubs for centered division to`\(hoot numbers\)`and a stub for`integer\-length`to`\(hoot bitwise\)`for R6RS compatibility \(eventually\)\. - Rewrote`\(rnrs bytevectors\)`as an R6RS module with version`\(6\)`\. - Fixed`number\-\>string`to round floating point decimal part to an even digit\. - Fixed`number\-\>string`for floating point numbers ±2^N, where 52 <= N <= 1023\. - Fixed incorrect bytevector copy in`number\-\>string`floating point conversion algorithm\. - Fixed`min`/`max`macros not working when given zero arguments\. - Fixed the parameters to the`log`procedure in`\(guile\)`\. - Fixed the implementation of`negate`in`guile`\. It was doing entirely the wrong thing\. ## CLI changes - Port numbers are now validated to be exact integers in the range \[1, 65535\]\. - Actually complain about invalid option or unknown subcommand\. Previously, the code that was supposed to do this was unreachable\. - Add`\-\-experimental\-wasm\-exnref`feature flag when running`hoot compile \-\-run=node`for continued compatibility with supported NodeJS versions that don't have the new Wasm exnref feature enabled by default\. - Fixed build\-time disabling of`hoot server`\. In past releases, the`hoot`CLI script would still attempt to load should\-be\-optional libraries that`\./configure`had already determined to be missing\. Thanks to mcc for discovering this blunder\. ## Documentation changes - Improved instructions in "Building from source" section of the manual\. - Dependencies are now mentioned in the "Advanced path" section of the`README`\. - Updated project template`README`to say Guix is*not*required \(though it's still the easiest option\)\. ## Browser compatibility - Compatible with Safari 26 or later\. - Compatible with Firefox 121 or later\. - Compatible with Chrome 119 or later\. ## Get Hoot Hoot is available in GNU Guix: ``` $ guix pull $ guix install guile guile-hoot ``` Also, Hoot is now available in[Debian](https://tracker.debian.org/pkg/guile-hoot), though it will take awhile for this release to make it there\. Otherwise, Hoot can be built from source via our release tarball\. See the[Hoot homepage](https://spritely.institute/hoot)for a download link and GPG signature\. Documentation for Hoot 0\.10\.0, including build instructions, can be found[here](https://spritely.institute/files/docs/guile-hoot/0.10.0/index.html)\. ## Get in touch For bug reports, pull requests, or just to follow along with development, check out the[Hoot project on Codeberg](https://codeberg.org/spritely/hoot)\. If you build something cool with Hoot, let us know on our[community forum](https://community.spritely.institute/)\! Thanks to Z572, stdh, Walter Lewis, and Jelle Licht for their contributions to this release\. Until next time, happy hooting\! 🦉 ## Thanks to our supporters Your support makes our work possible\! If you like what we do, please consider[becoming a Spritely supporter today](https://spritely.institute/donate)\! ### Diamond tier - Aeva Palecek - David Anderson - Holmes Wilson - Jonathan Frederickson - Lassi Kiuru ### Gold tier - Alex Sassmannshausen - Juan Lizarraga Cubillos - Nerine Pekowsky - Serra Allgood ### Silver tier - Austin Robinson - Brit Butler - Charlie McMackin - Dan Connolly - Deb Nicholson - Diana Thayer - Eric Bavier - Eric Schultz - Evangelo Stavro Prodromou - Evgeni Ku - Glenn Thompson - James Luke - Jonathan Smith - Jonathan Wright - Justin Sheehy - Matt Panhans - Michel Lind - Mike Ledoux - Moto A - Nathan TeBlunthuis - Nia Bickford - Noah Beasley - Steve Sprang - Travis Smith ### Bronze tier - Alan Zimmerman - Aria Stewart - Ben Hamill - Benjamin Grimm\-Lebsanft - Brooke Vibber - Brooklyn Zelenka - Carl A - Crazypedia No - Ellie High - François Joulaud - Gabor Udvari - Grant Gould - Gregory Buhtz - James Smith - Jason Wodicka - Jeff Forcier - Marty McGuire - Mason DeVries - Michael Orbinpost - Neil Brudnak - Nelson Pavlosky - Philipp Nassua - Rodion Goritskov - Ron Welch - Stefan Magdalinski - Stephen Herrick - Steven De Herdt - Tamara Schmitz - Thomas Talbot - William Murphy - a b - chee rabbits - r g - terra tauri

Similar Articles

Hoot 0.9.0 released

Lobsters Hottest

Hoot 0.9.0, a Scheme to WebAssembly compiler backend for Guile, has been released with new features and bug fixes, including DWARF support, standard Wasm exceptions, and a game jam template for the Lisp Game Jam.

Scheme is a Hoot

Lobsters Hottest

The author shares their experience learning Scheme and using Hoot to compile it to WebAssembly, encountering stability issues but successfully running physics simulations in the browser.