53.5万行代码,原本预计要一个小型工程师团队干整整一年。结果4个月就完成了,还顺手修掉了128个长期存在的Bug。
Bun的创建者Jarred Sumner宣布,这款集JavaScript/TypeScript运行时、打包工具和包管理器于一体的工具,已经从Zig重写为Rust。重写的核心动机很直接:用Rust的借用检查器消除反复出现的内存安全漏洞。
![]()
这件事最初只是作为一个概念验证项目启动的,没人指望它能成。
为什么非要换语言
Sumner给出的理由集中在错误路径上。他提到,很大比例的Bug属于"释放后使用"、"双重释放"以及"忘记释放"这几类。在安全的Rust中,这些都会被编译器直接识别为错误,并通过Drop实现类似RAII的自动清理。
他的判断是:编译器错误比代码风格指南能提供更好的反馈机制。
但重写本身在工程界一直是个坏主意。Bun共有535496行Zig代码,用另一种语言重写,按常规估算需要一个小型工程师团队花掉整整一年。这意味着在这一年里,漏洞修复、安全修复或功能开发都得停摆。
转机在于Bun自身的测试套件是用TypeScript编写的,不依赖运行时的编程语言。Sumner决定花一周时间测试Anthropic的新模型能否用Rust重写Bun。
几天后,测试套件的通过比例大幅上升,新生成的Rust代码与原始Zig代码库高度吻合。他的看法从"这值得一试"变成了"我要把这个合并进去"。
64个Claude实例并行干活
整个重写过程是一次自动化的"一次性"移植,大部分工作利用了Claude Fable 5的预发布版本,通过约50个动态工作流进行协调。
具体流程是这样的:
- Zig代码被转译为Rust,可能使用unsafe Rust并稍后重构
- 用包含超过一百万条断言的测试套件进行验证
- 移植指南帮助Claude把Zig的模式和类型映射到Rust
- 对抗性智能代理代码审查在最终移植前进一步检测问题
每次出现错误后,Sumner都通过优化实现流程来改进循环,而不是手动修复代码产物。
两个文件被认为是这次移植的关键成功因素:PORTING.md描述了从Zig到Rust的映射,LIFETIMES.tsv描述了代码库中每个结构体字段的生命周期。实现者代理利用这些文件把Zig文件转换为Rust代码,同时面临两个对抗性审查代理,它们在单独的上下文窗口中运行,仅能访问文件差异,唯一任务就是发现错误和行为偏差。
Sumner强调了一条分工原则:实现者不负责审查,审查者不负责实现。审查者提出的建议和发现的问题由修复代理处理。
效率很大程度上得益于并行化。最终工作被分配到四个工作区分片中,每个分片运行16个代理,并行运行的Claude实例总共有64个。最快情况下,系统每分钟生成约1300行代码,每小时最多提交695次。
16.5万美元的Token账单
要让整个测试套件全部通过,代价是价值16.5万美元的Token。
合并前消耗了59亿个未缓存的输入Token、6.9亿个输出Token,以及720亿次缓存输入令牌读取,按API定价计算费用约为16.5万美元。Sumner的对比是:如果靠人工,他认为需要3名完全熟悉这个代码库的工程师耗时约一年。
100多万行代码通过测试套件后,进一步的测试和验证发现了更多问题。移植过程中的机械操作引入了19个微妙的语义回归,根源在于Zig和Rust之间的语法相似性。Claude Code Security进行的11轮安全审查修复了多个安全问题。团队还对Bun中的每个解析器进行了7x24小时不间断的覆盖率引导式模糊测试,其间共产生了15个PR。
据Bun团队称,通过Rust重写实现的Bun v1.4.0不仅修复了v1.3.14中长期存在的128个Bug,还带来了性能收益。原生内存泄漏问题已经解决。在进程内打包测试中连续执行2000次Bun.build()操作时,内存占用在Rust环境中稳定维持在609 MB,而非像之前那样攀升至超过6.7 GB。HTTP吞吐量提高了2%至5%。
Zig之父的尖锐质疑
Zig语言创建者Andrew Kelley发表了一篇批评文章,题目是"我对Bun用Rust重写的看法"。
他指出了一个二分法:为了避免Bug,你必须在"风格指南"和编程语言特性之间做出选择。他认为这种障眼法将读者的注意力从消除Bug的主要途径上转移开了,即投入工程资源来解决这个问题。
Kelley还追问:主张将所有100万行未经审查的代码直接发布出去的理由是测试套件足够完善,能够捕获所有问题。那么为什么Zig代码中存在这么多令人头疼的Bug?那个"测试套件足以捕获所有问题"的说法去哪儿了?它不足以捕获Zig代码中的Bug,却足以捕获100万行未经审查的粗制滥造的Rust代码中的Bug?
与此同时,用户vitaminCPP指出,超过100万行机器转译代码的整合,使Bun成为一个关键的行业预警风向标,用以检验由大型语言模型生成的庞大代码库在软件工程生命周期中是否仍然能够保持可维护性。
Bun于2025年12月被Anthropic收购。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.