11天、100万行代码、16.5万美元——Bun重写背后的软件工程范式转移

2026年5月3日,Jarred Sumner做了一个决定,他后来承认自己最初也没指望能成功。

他打算让AI把Bun——一个53万行Zig代码的JavaScript运行时——整个重写成Rust。

11天后,PR #30412合入了主分支。测试套件全部通过,六个平台全绿。没有跳过或删除一个测试。

写代码只用了6天。但Sumner写博客总结花了将近一个月——不是代码太难写,而是他花了很多时间想明白自己究竟做了什么。

这篇文章想论证一个判断:Bun这次重写不是一个技术demo,而是软件工程范式转移的真实信号。当AI可以在11天内完成人类一年的代码迁移,软件工程的核心瓶颈正在从"写得出来"转向"读得懂、接得住"。可维护性成为新的稀缺资源,而"可维护"的定义,正在从"人能看懂"变成"AI能接住"。

一、64个Claude、11天、100万行——"写"的成本已经趋近于零

先看看Sumner到底做了什么。

Bun的代码库有535,496行Zig(不含注释),约20%由C++编写,嵌入了JavaScriptCore、uWebSockets、BoringSSL等多个C/C++库。重写涉及超过100万行代码变更、6778次提交。

Sumner把整个过程拆成大约50个动态工作流。每个工作流是一个循环:一个Claude基于上下文(Jira工单或GitHub issue)写代码,两个Claude审查代码,最后应用反馈。审查者和实现者完全分离——审查者只看代码差异,不看实现者的推理过程,被明确告知"假设代码是错的"。

峰值时期,Sumner同时运行4个工作流,每个工作流16个Claude,总共64个Claude同时在4个工作树中并行工作。最高峰时,Claude每分钟写约1300行代码。

Zig代码是单一编译单元,Rust要拆成约100个crate。循环依赖导致cargo check一次性输出约16000个编译错误。工作流把错误按crate分组,每个crate跑一遍cargo check,一个Claude修复,两个审查,一个应用修改。两天后,Linux平台的失败测试从972个降到23个。一天半之后全绿。五天后,全部六个平台全部通过。

API成本:16.5万美元。按Sumner的说法,相当于3名完全熟悉Bun代码库的工程师一年的工作量。

这个数字有两个解读方式。

如果你看账面上的"16.5万 vs 一年工期",结论是AI已经把代码迁移的成本压到了一个不可思议的程度。在硅谷,16.5万美元连一个高级工程师的半年代薪都覆盖不了。

但如果你看另一个数字——Sumner用的是Claude Fable 5的预发布版本,一个尚未对公众开放、可能受出口管制的高阶模型——这16.5万只是API定价,不是真实成本。算上模型研发、训练算力、工程人力,总成本可能超过150万美元。

两种解读各有道理。但它们都绕不开一个事实:"用AI写大量生产代码"已经不是"能不能"的问题,而是"值不值"的问题。这个门槛一旦跨过,整个软件工程的成本结构就要被重算。

二、看得见的成就:6.7GB变609MB

这次重写最直观的成就在数字上。

Bun v1.3.14(Zig版本)有一个让团队头疼已久的问题:连续执行Bun.build()调用时,内存不断累积,永不释放。每次构建泄漏约3MB。执行500次构建后内存占用1.9GB,1000次后3.5GB,1500次后5.1GB,2000次后飙升到6.7GB。

Sumner列出了一串bug清单:zlib模块里.reset()和异步.write()的竞态条件导致堆释放后使用崩溃;http2模块里嵌套的JS回调触发了哈希表重哈希导致指针失效;UDPSocket.sendMany()中用户代码通过valueOf回调改变了套接字状态导致越界写入;crypto.scrypt输出缓冲区分配失败时回调永远得不到释放……

这些bug的共性很明确:将GC与手动内存管理在同一个软件里混合使用。JavaScriptCore对异常处理和GC有极其严格的规则,而Zig像C一样不自动管理内存。两种范式在同一个进程中共存,每次内存分配都需要逐行审查。

Sumner说了一句话很能说明问题:"我厌倦了带着对Bun崩溃的担忧去睡觉。"

Rust版本交出的答卷是:同样执行2000次Bun.build(),内存稳定在609MB。可复现的128个bug全部修复。二进制文件体积减少约20%。性能普遍提升2%-5%。

这些数字很漂亮。但它们不是这篇文章想讨论的核心。

三、13,000个unsafe和读不完的代码——可维护性成为新的稀缺资源

这次重写最值得关注的部分,不是AI写了多少代码,而是那些AI写了但没人能完全读懂的代码。

截至发布,Bun的Rust代码中约有4%位于unsafe block内,约13,000个unsafe关键字,分布在约27,000行代码中,Rust总代码量约78万行。作为对比,uv约35万行代码,只有73次unsafe调用——Bun的unsafe数量是它的178倍。

Sumner预计后续重构会降低这个比例。但眼下的事实是:一段代码里每78行就有一个unsafe,这意味着安全保证的"承诺区域"被高度稀释了。

更要命的是代码审查。100万行的变更不可能由人类逐行看完——每秒看一行,连续11.6天;按实际审查速度(一小时200行),要两年多。这次PR的审查者主要是claude[bot]和coderabbitai[bot]。Sumner说他的审查方式是"检查对抗性审查agent是否正确捕获了差异",但他没有说"我自己读了多少"。

这引出一个结构性矛盾:

AI写代码的速度,已经超过了人类读代码的能力。这不是某个人的能力问题,是系统性的。

你可以用AI加速生产,但你无法用AI加速"理解"本身——因为理解需要全局认知、需要知道上下文、需要理解为什么这个设计选择而非另一个。这些能力,审查型的AI agent有部分,但还不够;人类有,但太慢。

Bun在2025年12月被Anthropic收购了。真正能有效维护这套代码库的工具,基本只有Claude自己。社区已经有人调侃:想给Bun提PR,得先订阅Anthropic,或者指望那几个已经读懂了AI生成代码的核心成员。

这是一个值得警惕的信号。当一份代码库的"可维护性"依赖于一个特定的AI模型,这个代码库就不再是传统意义上的"可维护"了。

四、"可维护性悖论":AI帮了AI,但人类还在原地

让我们把这个现象提炼成一个可复用的分析框架,叫"可维护性悖论"

一个软件系统的生产效率越高(写得多、写得快),它的可维护性就越依赖于同样高效的工具来理解和管理它。当生产效率的增长速度持续超过人脑的理解速度,维护责任就会从人转移到工具。最终,系统不是"被人类维护",而是"被AI维护,人类值班"。

这个悖论在Bun重写中完美呈现:

AI写了100万行代码 → 人类无法审查 → AI审查AI写的代码 → 代码合入 → 下一个循环
1312→ 写这个循环的不是人类,是工作流中的AI

Sumner做了对的事——他设计了审查者/实现者分离的工作流,避免让写代码的AI自我审查。但审查者仍然是AI。即使两个AI对抗,审查的"标准"还是由AI的训练数据和提示词决定的,不是由人类工程师的工程判断决定的。

这不是说AI审查不管用。DRACO评测已经证明多模型组合可以超越单模型表现。但"超越"和"可信"之间还有距离——当系统出问题的时候,谁负责回答"为什么会这样"?

再往深看一层:13,000个unsafe本身就是这个悖论的物化。

如果让AI重写时"多用safe Rust",可能会产生更多样板代码、更差的性能、更长的编译时间。Sumner选择了效率,接受了unsafe。这个选择本身没错,但它把"安全保证"从编译时(Rust的卖点)推到了运行时——然后又推给了AI审查。

安全保证从一个系统的属性,变成了一个过程的属性。你无法指着某一行代码说"这里安全",你只能说"AI审查流程没发现问题"。

五、推演:AI写代码的"可维护性税"将流向哪里

这个悖论不是Bun独有的。它正在扩散。

Claude Code在基于Rust Bun发布后,启动时间从517ms降至464ms,快了约10%。这很有意思——Bun重写后更稳定更快,用Bun的Claude Code也更快,但Claude Code是用来帮人写代码的。一个自我强化的循环正在形成:AI写的代码让AI工具跑得更好,AI工具跑得更好就能写更多代码。人在这条循环链上的角色,正在从"生产者"变成"问责者"。

同样的逻辑可以解释Anthropic的商业模式。SemiAnalysis估算的Anthropic第三季度利润将超过10亿美元,ARR从约90亿美元飙升至超600亿美元。这些收入的增长,很大程度上来自代码生成和Agent场景的爆发。而Bun重写是这些场景中最极端的一个例子——它一次消耗了59亿个未缓存输入token,按API定价16.5万美元。

AI写代码养活了AI,AI又用赚来的钱训练更强的AI来写代码。人在这个循环里支付账单,但对循环中流动的代码的理解能力,一直没有变强。

这有点像金融领域的"委托代理问题":委托人(人类团队)授权代理人(AI)管理资产(代码库),代理人比委托人更了解资产状况。唯一的区别是,这个代理人不是一个有 fiduciary duty 的银行家,而是一个黑盒API。

六、落到行动:如果你正在负责一个软件项目

如果你是一个团队的技术负责人或CTO:

停止问"AI能不能帮我们写代码"——能,而且比你想的快。开始问:"如果AI写了我们一半的代码,我的人怎么接得住?"

可维护性不是代码质量属性,是团队能力属性。如果团队里没有人能解释某个模块为什么这样设计,那这个模块就已经失控了,不管它是不是AI写的。

如果你是一个做AI Infra或DevTools的创业者:

这里有一个明确的空白地带。AI写代码的工具已经卷成红海,但"AI理解代码并解释给人类"、"AI审计AI生成的代码"、"AI追踪代码设计决策"这一类工具还远远不够。Bun重写暴露的问题——代码审查跟不上、设计决策丢失、unsafe难以审计——正是下一波工具的机会。

如果你是一个软件工程师:

不要焦虑AI会取代你。但要认真思考一个问题:你的价值到底在哪里?

如果AI能写90%的代码,那10%——那些需要判断"这个设计对不对""这个场景要不要考虑""这个风险能不能接受"的部分——将变得无比珍贵。而这些判断力的来源,正是你读了大量代码、理解了大量系统、踩了大量坑之后积累的工程直觉。

人读代码的能力没有变快。但正因如此,它更值钱了。


参考来源:

滚动至顶部