返回

文章详情

我们从 Rust 到 Zig 的重写进展如何

Hacker News2026年7月16日 11:39

在过去的一年半里,构建 Roc 编译器的团队一直在将我们 300,000 行的 Rust 代码重写为 Zig,原因我将在下文回顾。我们最近达成了一个令人兴奋的里程碑:与原始编译器功能对等!由于 Bun 项目最近分享了他们将 Zig 重写为 Rust 的经验报告(尽管这只是我们重写之间差异的冰山一角),这似乎是一个很好的时机来反思我们从 Rust 转向 Zig 的进展。 通过功能对等 达到这个里程碑使得更新 Brendan Hansknecht 的迷人 2024 年 WASM-4 游戏 Rocci Bird (由 Luke DeVault 艺术制作)成为可能,使用新的编译器。这是一个很好的例子,因为整个游戏的 Roc 代码不到一千行,您可以在 itch.io 上或通过 WebAssembly 在这里直接玩:点击或轻敲游戏,然后按空格键(或轻敲)来振翅。在移动设备上,您没有右箭头键,因此刷新页面以重新启动游戏。 Rocci Bird 的更新源代码比原来的简洁,而且 roc build --opt=size 现在输出 31KB 的 wasm 二进制文件。(原始编译器生成的二进制文件大小是这个的两倍多。)Rocci Bird 并不是一个大型代码库,但使其运行需要在新编译器中实现很多功能。当我们最终实现这个目标时,看到那些厚重的紫色像素让我面带微笑!要明确的是,这只是一个里程碑,而不是正式发布。(我们计划在今年晚些时候推出 0.1.0 版本。)话虽如此,能够达成这一里程碑真是太棒了,我对所有齐心协力使这一切成为可能的人深表感激!我特别想感谢一些在将语言和编译器推进到这个阶段方面特别有帮助的人:Anthony Bullard 和 Sam Mohr 合作开发新的解析器;Jared Ramirez 负责新的类型检查器(以及许多其他工作!);Ayaz Hafiz 负责新的 Lambda 集成解析系统,还有很多原始编译器的功能;Aurélien Geron 负责手动更新 Roc Exercism 课程中的 108 个初学者练习;Stephan 使编译器新的“回显”平台在浏览器中运行,现在任何人都可以通过一个 2.5MB 的 WebAssembly 二进制文件从 roc-lang.org 首页编写和运行基本的 Roc 程序;Niclas Åhdén 是 Roc 最多产的生产用户,耐心地提交有用的错误报告并给予有关升级过程的可操作反馈;JRI98 系统地再现和调查模糊测试错误和其他错误,关闭那些已不再重现的问题,以及更多;Jasper Woudenberg 在使用新编译器的用户空间包的 API 设计方面进行迭代;Folkert de Vries、Brendan Hansknecht、Brian Carroll、Josh Warner、Agus Zubiaga 和 Jelle Teeuwissen 构建了原始编译器的基础,没有他们,新编译器就不会存在。 我把对新编译器贡献最大的几位人员留到了最后:Anton-4 和 Luke Boswell,为了很多事情我甚至记不清楚—编译器工作、内置函数、平台、包、示例、修复 bug、帮助 Roc Zulip 上的初学者……列举所有的内容可能会占用整整一篇第二篇文章!看到你们所构建的东西真是不可思议。非常感谢你们!我感到非常荣幸,你们把如此宝贵的时间投入到这个项目中。同时也感谢我们过去和现在的赞助商——rwx、Lambda Class、ohne-makler、martian、tweede golf、Vendr、NoRedInk 和许多慷慨的个人赞助商——他们通过支持我们的贡献者帮助我们走到今天。 说到时间:我们的重写花了 487 天,比 Bun 的 11 天从他们约 500K 行的 Zig 转换为 Rust 多出了 476 天。这一差异有很多与 Rust 或 Zig 无关的原因,包括他们的直接移植,而我们决定重写是因为我们将要进行的更改。我们所使用的技术在我们的情况下无法奏效。我们所做的更改清单也意味着,我们不能将原始的 Rust 代码库和新的 Zig 代码库进行简单比较。尽管如此,我们已经达到反思重写进展的良好时机,既可以从新功能对 Roc 程序员的解锁方面,也可以从我们与 Rust 和 Zig 的经验进行比较的角度来进行反思。我们开始吧! 热代码加载 + 跨编译的二进制文件 Roc 的新编译器在开发过程中自动进行热代码加载。例如,我可以运行 roc server.roc 启动一个 Web 服务器,然后在它运行时更改一些代码。下一次该服务器处理请求时,它将自动使用新代码进行处理。下面是它在服务器和一个简单的 2D 游戏中的实际运行情况:下载热加载演示视频。 热加载是像 Python 这样的解释性语言的标准行为,但对像 Roc 这样的高性能编译语言来说就不是那么普遍了。当我准备部署时,roc build server.roc 为我提供一个经过 LLVM 优化的、

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡