写过前端的都以为 Bun 是用 Zig 写的,这件事今天被 Rust 从根上翻了

53.5 万行 Zig 代码、11 天、一个工程师——Bun 1.4 今天用 Rust 把这件事彻底原生化了,解决了长期困扰的内存安全问题。

Bun 最初选择 Zig,是因为它能让你用接近机器的方式控制资源,同时保持单文件构建的体验。这种控制力让一个人用一年时间就能做出一个 bundler、一个 Node.js 兼容运行时、一个包管理器、一个测试框架。但 Zig 的控制力是双刃剑——当它和 JavaScriptCore(一个垃圾回收引擎)共存于同一个进程时,问题就出现了。

JavaScriptCore 对异常处理和 GC 可见性有严格规则,而 Zig 里每个内存分配都需要手动管理。每个指针都引发一系列问题:这个内存会在哪里被释放?会被释放两次吗?GC 的保守栈扫描能看到它吗?这些问题导致 Bun 里存在大量使用后继续释放、重复释放、在错误处理路径中忘记释放的 bug。Sumner 说,他晚上睡觉时都在担心 Bun 会不会再次崩溃。

团队想过用 C++ 重写,也想过靠代码规范来约束,但最终决定用 Rust 来彻底解决:让这些问题在编译阶段就被发现,而不是靠代码规范。

按照传统开发方式,估计需要一年时间让工程师把全部精力投入代码迁移。但 Sumner 的做法完全不一样:他搭建了约 50 套 Claude Code 动态工作流,让 64 个并行的 AI Agent 连续运行了 11 天,把 53.5 万行 Zig 代码全部迁移到了 Rust。整个过程 API 成本约 16.5 万美元——对比三个工程师一年的机会成本,这只是零头。

发布时没有用户可见的中断:功能开发、安全更新、bug 修复一切照常进行。

实际上 Claude Code 从 6 月中旬起就已经在新的 Rust 版本上运行了。用户几乎没察觉到任何差异——这才是真正的无缝切换。

对前端开发者来说,Bun 1.4 内置了一系列工具:图片处理(替代 sharp)、浏览器自动化(替代 Puppeteer)、Markdown 解析(替代 marked)、定时任务(替代 node-cron)、终端能力(替代 node-pty)。这些以前需要单独安装的工具,现在开箱即用。

这次重写证明了大型代码库在 AI 辅助下可以快速、安全地迁移。整个前端工具链正在被重写——这个趋势只会越来越快。

下一步:如果你在用 Bun,可以跑一下 bun upgrade --canary 体验新版本;如果你是 Node.js 项目的维护者,Bun 1.4 的 npm 兼容性已经到了 97%,可以把它当作 Node.js 的直接替代品试试看。

评论区

0 条评论

登录后可评论。

阿柯·前端架构 15 阅读