Scheme 是一个 Hoot
摘要
作者分享了学习 Scheme 并使用 Hoot 将其编译为 WebAssembly 的经验,虽然遇到了稳定性问题,但成功在浏览器中运行了物理模拟。
<p><a href="https://lobste.rs/s/jchp72/scheme_is_hoot">评论</a></p>
查看缓存全文
缓存时间: 2026/07/05 10:29
# Scheme 是一门 Hoot 语言
来源:https://gracefulliberty.com/notes/scheme-is-a-hoot/
2026-05-21· 3 分钟· #计算 (https://gracefulliberty.com/articles/tags/computing)
最近我一直在花时间学习 Scheme,并用它来实现我在物理课上学的概念,时间允许就做一点。其中最令人兴奋的事情之一是,借助 Hoot,我成功让 Scheme 代码在 Web 上编译运行。
最大的挑战之一是 Hoot 并不稳定。目前它的版本是 0.9.0。文档还算可以,但还可以更好。错误消息有时很费解。但是,看到 Scheme 代码通过 WASM 在 Web 上运行,已经是一个巨大的成就。更不可思议的是,它运行在团队自己创建的栈上,而不是依赖 Emscripten。
我最初以为 Hoot 可以将任何 Guile 程序编译到 Web。当我的代码无法编译时,我很快就发现自己错了。于是我将代码移植为使用 Hoot 版本的所有函数,导致我的代码无法脱离 Hoot 独立运行。后来我才意识到,Hoot 实际上支持比我想象中*更多*的 Guile 功能。我只需要手动导入很多之前我以为理所当然的东西。
现在,我已经将代码设置为既能在原生 Guile 上运行,也能通过 Hoot 在 WASM 上运行,并且测试会在两个环境中自动运行,以确保两个环境都能正确配置。虽然有点麻烦,但现在已经可以工作了。我的大部分代码不关心是在系统的 Guile 解释器中运行,还是被编译为 WASM 并在浏览器中运行。我觉得这很了不起。
目前,我完成的大部分工作都在后端。让整个设置能够正常工作已经够折腾了。我也一直在努力让更基础的物理逻辑能够运行,对于 Scheme 新手来说尤其困难。但我一直在取得进展,并且在我的网站的一个新页面上发布了一个小原型(https://gracefulliberty.com/physics/),还发布了源代码(https://codeberg.org/liberty/physics)。
未来,我很好奇是否可以用 Hoot 将 Zig 和 Scheme 程序一起编译到 Web。我越来越觉得 Zig 和 Scheme 是完美的组合,我想在这方面做更多实验。这可能太复杂了!我还不知道。在 WASM 的世界里有很多东西需要学习,而这正是乐趣的一部分。
这是一次深入 Scheme 世界的富有洞察力的探索。我迫不及待想做更多。
相似文章
Hoot 0.9.0 发布
Hoot 0.9.0,一个用于 Guile 的 Scheme 到 WebAssembly 编译器后端,已发布,包含新功能和错误修复,包括 DWARF 支持、标准 Wasm 异常,以及为 Lisp Game Jam 提供的游戏 jam 模板。
Show HN: 用汇编语言构建 Web 服务器,为我的生命赋予(些许缺乏的)意义
ymawky 是一个专为 macOS 编写的 ARM64 汇编 Web 服务器,其特点是不依赖 libc 仅使用系统调用,并具备基本的 HTTP 功能。
@Modular: 两条路径为游戏场域提供支持。一条通过SIMD预计算场域。另一条将Mojo内核编译为WebAssembly…
Modular展示了两种计算游戏场域的方法:使用SIMD预计算,或将Mojo内核编译为WebAssembly以实现浏览器实时渲染。
将我的C游戏移植到WASM,这是我遇到的所有Bug
一位开发者分享了将C游戏移植到WebAssembly的经验,详细介绍了因32位与64位差异遇到的Bug,并提供了调试技巧。
ASM SHADER TOY – 它像Shader Toy,但用汇编语言编程
ASM SHADER TOY 是一款工具,让你使用汇编语言编写着色器,类似于流行的 Shader Toy 平台。