2026年5月14日,一个GitHub Pull Request的合并按钮被按下,标志着JavaScript运行时领域可能迎来了一个里程碑事件:Bun的全部Zig代码被重写为Rust,并正式合入主分支。这个由Jarred Sumner主导、Claude辅助完成的庞大工程,涉及6755次提交、超过100万行代码的迁移,在Hacker News上获得464分和537条评论,社区反应极为两极化——969个👍 vs 785个👎。
一场为期一周的豪赌
PR的描述简洁到令人咋舌:”Blog post with details coming soon.” 但数据本身已经足够震撼:
代码规模:Bun现在拥有超过100万行Rust代码(929,213行Rust + 其他语言),逼近Rust编译器本身的规模。迁移后的二进制文件缩小了3-8MB。
测试通过率:新代码库通过了Bun现有的全部测试套件,在macOS、Linux和Windows三个平台上均达到与原始Zig版本持平或更优的性能,同时修复了多个内存泄漏和边缘测试的不稳定问题。
核心动机:Jarred在评论中坦言,这个决定是”多年来内存bug耗费团队大量开发和调试时间”的直接回应。Rust的编译器辅助安全特性——特别是对use-after-free、double-free和错误路径上忘记释放内存的编译时检测——正是Zig项目长期以来的痛点。
AI辅助的重写:机械翻译还是深度工程?
社区对这次迁移的讨论焦点集中在方法论上。有评论者深入分析了迁移指南文档后发现,Bun的Zig代码库在迁移前就做了一系列”预先准备”:内部智能指针类型与Rust等价物一一映射,bun_collections Rust crate已经存在。整个迁移看起来”相当直接的机械翻译”——这让一些人质疑,为什么不直接写一个Zig→Rust翻译器,而是用Claude逐文件处理?
但也有社区成员通过实际数据回应:新代码库中仍有10,428处unsafe块(分布在736个文件中)——这意味着迁移并非简单的逐行翻译,而是在保留底层系统编程灵活性的同时引入了Rust的安全边界。正如Jarred本人的回应:”Rust不能抓住所有问题——跨JS边界的引用持有和重入问题仍然需要我们自己处理。但过去release notes中大量的use-after-free和double-free bug,现在变成了编译错误或自动清理。”
软件复杂性的”煤矿中的金丝雀”
这场讨论已经超出了Bun项目本身。一位HN用户的观察切中要害:”Bun正在成为LLM时代软件复杂性管理的’煤矿金丝雀’——一个JavaScript解释器包装器加上Node.js库重实现,代码量已接近Rust编译器。
如果AI辅助的大规模语言迁移被证明可行,它所开启的可能性令人遐想:C项目迁至Rust,Python代码库转入Mojo,Legacy Java转为Kotlin——整个软件行业的”技术债务”可能被重新定义。但风险同样显著:机械翻译可能引入微妙的行为差异,而1,000万行unsafe代码的安全隐患不会自动消失。
另一位评论者则冷嘲热讽地预测:”成果如此糟糕,Anthropic将在6个月内悄悄迁回Node——他们现在拿到了头条,6个月后所有人都忘了。” 但无论立场如何,Bun这场迁移实验都已成为AI时代工程实践的一个标志性案例。
📎 原文:Bun PR #30412 – Rewrite in Rust | 💬 HN讨论:news.ycombinator.com