Hoot 0.9.0 发布
摘要
Hoot 0.9.0,一个用于 Guile 的 Scheme 到 WebAssembly 编译器后端,已发布,包含新功能和错误修复,包括 DWARF 支持、标准 Wasm 异常,以及为 Lisp Game Jam 提供的游戏 jam 模板。
<p><a href="https://lobste.rs/s/9drz1z/hoot_0_9_0_released">评论</a></p>
查看缓存全文
缓存时间: 2026/05/14 12:30
# Hoot 0.9.0 发布!——Spritely Institute
来源:https://spritely.institute/news/hoot-0-9-0-released.html
戴夫·汤普森 — 2026年5月13日
我们激动地宣布 [Hoot](https://spritely.institute/hoot) 0.9.0 正式发布!Hoot 是 [Guile](https://gnu.org/software/guile) 的 Scheme 到 WebAssembly 编译器后端,同时也是一套通用的 WebAssembly 工具链。换句话说——**浏览器中的 Scheme!**
本次发布包含新功能和错误修复,距离 2 月份发布的 [0.8.0 版本](https://spritely.institute/news/hoot-0-8-0-released.html) 已有数月之久。
## 在即将到来的 Lisp Game Jam 中使用 Hoot!
2026 年 5 月 15 日(周五),[Lisp Game Jam 春季版](https://itch.io/jam/spring-lisp-game-jam-2026) 即将开始!这是一个为期 10 天的游戏开发比赛,参与者使用他们最喜欢的 Lisp 方言制作游戏。
用 Scheme 和 Hoot 制作一个小型网页游戏听起来很有趣?那我们正好有东西给你入门:[Hoot 游戏开发模板](https://codeberg.org/spritely/hoot-game-jam-template)!这个模板项目包含了快速开始用 Hoot 制作 HTML5 游戏所需的一切。
模板仓库包含:
- 与必要 Web API 的绑定,用于使用 HTML5 canvas 制作交互式游戏
- Makefile,用于编译、运行开发服务器以及生成上传到 itch.io 的 .zip 包
- 一个非常简单的类似打砖块的示例游戏,展示如何将所有部分组合在一起
感谢贡献者 Gonzalo Delgado,游戏开发模板现在支持游戏手柄输入!
更多灵感,请参考往届比赛中使用 Hoot 制作的游戏:
- [Cirkoban](https://davexunit.itch.io/cirkoban)
- [Strigoform](https://davexunit.itch.io/strigoform)
- [Shields TYVM](https://podatus.itch.io/shields-tyvm)
现在来看发布说明!
## 工具链变更
- 添加了宿主提供类型的概念。有助于支持 Wastrel 上的 Hoot。
- 从传统异常切换为标准 WebAssembly 异常,后者已于 2025 年 7 月正式采纳,但在浏览器中已可用更长时间。如果 NodeJS 版本较老仍需该特性标志(目前 Guix 如此),则向其传递 `--experimental-wasm-exnref` 标志。
- 添加了对 DWARF 定制段的支持。
## 编译器变更
- 用 DWARF 替换了函数名/源元数据。
- 将默认调试级别改为 1,现在包含生成 DWARF。如需用于生产环境且去除所有调试数据,请使用调试级别 0(CLI 中为 `-g0`),或事后使用 `hoot strip` 剥离二进制文件。
- 为 Guile 3.0.11 中引入的新原始字节向量谓词更新了编译器后端。
- 在大端宿主系统上增加了对位向量字面量的支持。
## 运行时变更
- 浮点数到字符串的转换现在用 Scheme 实现,而不是依赖导入。这使得二进制文件稍大,但更容易支持 Wastrel 和一般非 JavaScript 运行时。
- 大数导入已被单态化,以简化非 JavaScript 运行时(再次提到 Wastrel)的支持。
- Scheme 二进制文件现在导出一个 `main` 函数,该函数接受 0 个参数并返回 0 个值,内部调用 `$load` 函数。这使得 Wastrel 无需支持 Scheme 反射接口即可启动 Hoot 程序。
- 在 `reflect.js` 中添加了 DWARF 解析器。
- 移除了 `fsqrt` 导入,改用 `f64.sqrt` 指令。
## Scheme 变更
- 范围错误现在将范围包含在异常刺激列表中。
- 在 `(hoot typed-arrays)` 中添加了 `uint8array->bytevector` 过程。
- 向量现在在 `(hoot expander)` 中被视为自求值。
- 添加了内部 `(hoot module-syntax)` 模块,用于收集运行时模块宏和支持代码。
- `define-record-type` 现在在 Scheme 解释器中对最多 8 个字段的记录类型起作用。(支持超过 8 个字段的计划已经存在,但需要对 Hoot 运行时进行较大变更。)
## CLI 变更
- `guild compile-wasm` 已被弃用,改用新的 `hoot compile` 子命令。两个命令接受相同的标志。
- 添加了 `hoot help` 子命令。
- 添加了 `hoot strip` 子命令,用于从 Wasm 二进制文件中移除调试信息。
- 在 `hoot compile`/`guild compile-wasm` 中,特性标志已与调试选项分开。例如,`-gruntime-modules` 不再有效;请使用 `-fruntime-modules`。`-g` 标志现在专门处理调试数据,例如是否生成 DWARF 或名称段。`-f` 标志处理改变程序行为的内容,例如是否包含用于 Scheme 解释器的运行时模块系统。
## 文档变更
- 更新了手册,使用 `hoot compile` 而非 `guild compile-wasm`。
- 在网页部署部分,推荐使用 `hoot compile --bundle`,而非手动复制支持文件。
## 错误修复
- 0.8.0 中缺失的 `repl.js` 文件(导致 `hoot repl` 无法工作)现已包含在发布压缩包中。对之前的疏忽表示歉意!
- 修复了 `lower-globals` 生成的函数体积异常庞大的问题(这类函数可能导致 Wastrel 等 Wasm 引擎难以处理)。现在改为生成多个较小的函数。
- `hash-set!`、`hashq-set!` 等现在返回传入的值。这与 Guile 的行为一致,并使更多现有的 Guile 程序能够按预期运行。
- 修复了解析 Wasm 二进制文件中零长度定制段时的错误。
- 修复了 `return_call_indirect` 指令的验证问题。
- 修复了 REPL 元命令读取器中缺少 EOF 处理的问题。
## 浏览器兼容性
- 兼容 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。请访问 [Hoot 主页](https://spritely.institute/hoot) 获取下载链接和 GPG 签名。
Hoot 0.9.0 的文档(包括构建说明)可以在 [此处](https://spritely.institute/files/docs/guile-hoot/0.9.0/index.html) 找到。
## 联系我们
如需报告 Bug、提交拉取请求或关注开发动态,请查看 Codeberg 上的 [Hoot 项目](https://codeberg.org/spritely/hoot)。
如果你用 Hoot 做出了很酷的东西,请在我们的 [社区论坛](https://community.spritely.institute/) 告诉我们!
## 感谢我们的支持者
你们的支持让我们的工作成为可能!如果你喜欢我们所做的事,请考虑 [成为 Spritely 的支持者](https://spritely.institute/donate/)。
### 钻石级
- Aeva Palecek
- David Anderson
- Holmes Wilson
- Jonathan Frederickson
- Lassi Kiuru
### 黄金级
- Alex Sassmannshausen
- Juan Lizarraga Cubillos
### 白银级
- Austin Robinson
- Brit Butler
- Charlie McMackin
- Dan Connolly
- Deb Nicholson
- Eric Bavier
- Eric Schultz
- Evangelo Stavro Prodromou
- Evgeni Ku
- Glenn Thompson
- James Luke
- Jonathan Wright
- Michel Lind
- Mike Ledoux
- Nathan TeBlunthuis
- Nia Bickford
- Noah Beasley
- Steve Sprang
- Travis Smith
- Travis Vachon
### 青铜级
- Alan Zimmerman
- Aria Stewart
- BJ Bolender
- Ben Hamill
- Benjamin Grimm-Lebsanft
- Brooke Vibber
- Brooklyn Zelenka
- Carl A
- Crazypedia No
- Ellie High
- François Joulaud
- Gerome Bochmann
- Grant Gould
- Gregory Buhtz
- Ivan Sagalaev
- James Smith
- Jason Wodicka
- Jeff Forcier
- Marty McGuire
- Mason DeVries
- Michael Orbinpost
- Neil Brudnak
- Nelson Pavlosky
- Philipp Nassua
- Robin Heggelund Hansen
- Ron Welch
- Stefan Magdalinski
- Stephen Herrick
- Steven De Herdt
- Tamara Schmitz
- Thomas Talbot
- William Murphy
- a b
- chee rabbits
- r g
- terra tauri
下次再见,尽情欢呼吧!🦉
相似文章
luau-wasm 0.1a0
luau-wasm 0.1a0,一个 Luau 脚本语言的 WebAssembly 构建版本,已发布。
micropython-wasm 0.1a0
micropython-wasm 0.1a0 发布,使MicroPython能够在WebAssembly环境中运行,实现沙盒化和可移植性。
Racket v9.2
Racket v9.2 发布,改进包括更安全的模式匹配检查、Typed Racket 修复、Unicode 17.0 支持,以及许多其他修复和文档更新。
watgo - 一个针对Go语言的WebAssembly工具包
watgo是一个纯Go语言的WebAssembly工具包,可以解析WAT、验证、编码为WASM二进制,以及解码二进制格式,同时提供CLI和Go API。
WASI 0.3 发布
这篇文章宣布了WASI 0.3的发布,该版本通过组件模型将异步原语原生集成到WebAssembly组件中,简化了API并实现了更好的组件组合。