一次代码重写用掉了5.9 billion输入token、690 million输出token,外加72 billion的缓存读取,按API价格折算,大约16.5万美元。这不是在渲染一部电影,是 Bun 把自己从 Zig 整体重写成了 Rust。创始人 Jarred Sumner 在博客里把这段过程写得像一场胜利,故事确实讲得漂亮,但翻到 Bun 自己的 GitHub issue 列表,你会发现这场"胜利"里还留着一道没缝上的口子。

Bun 干了一件什么事

Bun 原本用 Zig 写。Zig 的卖点是比 C 更安全,但仍要手动管理内存——一旦跟 JS 引擎的 GC 对象混在一起,use-after-free、double-free 这类崩溃就很难彻底避免。Sumner 的原话是:不怪 Zig,只是没几个语言真的为这种"手动管理+GC混用"的场景设计过。

于是,编码智能体(主力是 Claude)接手把 Bun 的 Zig 代码整体搬到 Rust。能这么干,靠的是 Bun 原有的 TypeScript 测试套件——它不只是测试,还充当了自动校验新代码是否跑偏的"一致性锚点"。11天里,Sumner 人工盯着 workflow 输出,发现问题就去调整生成流程本身,而不是手改代码。结果是:Claude Code 从 v2.1.181(6月17日发布)起已经在用 Rust 版 Bun,Linux 上启动速度快了 10%,但"基本没人注意到"。

这场重写的价格 $165,000 API 定价折算 token 成本 11 天 创始人人工监控 workflow +10% Linux 启动速度提升

Rust 真的把 bug 锁死了吗

Sumner 的核心论点是:Rust 的所有权检查器和 Drop 机制,能把大部分 use-after-free、double-free 在编译期就拦下来。这话没错,是 Rust 立身的根本。但 Bun 自己的 GitHub issue 里,编号 #30719 的记录写着:Miri 工具在 Rust 代码的 PathString::slice 里检测到了悬垂引用——性质上正是 use-after-free 那一类问题。

Miri 是运行时检测工具,不是编译器。这类 bug 没有被"编译期拦下",而是靠额外的动态分析工具才抓出来的。Rust 确实比 Zig 更难写出这种 bug,但"难写出"和"写不出"是两回事——这场重写的叙事,比现实说得更满一点。

承诺与裂缝 Rust 的承诺 所有权检查器 编译期拦截 use-after-free double-free Drop 自动清理内存 现实里的裂缝 issue #30719 Miri 检测到 悬垂引用(UB) 靠运行时工具抓出 而非编译器拦截

Zig 的失落,Rust 的疑虑

Bun 是 Zig 生态里最能打的生产级案例,没有之一。它的离开对 Zig 社区不是小事,相当于一家天天举旗的品牌突然换了供应商。Zig 开发者的反应偏防御:有人认为问题不在语言本身,而在 Zig 目前的工具链和 agentic 编码流程适配度不够——不是语言输了,是生态没跟上。

Rust 阵营也没有全场欢呼。百万行级别、大量涉及 unsafe 块的代码,主要由智能体生成,谁来长期审查这笔遗产?测试套件全部通过,只能证明生成的代码"能骗过测试",不等于"这段代码可靠"。Hacker News 上的争论焦点,已经不是"该不该用 Rust",而是"这算真工程,还是一场排练过的 AI 剧场"。

  • 风险.测试全绿不等于可靠,#30719 就是反例——一致性验证目前也只有 Bun 自己出具,没有 Test262 一类第三方标准背书。

被漏掉的一个动机

原文全程把这次重写讲成一次纯技术决策:内存 bug 太烦人,Rust 能治。但还有一条线索原文没提——Hacker News 上流传过一个帖子,标题暗示 Anthropic 和 Bun 之间可能存在收购或资本层面的关系,这一点未经权威信源坐实,只能算尚待验证的变量。

如果这层关系存在,"为什么选 Rust"就有了另一种读法:不完全是语言本身更安全,也可能是 Claude 生成 Rust 代码的质量本来就比生成 Zig 代码更稳,选 Rust 顺便是在给 Claude 减负。基础设施的语言选型,第一次可能不是纯粹为了给人类工程师用,而是要顺着模型的能力边界走。

语言选型第一次开始向模型的能力边界让路

这事到底证明了什么

一个测试套件全通过、性能小幅提升、几乎没人察觉的重写,单看结果确实"无聊",而无聊在工程里通常是褒义词——用户没感觉到剧变,说明迁移做得够稳。但这套方法论的可复制性存疑:16.5万美元的 token 成本,加上创始人本人11天不睡觉盯流程,这个配置门槛,不是每个团队都凑得出来。

Joel Spolsky 在2000年就写过,永远不要把一个成熟软件推倒重来。那条铁律现在读起来,更像是给没有编码智能体的时代定的规矩。Sumner 这次算是把它撬开了一条缝,但缝有多大、代价多少,#30719 那行记录已经先给了一个提示——账,还没算完。