Hoot 0.10.0 发布
摘要
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">评论</a></p>
查看缓存全文
缓存时间: 2026/10/28 17:31
# Hoot 0.10.0 发布!— Spritely Institute
来源: https://spritely.institute/news/hoot-0-10-0-released.html
Dave Thompson —2026年10月28日
我们很高兴地宣布 [Hoot](https://spritely.institute/hoot) 0.10.0 正式发布!Hoot 是 [Guile](https://gnu.org/software/guile) 的 Scheme 到 WebAssembly 编译器后端,同时也是一套通用的 WebAssembly 工具链。换句话说,*在浏览器里运行 Scheme!*
本次发布包含自[五月的 0.9.0 版本](https://spritely.institute/news/hoot-0-9-0-released.html)以来的新功能和 bug 修复。
## 在即将到来的 Lisp Game Jam 中使用 Hoot!
本周五(2026年10月30日),[Lisp Game Jam 秋季赛](https://itch.io/jam/autumn-lisp-game-jam-2026)即将开始!这是一个为期 10 天的游戏开发挑战赛,参赛者使用自己喜爱的 Lisp 方言来制作游戏。
用 Hoot 用 Scheme 编写一个小型网页游戏听起来是不是很吸引人?如果是的话,我们正好有一个能帮你快速上手的工具:[Hoot 游戏 Jam 模板](https://codeberg.org/spritely/hoot-game-jam-template)!这个模板项目包含了使用 Hoot 快速制作 HTML5 游戏所需的一切。
模板仓库包括:
- 与必要 Web API 的绑定,用于通过 HTML5 canvas 制作交互式游戏
- 一个 Makefile,用于编译、运行开发 Web 服务器以及生成可上传到 itch.io 的 .zip 打包文件
- 一个非常简单的 Breakout 类示例游戏,演示如何将所有组件整合在一起
以下是一些在往届游戏 Jam 中使用 Hoot 制作的游戏,希望能给你带来更多灵感:
- [Cirkoban](https://davexunit.itch.io/cirkoban)
- [Strigoform](https://davexunit.itch.io/strigoform)
- [Shields TYVM](https://podatus.itch.io/shields-tyvm)
好了,下面是本次的发布说明!
## 编译器变更
- 在重复导入错误信息中添加了模块名称以便定位。
- 添加了对 R6RS 兼容的库版本支持。
- 修复了 `define-module` 库的默认版本问题。
- 修复了 `locate-library` 不尊重已配置的加载扩展名的问题。之前我们使用的是 Guile 的加载扩展参数而非 Hoot 自己的。
## 运行时变更
- 添加了 `%struct-ref` 和 `%struct-set!` 原语,用于访问使用解释器定义的记录类型。
- 在运行时模块系统中导入未定义符号时不再抛出错误。Guile 对此较为宽松,Hoot 的严格处理导致了兼容性问题。
- 修复了 `primitive-eval` 中可选参数的解析问题。
- 修复了 `primitive-eval` 中同时具有可选参数和关键字参数的过程的关键字参数解析问题。
- 修复了运行时模块注册表相关的错误信息,使其显示正确的 CLI 标志:`-fruntime-modules`。
## Scheme 变更
- 添加了 [SRFI-13](https://srfi.schemers.org/srfi-13/srfi-13.html)(字符串库)的部分实现。这只是一组重新导出,与 Guile 非常类似,但 Guile 的 SRFI-13 模块不是声明式的,因此被 Hoot 的编译器拒绝。
- 添加了 [SRFI-60](https://srfi.schemers.org/srfi-60/srfi-60.html)(整数位操作)的部分实现。
- 在 `(guile)` 中添加了 `define-macro`、`defmacro`、`delete`、`list->symbol` 和 `symbol`。
- 从 `(guile)` 导出了 `define-syntax-parameter` 和 `syntax-parameterize`、`symbol-append`、`integer-length` 和 `gensym`。
- 在 `(hoot bitvectors)` 中添加了 `list->bitvector` 和 `bitvector`,并在 `(guile)` 中重新导出。
- 在 `(rnrs io ports)` 中实现了 `get-bytevector-all`。
- 将 `bytevector=?` 作为公开导出的过程,从 `(hoot bytevectors)` 和 `(rnrs bytevectors)` 提供。
- 添加了 `define-syntax-parameter` 和 `syntax-parameterize` 原语。
- 改进了 `(ice-9 exceptions)` 的导出,使其更接近 Guile。
- 添加了 `(rnrs)` 模块。
- 添加了 `(rnrs base)` 模块。
- 添加了 `(rnrs syntax-case)` 模块。
- 添加了 `(rnrs r5rs)` 模块。
- 添加了 `(rnrs hashtables)` 模块。
- 添加了 `(rnrs files)` 模块。
- 添加了 `(rnrs enums)` 模块。
- 添加了 `(rnrs exceptions)` 模块。
- 添加了 `(rnrs arithmetic fixnums)` 模块。
- 添加了 `(rnrs records inspection)` 模块。
- 添加了 `(rnrs records procedural)` 模块。
- 添加了 `(rnrs records syntactic)` 模块。
- 添加了 `(rnrs io simple)` 模块。
- 添加了 `(rnrs io ports)` 模块。
- 在 `(hoot ports)` 中添加了 `port-has-position?` 以实现 R6RS 兼容。
- 在 `(hoot numbers)` 中添加了居中除法的桩实现,在 `(hoot bitwise)` 中添加了 `integer-length` 的桩实现,为 R6RS 兼容做准备(最终实现)。
- 将 `(rnrs bytevectors)` 重写为版本 `(6)` 的 R6RS 模块。
- 修复了 `number->string` 浮点数十进制部分向偶数舍入的问题。
- 修复了 `number->string` 对 ±2^N(其中 52 <= N <= 1023)范围内浮点数的处理。
- 修复了 `number->string` 浮点数转换算法中不正确的字节向量复制。
- 修复了 `min`/`max` 宏在零参数时无法工作的问题。
- 修复了 `(guile)` 中 `log` 过程的参数。
- 修复了 `guile` 中 `negate` 的实现。之前完全是错误的行为。
## CLI 变更
- 端口号现在会被验证为 [1, 65535] 范围内的精确整数。
- 现在会真正报告无效选项或未知子命令。之前负责此功能的代码是无法到达的。
- 在运行 `hoot compile --run=node` 时添加了 `--experimental-wasm-exnref` 特性标志,以持续兼容那些尚未默认启用新版 Wasm exnref 特性的受支持 NodeJS 版本。
- 修复了构建时禁用 `hoot server` 的问题。在过去的版本中,`hoot` CLI 脚本仍会尝试加载 `./configure` 已确定缺失的应为可选的库。感谢 mcc 发现了这个疏漏。
## 文档变更
- 改进了手册中"从源代码构建"章节的说明。
- `README` 的"高级路径"章节中现在提到了依赖项。
- 更新了项目模板的 `README`,说明 Guix 并*非*必需(虽然它仍是最简单的选项)。
## 浏览器兼容性
- 兼容 Safari 26 及更高版本。
- 兼容 Firefox 121 及更高版本。
- 兼容 Chrome 119 及更高版本。
## 获取 Hoot
Hoot 可在 GNU Guix 中获取:
```
$ guix pull
$ guix install guile guile-hoot
```
此外,Hoot 现在也可在 [Debian](https://tracker.debian.org/pkg/guile-hoot) 中获取,不过这个版本还需要一段时间才能到达那里。
除此之外,Hoot 也可以通过我们的发布 tarball 从源代码构建。请访问 [Hoot 主页](https://spritely.institute/hoot)获取下载链接和 GPG 签名。
Hoot 0.10.0 的文档(包括构建说明)可在[此处](https://spritely.institute/files/docs/guile-hoot/0.10.0/index.html)找到。
## 联系我们
如需报告 bug、提交拉取请求,或只是关注开发动态,请访问 [Codeberg 上的 Hoot 项目](https://codeberg.org/spritely/hoot)。
如果你用 Hoot 构建了什么酷炫的东西,请在[我们的社区论坛](https://community.spritely.institute/)上告诉我们!
感谢 Z572、stdh、Walter Lewis 和 Jelle Licht 对本次发布的贡献。
下次见,祝你玩得开心!🦉
## 感谢我们的支持者
您的支持使我们的工作成为可能!如果您喜欢我们所做的工作,请考虑[今天就成为 Spritely 的支持者](https://spritely.institute/donate)!
### 钻石级
- Aeva Palecek
- David Anderson
- Holmes Wilson
- Jonathan Frederickson
- Lassi Kiuru
### 黄金级
- Alex Sassmannshausen
- Juan Lizarraga Cubillos
- Nerine Pekowsky
- Serra Allgood
### 白银级
- 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
### 青铜级
- 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
相似文章
Hoot 0.9.0 发布
Hoot 0.9.0,一个用于 Guile 的 Scheme 到 WebAssembly 编译器后端,已发布,包含新功能和错误修复,包括 DWARF 支持、标准 Wasm 异常,以及为 Lisp Game Jam 提供的游戏 jam 模板。
Scheme 是一个 Hoot
作者分享了学习 Scheme 并使用 Hoot 将其编译为 WebAssembly 的经验,虽然遇到了稳定性问题,但成功在浏览器中运行了物理模拟。
@msimoni:我一天内创建了这个,它有点像拼凑的语言,但确实有一些有趣的想法和结果:Idle…
一位开发者创建了 Idle,这是一个用于 WebAssembly GC 的静态类型、低级 Lisp,具有 O(1) 方法查找和从 Wasm 模块加载宏等有趣功能。
Show HN: Nectar——一个类 Rust 的 React,编译为 WebAssembly
Nectar 是一个新型 Web 框架,将类 Rust 代码编译为 WebAssembly,通过 O(1) 信号更新和零依赖构建消除了 JavaScript 依赖。
@huihoo: NASA 开源 Rust 开发的符合航空标准的 WebAssembly 解释器 https://github.com/nasa/spacewasm 最近,#Rust 重构、重新实现的开源项目有些多,要挺住
NASA开源了SpaceWasm,这是一个用Rust编写的、符合航空标准的WebAssembly解释器,专为航天器机载环境设计,支持流式解码和确定性内存分配。