Bun 换血了:6 天、96 万行 Rust、99.8% 兼容,Claude Code 的内存泄漏也跟着一起修了
Bun 背后的资本力量终于露出了牙齿。2026 年 5 月初,Bun 的 GitHub 仓库出现了一个名为 claude/phase-a-port 的秘密分支。到了 5 月中,这个分支以一条合并请求的方式回到主干——涉及 96 万行 Rust 代码,6 天完成,99.8% 测试兼容,然后,原来的 Zig 版本被判了死刑。
这不是一次普通的版本升级。Anthropic 在 2025 年 12 月收购了 Bun,目的是让 Claude Code 跑得更快、更稳。结果事与愿违:Bun 的内存泄漏和运行时稳定性问题直接拖累了 Claude Code 的表现——CLI 卡顿、内存暴涨,根子都在 Zig 语言本身对内存管理的限制上。Rust 成了唯一的出口,而解题的工具,恰好是 Claude 本身。
一次用 AI 对抗熵增的极限工程
迁移的策略很有意思。Phase A 的目标不是优化,是草稿式翻译:忠实重现 Zig 的逻辑,不追求 Rust 优雅,先让测试套件跑起来再说。整个代码库按功能领域拆成 20 多个 crate(http、install、bundler 等),通过 bun_::Type 跨 crate 引用。内存模型有严格限制:不使用 async/await、不依赖 tokio、不用标准 I/O(都用 Bun 自有的事件循环);JSC 集成层用 Strong/JsRef 而非裸 JSValue,配合 conservative GC stack scanning;字符串一律是字节(Vec<u8> 或 &[u8]),避免 String 的开销。
整个迁移过程非比寻常。Jarred Sumner 5 月 7 日发推称已涉及约 4000 次 commit、96 万行代码,只剩 3 个编译错误。两天后,Rust 版本在 Linux x64 glibc 上跑出了 99.8% 的测试兼容率。5 月 14 日,PR #30412 直接并入主干,6,755 次 commit 压缩成一条合并记录——这个量级的代码替换在正常开发节奏里大概要半年,Bun 用 AI 干了 6 天。
数字里的真相
争议也不少。t3.gg 创始人 Theo 指出 Bun Rust 移植版有超过 13,000 个 unsafe 调用,同期 uv 项目只有 73 个。Sumner 的回应是 Bun 本身需要和大量底层 C/C++ 代码打交道,unsafe 的量级不可比。无论如何,这个数字至少说明:这次迁移的核心驱动力不是Rust 代码更优雅,而是Zig 管不住的内存,必须有人来管。
实际收益则比较克制。编译后的二进制体积缩小 3–8 MB,基准测试落在持平到略快的区间——对于一个以速度为主打的产品来说,这个结果算不上惊人,但考虑到整个底层语言都换了,没有出现性能倒退本身就是一种成功。另外,移植过程中顺手修掉了好几个长年的内存泄漏和随机失败的测试,这些才是 Claude Code 真正需要的。
前端工具链的 Rust 化还在加速
Bun 不是第一个,也不会是最后一个。前端生态对 Rust 的采纳在 2024–2026 年间快速扩大:SWC、Turbopack、Oxc、Biome、Rspack……每一次换血背后都是同一个逻辑:JavaScript 写的编译器/打包器/工具链,在规模面前撞上了内存墙,换 Rust 才能继续跑。这次的不同在于:Bun 换血的速度和幅度刷新了记录——96 万行,6 天,而且驱动这次换血的不是工程师的手,而是 AI 本身。
接下来怎么用
Bun Rust 版本目前仅在 canary 渠道提供(bun upgrade –canary),stable 版还没有切过来。但方向已经确定了:未来所有 Bun 开发都基于 Rust 分支,Zig 版本不再维护。如果你在用 Bun 作为本地运行时、打包工具或 CLI 基础设施,建议关注这个切换窗口——特别是你的 CI 链路上依赖 bun install 或 bun build 时,提前在 canary 环境里验证兼容性。生产环境建议等 stable 发布后第一时间升级,不只是性能问题,而是内存稳定性的改善对长时运行的 CI 任务影响最直接。
评论区
登录后可评论。