AI 智能体 11 天重写了整个 Bun:验证问题如今定义了软件工程
Jarred Sumner 编排 64 个并行 Claude 智能体,把 96 万行 Zig 移植成生产级 Rust

当 Bun 1.4 于 2026 年 8 月 20 日作为稳定版发布时,它成了第一个整套核心代码库不是由一支工程师团队、而是由一群协同工作的 AI 智能体重写出来的通用 JavaScript 运行时 —— 而已经在用它的开发者大多毫不知情。这套代码自 6 月 17 日起就悄悄跑在 Claude Code 里了。此前,Bun 的作者 Jarred Sumner用大约 64 个并行实例(跑的是 Anthropic Fable 模型的一个预发布版本),在十一天内把大约 96 万行 Zig 迁移成了 Rust。InfluxData 创始人兼 CTO Paul Dix 读了 Sumner 的记述之后,于 8 月 25 日在自己网站上发表了一篇文章,主张 Bun 1.4 这次重写标记着一个结构性转折点:他写道,「手写代码、再由人来评审」这件事「正走向灭绝」。
那篇文章之所以引人注意,很大程度上是因为它论断宏大;但更精确、也更有实用价值的故事在工程本身。Bun 这次重写之所以成功,不是因为 AI 强到能写出优秀的 Rust,而是因为 Sumner 搭出了一套验证架构,让质量在无需任何人读代码的前提下变得可测量。
推动这件事的两个力:一条语言政策和一份 bug 清单
Anthropic 收购了 Bun,卖方是 Oven.sh,时间是 2025 年 12 月;当时 Bun 的代码库主要由 Zig 写成 —— 那是一门提供细粒度手工内存控制、但开发者社区相对小的系统编程语言。收购之后,又浮现出一个组织层面的现实:Zig 软件基金会在其行为准则中维持着一条明确的政策,禁止 AI 生成的代码贡献;这让一家「工程师依赖 AI 编程智能体」的 AI 公司,在结构上很难维护一个大型 Zig 代码库。
换语言还有第二个动机,而 Sumner 把它描述为首要的:内存 bug。Bun 未解决问题清单中相当大一部分是「释放后使用」、双重释放,以及错误路径上的内存泄漏 —— 这些问题 Zig 在编译期抓不到,而 Rust 的所有权模型默认会把它们变成编译错误。Sumner 写道,把垃圾回收内存与手工管理内存混在一起「是一件软件足够少需要、以至于没有哪门语言真正为它做设计」的事,而他厌倦了每晚睡前还在担心崩溃。
换到 Rust 同时解决了这两个问题:它为一个易出所有权相关 bug 的代码库提供了编译器强制的内存安全,也与 Anthropic 的组织编码实践对齐了。
那套两阶段的智能体架构实际是怎么跑的
这次重写分两个明确的阶段进行,十一天窗口内大约执行了 50 条独立的工作流。
A 阶段是一遍「忠实捕获逻辑」的转换。每个 .zig 源文件由一个 Claude 智能体转成对应的 .rs 文件,优先保证逻辑翻译准确,而不是能否通过编译。A 阶段开始时,在产出的 Rust 代码库上跑 cargo check 会产生一万六千多个编译错误。最初的二进制既打印不出版本号,也执行不了任何 JavaScript。这是有意为之:A 阶段不需要产出能编译的代码,只需要产出准确反映 Zig 逻辑的代码。
B 阶段则按 crate 逐个推进。一个 Rust crate 大致相当于一个库或模块单元。智能体顺序处理每个 crate,反复迭代直到它既能编译、又能通过相关的测试子集。真正让这件事成立的机制,是 Bun 已有的测试套件 —— 它是用 TypeScript 写的,与底层运行时是 Zig 还是 Rust 无关。这让那些测试成了一个符合性判据(conformance oracle):智能体可以移植代码、跑测试、读失败输出、改 Rust、再跑一遍,全程不需要人来解读结果。这个循环是自动化且自我纠正的。
并发峰值时,约 64 个 Claude 实例跨四个独立工作树并行运行,每条工作流 16 个智能体。Sumner 编排了对抗式的智能体配对 —— 一个生成代码,另一个评审它、独立标出发现的问题。他还实现了动态工作流:让智能体为其他智能体撰写执行计划,使编排层本身能随移植进展而调整。Sumner 形容自己主要在监看工作流输出、读摘要、偶尔提示系统调整做法 —— 是在监督一个过程,而不是在评审一条条代码改动。
合并前的 token 总消耗,据Sumner 的官方记述:59 亿未缓存输入 token、6.9 亿输出 token,以及 720 亿缓存输入 token 读取。按 API 定价折算约为 16.5 万美元。由于 Anthropic 员工的内部 token 用量不计费,这个项目实际自付成本为零。
那 13000 个 unsafe 块构成的债
合并时的测试通过率在全部六个受支持平台上都是 100% —— Linux x64、Linux arm64、macOS x64、macOS arm64、Windows x64、Windows arm64 —— 没有任何测试被跳过或删除。但真正定义这次重写长期意义的数字不是通过率,而是约 13000:据 Sumner 所说,这是新 Rust 代码库中当时 unsafe 关键字的数量,覆盖 78 万行 Rust 中的大约 2.7 万行。
在 Rust 里,unsafe 是一个告诉编译器「在此处暂停内存安全保证」的关键字。一个 unsafe 块内的代码可以做裸指针操作、解引用任意内存,并执行那些可能产生「释放后使用」或其他未定义行为的动作 —— 而这恰恰就是当初促使他们弃用 Zig 的那一类 bug。Bun 代码库中的每一个这样的块,都是一处 Rust 安全保证不适用、且最终需要人类审计者去核实其操作是否正确的位置。
当智能体无法干净地满足 Rust 的所有权模型时 —— 通常是因为 Zig 的手工分配模式映射不出一张干净的所有权图 —— 它就退回到 unsafe,保住正确性,同时把更深的架构工作往后推。结果是能通过测试,但在那些位置上并不是内存安全的。Sumner 已公开承认这笔债,并维护着一个 unsafe 审计追踪表,其中指出约 78% 的 unsafe 块只有一行,往往是一个来自 C++ 的指针或一次对 C 库的调用。
在公开发布之前,它已经跑在数百万台机器上了
Bun 1.4 于 8 月 20 日的公开稳定版发布,之前是几个月的合并后打磨。在那段时间里,智能体持续跑改进循环 —— 捕捉使用中暴露的 bug、修掉、再测。团队还完成了十一轮安全评审,并对 Bun 的每一个解析器(JavaScript、TypeScript、JSX、CSS、JSON5 等)启动了 7×24 的覆盖率引导模糊测试。这个有效的 beta 期不是传统的分阶段发布,而是一段持续的、智能体辅助的加固期。
在公开发布数月之前,独立技术人 Simon Willison 于 2026 年 7 月确认,基于 Rust 的 Bun v1.4.0 已经内嵌在 Claude Code v2.1.181(6 月 17 日发布)及更高版本中。Willison 对 Claude Code 二进制做字符串取证检查,识别出 563 个 Rust 源文件路径,并确认内嵌的 Bun 版本字符串是 1.4.0 —— 而那个版本当时还没有作为官方 GitHub tag 出现过。Sumner 本人对这次静默部署的总结是:「Linux 上启动快了 10%,除此之外几乎没人注意到。无聊是好事。」
Vercel 于 8 月 20 日在 Vercel Functions 中加入了对 Bun 1.4 的支持,并援引数据称:相对 Bun 1.3,解决了 2900 多个问题,另有 1500 多项 Node.js 兼容性测试通过。
Bun 1.4.1 作为处理稳定版后 bug 的补丁版本,于 2026 年 9 月 4 日跟进发布。
Paul Dix 所描述的那个两层开发者世界
Dix 的文章主要讲的并不是 Bun。它把 Bun 当作目前最清晰的证据,用来支撑一个关于软件开发中「获取权不对称」的论点。
Dix 写道,Anthropic 和 OpenAI 的开发者当前所处的,相对其他所有人而言相当于「近未来」。他们能拿到预发布的前沿模型和近乎无限的 token 预算。Bun 这次重写用的是 Fable 的一个预发布版本 —— 也就是那个 Mythos 级模型,如今普通市场才刚以有限形式接触到。对于 2026 年 5 月零内部成本用上它的工程师来说,那份能力与任何外部开发者当周用标准订阅能买到的东西,在性质上就不是一回事。
Dix 由此得出的推论是概率性的,而不是即刻的。他并不主张传统软件开发明年就结束。他预期还会有十年,公司们继续用常规方式交付软件 —— 人写、人评审、一个 PR 一个 PR 地推。组织惯性、问责结构和安全评审流程都偏向旧做法。但 Dix 主张,最高产的那些团队会越来越多地去指挥 AI 智能体、构建验证系统、评审产出而不是评审代码。他自己的经历是:用每周配额的 Fable,他让智能体在 14 小时内为 InfluxDB 完成了一套可用的 Iceberg REST API 集成,又在 28 小时内做出一套边缘数据复制系统 —— 他形容这些功能有数千行实现与测试代码,而他是在监督,不是在编写。
Mitchell Hashimoto,HashiCorp 联合创始人,在 Bun 那个 PR 合并当天给出了一个互补的观察:编程语言的选择「过去是一种锁定」,而现在「越来越不是了」。如果一支团队能在十一天里迁移一个百万行的代码库,那么换语言的成本就跌到了「它不再作为战略约束发挥作用」的门槛之下。「Rust 是可弃的,」Hashimoto 写道 —— 有用,直到不再有用,然后以任何前一代软件团队都撑不住的速度被替换掉。
瓶颈是验证,不是模型
关于这件事,多数报道弄错了真正的难点在哪里。Bun 这次重写之所以可行,不是因为 Fable 强到能写出好的 Rust。那约 13000 个 unsafe 块恰恰证明它并没有写出特别好的 Rust。它之所以可行,是因为 Bun 恰好有一套与语言无关的符合性测试套件。
如果 Bun 的测试是用 Zig 写的,那它们对一次 Rust 移植就毫无评判价值。如果 Bun 的测试稀疏或不完整,那次零缺陷合并可能掩盖掉多得多的正确性 bug。产出的质量受限于验证系统的质量,而不是 AI 的质量。这是一条能推广到 Bun 之外的结构性结论:想大规模使用协同智能体的团队,必须先投资自己的测试与验证基础设施。那套框架 —— 能在不靠人读代码的前提下评判智能体产出的自动化检查集合 —— 如今才是稀缺的工程资产。
软件行业历来把测试当成本中心,把代码评审当作主要的质量闸门。Bun 这次重写把这个优先级颠倒了过来:当智能体成为主要作者时,代码评审在它们产出的体量面前变得不可能,而全面的自动化测试成了唯一可行的替代品。
延伸阅读:Claude Code 桌面端加入 Resume,终结开发者的上下文丢失税
13000 个 unsafe 块之后是什么
对 Bun 这个项目来说,近期值得盯的技术里程碑不是又一次换语言,而是 Anthropic 会不会公布一个「审计并减少 unsafe 块数量」的时间表 —— 以及那份削减工作本身会由人类工程师完成,还是由新一代专注内存安全的智能体完成。Rust 生态已经产出了自动检测和分类 unsafe 块的工具,而 Anthropic 的内部智能体基础设施让它有能力以「对多数机构而言代价过高」的规模跑系统性审计。
更长的那条弧线是 Dix 勾勒的那条:随着前沿模型的获取变得更便宜、吞吐更高 —— 他把即将到来的推理硬件发布视为信号 —— 会有更多开发团队以 Sumner 2026 年 5 月那种模式运作。约束仍将是验证。每一支想大规模使用智能体的团队,在能从速度中获益之前,都得先回答一个在先的问题:它有没有一套能评判「自己读不完的产出」的符合性测试套件?
Bun 有。它奏效了。那些 unsafe 块是「跑得快而不是跑得好」时记下的账单 —— 而清掉这笔账,是那种持续、有条理的工程工作;这本身,可能又会成为「把它交给一个智能体循环而不是交给人」的下一个理由。