Hoot 0.10.0 发布

Lobsters Hottest 工具

摘要

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 发布

Lobsters Hottest

Hoot 0.9.0,一个用于 Guile 的 Scheme 到 WebAssembly 编译器后端,已发布,包含新功能和错误修复,包括 DWARF 支持、标准 Wasm 异常,以及为 Lisp Game Jam 提供的游戏 jam 模板。

Scheme 是一个 Hoot

Lobsters Hottest

作者分享了学习 Scheme 并使用 Hoot 将其编译为 WebAssembly 的经验,虽然遇到了稳定性问题,但成功在浏览器中运行了物理模拟。