产品派
返回

Bun四个月将53.5万行Zig代码迁移至Rust并修复内存泄漏

开源InfoQ 中文站2026/9/29 18:01:46
AI 导读

Bun已完成从Zig到Rust的整体迁移。其创始人Jarred Sumner表示,迁移主要针对释放后使用、双重释放和遗漏释放等内存安全问题,Rust编译器可通过借用检查器静态拦截相关错误,并借助Drop机制实现自动清理。原本预计需要约一年完成的工作,在AI辅助下压缩至4个月。

这项工作最初只是概念验证。Bun包含535496行Zig代码,若依靠传统人工方式,可能需要3名熟悉代码库的工程师投入约一年。由于其测试套件使用TypeScript编写,与运行时实现语言相对解耦,因此可以直接用超过100万条断言验证Rust版本。Sumner随后使用Claude Fable 5预发布版本,通过约50个动态工作流自动完成转译,并持续改进流程,而不是手动修改每一处生成代码。

迁移前的规划文件发挥了关键作用,其中PORTING.md记录了Zig模式和类型到Rust的对应关系,LIFETIMES.tsv则描述了各结构体字段的生命周期。实现代理负责转换代码,两个独立的对抗性审查代理只检查文件差异并寻找错误,修复代理再处理问题。任务最终拆分到4个工作区,每个工作区运行16个代理,共64个Claude实例;最快时每分钟生成约1300行代码,每小时最多提交695次。

为了让完整测试套件通过,项目消耗了约16.5万美元Token,包括59亿个未缓存输入Token、6.9亿个输出Token和720亿次缓存输入读取。后续验证仍发现19个由两种语言语法相似性导致的语义回归;11轮安全审查修复了多项问题,解析器还接受了7×24小时覆盖率引导模糊测试,共产生15个PR。

Rust版本随Bun v1.4.0于2026年8月发布。团队称,该版本修复了v1.3.14长期存在的128个Bug,并解决原生内存泄漏:在进程内连续执行2000次Bun.build()时,内存占用稳定在609MB,而旧版本会升至超过6.7GB;HTTP吞吐量提升约2%至5%。

这次迁移也引发争议。Zig创建者Andrew Kelley认为,不能简单把避免Bug归因于编程语言特性或风格指南,并质疑测试套件为何既未能捕获原有Zig代码问题,却被视为足以验证超过100万行未经人工审查的Rust代码。另有观点认为,大规模机器转译代码的整合,将成为检验LLM生成代码能否长期维护的重要案例。Bun已于2025年12月被Anthropic收购。

BunRustZigAI编程内存安全

本文基于公开渠道信息整理,内容可能存在不准确或遗漏之处,不代表本站立场,如内容涉及侵权或错误,请联系我们处理。

阅读原文