Hoot 0.9.0 发布

Lobsters Hottest 工具

摘要

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

Simon Willison's Blog

luau-wasm 0.1a0,一个 Luau 脚本语言的 WebAssembly 构建版本,已发布。

micropython-wasm 0.1a0

Simon Willison's Blog

micropython-wasm 0.1a0 发布,使MicroPython能够在WebAssembly环境中运行,实现沙盒化和可移植性。

Racket v9.2

Lobsters Hottest

Racket v9.2 发布,改进包括更安全的模式匹配检查、Typed Racket 修复、Unicode 17.0 支持,以及许多其他修复和文档更新。

WASI 0.3 发布

Lobsters Hottest

这篇文章宣布了WASI 0.3的发布,该版本通过组件模型将异步原语原生集成到WebAssembly组件中,简化了API并实现了更好的组件组合。