Bun 用 Rust 重写:AI 驱动开发的一次大胆实验
JavaScript 运行时环境长期以来一直是性能和内存安全性的战场。最初使用 Zig 编写的 Bun 最近采取了一个引人注目的举动:将其代码库的大规模重写合并到了 Rust 中。这次转型不仅仅是语言的变更,更是软件构建方式的转变,因为这次重写在很大程度上是由 AI 自动化驱动的。
向 Rust 转型:为何是现在?
多年来,Bun 的开发一直以快速迭代和激进的性能优化为特征。然而,使用 Zig(一种为底层控制而设计的语言)所带来的权衡也伴随着固有的风险。Bun 的创始人 Jarred Sumner 表示,转向 Rust 主要是为了应对持续存在的内存相关 bug。
在 Hacker News 上的一条评论中,Jarred 解释说,虽然 Rust 不会解决所有问题,但它解决了近期发布说明中发现的大部分 bug:
Rust 不会捕捉到所有这些问题——持有引用时间过长导致的泄漏,以及任何跨越 JS 边界重新进入的情况,仍然需要我们自己负责。但该列表中很大一部分是 use-after-free、double-free 以及在错误路径上忘记释放内存的情况,而这些在 Rust 中会变成编译错误或自动清理。
通过转向 Rust,团队旨在消除整类内存安全问题——特别是 use-after-free 和 double-free 错误——这些错误在 Zig 等底层语言中是极其难以调试的。
AI 驱动的重写:“Vibe-Coding"
社区中产生最大摩擦的并不是语言的选择,而是重写的方法。该合并请求(merge request)在单个 commit 中涉及超过一百万行代码的变更,许多观察者将其描述为“vibe-coding”。
批评者认为这种方法是鲁莽的。Hacker News 上的一些用户表示担心,重写是由 AI(很可能是 Claude)完成的,而且用于验证重写的相同测试用例本身也被修改以适应新的实现。
我开始查看 commit,它基本上是通过修改测试本身来解决“测试不通过”的问题。让它在已经部署的程序上正常运行的真正工作现在才刚刚开始。
这引发了人们的担忧,即该运行时环境现在建立在一个没有任何单一开发者能够拥有完整思维模型的代码库之上,从而造成长期的维护噩梦。
社区反应:怀疑与恐惧
开发者社区的反应呈现两极分化。一些人将其视为自动化翻译的一次前沿实验,而另一些人则将其视为一场灾难性的错误。
技术担忧
- 向后兼容性: 有人非常担心重写会引入微妙的回归问题,而这些问题只有在生产环境中才会发现。
- 稳定性: 在修改后的测试中加入
sleep(1)调用被认为是稳定性不足和“垃圾”代码的迹象。 - 基础设施: 有些人质疑如此大规模的 AI 驱动重写所带来的成本和 token 使用量,认为这更像是一场 AI 驱动的练习,而不是一个严谨的工程过程。
更大的格局
一些观察者认为这一举动可能是一个战略错误,暗示这里适用“毒贩对自己供应的毒品上瘾”的类比。其他人则认为,Bun 的主要竞争对手 Deno 可能会借此机会利用这次重写可能导致的稳定性问题进行扩张。
结论
Bun 向 Rust 的转型不仅仅代表了语言迁移;它是 AI 时代软件工程的一次试金石。如果成功,这一举动将有效地消除内存安全 bug,并利用 Rust 强大的生态系统。如果失败,它将成为一个关于“vibe-coding”的危险性以及在没有人类监督的情况下依赖 AI 进行大规模、规模级架构变更的警示故事。