← 返回信息流
AI 资讯Hacker News·1 小时前

Bun 运行时用 Rust 重写

原标题:Rewriting Bun in Rust

速览

Bun 是一个新兴的 JavaScript 运行时,旨在替代 Node.js。团队宣布将用 Rust 语言重写其核心,以利用 Rust 的内存安全和并发优势。这一改动预计会显著提升 Bun 的运行效率和稳定性,同时保持对现有 JavaScript 生态的兼容。

AI 深度解读

背景

2026年7月8日,Jarred Sumner 在博客上发布了一篇备受期待的文章,详细阐述了将 JavaScript 运行时 Bun 从 Zig 重写为 Rust 的过程。早在同年5月9日,他便预告了这篇文章,而实际完成重写所花的时间反而比承诺写这篇博客的时间更短。Bun 最初使用 Zig 语言开发,在性能方面取得了显著成就,但随着项目的演进,内存管理问题逐渐成为主要痛点。Jarred 在文章前半部分高度赞扬了 Zig 对 Bun 早期阶段的贡献,但随后指出,Bun 的 bug 列表中大量是 use-after-free、double-free 以及错误路径下的“忘记释放内存”等问题。这些问题在安全 Rust 中会被编译器直接捕获,并且通过 Drop 实现类似 RAII 的自动清理。尽管 Joel Spolsky 早在2000年就警告过“永远不要停下手头工作去从头重写大型软件”,但前沿模型驱动的编码智能体正在改变这一规则。

核心内容

Jarred 的博客文章详细描述了这次重写的完整过程,其核心是一套极其复杂的 agentic 工程体系,涉及动态工作流、试运行、对抗性审查以及其他多种有趣技巧。

首先,Jarred 承认 Zig 对 Bun 的早期发展至关重要:“如果没有 Zig,我们不可能走到今天,我将永远感激。直到最近,编程语言选择对于像 Bun 这样的项目还是一次性决策。” 但内存管理问题带来的 bug 修复列表让他感到沮丧,他厌倦了每天睡前担心 Bun 的崩溃。他并不责怪 Zig,因为其他 Zig 用户没有遇到类似问题,而将 GC 与手动管理内存混合使用是软件中相当罕见的需求,没有语言会为此专门设计。

重写的关键推动力来自 Bun 的测试套件。由于测试套件是用 TypeScript 编写的,它天然可以作为一致性测试套件(conformance suite)。这使得一个智能体框架能够自动化大部分从 Bun 到 Rust 的移植工作——最初只是作为一次实验,用来尝试我们现在称之为 Mythos/Fable 的早期模型版本。

起初 Jarred 并不期望它能成功。但几天内,测试套件的通过率就迅速攀升,他看到新 Rust 代码与原始 Zig 代码库高度匹配。他的态度从“值得一试”转变为“我要合并它”。在接下来的11天(以及之后的时间里),他持续监控工作流,手动阅读输出以检查问题和 bug,并提示 Claude 编辑循环来修复问题。

对于如何审查一个新增了超过100万行代码的 PR,Jarred 提出了解决方案:一个语言无关的测试套件,包含100万个断言;进行对抗性代码审查;当出现问题时,修复生成代码的过程,而不是手动修复代码本身。

新的 Rust 版 Bun 已经在 Claude Code 中运行了近一个月:自 Claude Code v2.1.181(6月17日发布)起,就使用了 Rust 移植的 Bun。在 Linux 上启动速度提升了10%,但除此之外几乎无人察觉。“无聊就是好事。”(Boring is good.)

作为 Anthropic 的员工,Jarred 不必为 token 付费——这很便利,因为估算成本高达165,000美元。在合并前,这次重写消耗了59亿个未缓存的输入 token、6.9亿个输出 token 和720亿个缓存的输入 token 读取——按 API 定价计算约为165,000美元。

整个事件是一个引人入胜的案例研究,展示了如何借助协调的并行智能体来承担极具野心的项目。

关键要点

  • 重写动机:Bun 的 bug 列表中大量内存安全问题(use-after-free、double-free、错误路径下未释放内存)在安全 Rust 中会被编译器杜绝,这是选择 Rust 而非继续使用 Zig 的根本原因。
  • Zig 的贡献与局限:Jarred 明确表示不责怪 Zig,Zig 让 Bun 走到了今天,但混合 GC 与手动管理内存的需求超出了任何语言的设计范畴。
  • 测试套件作为桥梁:Bun 的 TypeScript 测试套件充当了完美的一致性测试套件,使得智能体能够自动化完成大部分移植工作。
  • 智能体驱动的重写流程:最初使用 Mythos/Fable 模型进行实验,几天内测试通过率大幅提升;Jarred 通过监控工作流、手动检查输出并提示 Claude 修复循环,整个流程持续约11天。
  • 审查百万行代码的策略:采用语言无关的测试套件(100万断言)、对抗性代码审查,以及修复代码生成过程而非手动修复代码。
  • 实际效果:Rust 版 Bun 已部署到 Claude Code 中,启动速度提升10%,但用户几乎无感知,符合“无聊就是好事”的设计哲学。
  • 成本估算:整个重写花费约16.5万美元的 API token 费用(按未缓存价格计算),但作为 Anthropic 员工无需自付。
  • 资源消耗:59亿未缓存输入 token、6.9亿输出 token、720亿缓存输入 token 读取。

意义与影响

这次重写打破了“永远不要从头重写大型软件”的传统观念,证明了前沿模型驱动的编码智能体能够让此类风险极高的项目变得可行。其意义在于:

  1. 技术可行性:通过智能体协调并行工作,可以在短时间内完成大规模代码移植,且质量达到足够水平。这为其他大型项目提供了可复用的方法论。
  2. 测试套件的核心价值:语言无关的测试套件成为智能体迁移的“北极星”,确保移植后的代码行为一致,而无需依赖人工逐行审查。
  3. 过程修复优于代码修复:当智能体生成的代码出现问题时,修正生成逻辑(例如调整提示词、工作流)比手动修补代码更高效、更可持续。
  4. 对编程语言选择的影响:Bun 的案例表明,当内存安全成为关键瓶颈时,即使前期投入巨大,重写为安全语言(如 Rust)也能通过智能体辅助变得可行,从而降低长期维护成本。
  5. 行业启示:Anthropic 内部直接使用自家模型完成如此大规模的重写,不仅验证了模型能力,也为未来“智能体优先”的软件工程实践树立了标杆。随着模型能力的提升,类似的“重写项目”可能会越来越多,尤其是对于基础设施级别的软件。
查看原文 →simonwillison.net