从 Zig 到 Rust:Bun 运行时的六天重写奇迹与 AI 编程的未来
引言:一场震惊整个 JavaScript 生态的迁移
2026 年 5 月 11 日,Bun 创始人 Jarred Sumner 在 X 上发布了一条看似简单的推文:
"Bun v1.3.14 将于明日发布。如果我们合并 Rust 重写版本,这将是 Zig 的最后一个版本。"
这句话如同一颗炸弹,在 JavaScript 社区引发了轩然大波。四年前,Bun 因选择 Zig 而显得特立独行;四年后,Zig 版本被它的创造者用一条推文宣告了终结。
这场从 Zig 到 Rust 的迁移,实际上只花了大约六天,涉及 96 万行代码,并且在 Linux x64 glibc 环境下通过了现有测试套件的 99.8%。而六天前,Jarred 还在 Hacker News 上说这是一堆根本还跑不起来的代码,"最后被全部扔掉的概率非常高"。六天后,同样的代码变成了"Zig 的最后一个版本"。
这不仅仅是一次语言迁移,更是一场软件工程范式的革命。本文将深入探讨这次重写的技术细节、背后的故事,以及它对整个 AI 编程时代的深远影响。
背景:Bun 与 Zig 的四年情缘
1.1 Bun 的诞生与 Zig 的选择
Bun 于 2022 年首次发布,其目标是成为 JavaScript 生态的"终极工具链"。它集成了运行时、包管理器、测试框架和打包器于一体,致力于解决 Node.js 生态的碎片化问题。
在当时的技术选型中,Bun 团队选择了 Zig 作为核心实现语言。这个选择在当时看来非常大胆:
- 性能优势:Zig 编译成高效的机器码,没有运行时开销
- 简单性:Zig 的语法简洁,接近 C 但更现代化
- 安全性:Zig 提供了内存安全保证,避免了 C/C++ 的常见陷阱
- 编译速度:Zig 的编译速度极快,适合快速迭代
1.2 Zig 版本的辉煌与挑战
在 Zig 版本中,Bun 取得了显著的成就:
- 启动速度:仅 3 毫秒,比 Node.js 快 15 倍
- 包管理:内置包管理器比 npm 快 20-30 倍
- 一体化设计:一个二进制文件提供完整的开发体验
然而,随着项目规模的扩大,Zig 版本也逐渐暴露出问题:
- 内存泄漏:特别是 WebKit Malloc 分配器中的泄漏问题
- 稳定性问题:长期存在的 flaky 测试
- 社区分歧:与 Zig 社区的理念冲突
- 维护成本:96 万行 Zig 代码的维护变得越来越困难
危机:内存泄漏与 Claude Code 的连锁反应
2.1 Anthropic 收购与 Claude Code 的诞生
2025 年 12 月,Anthropic 收购了 Bun。官方说法是"加速 Claude Code 能力",本质上是要让 Bun 成为 Claude Code 背后的运行时、包管理器、bundler 和测试工具。
Anthropic 将 Bun 定义为"AI 驱动软件工程的重要基础设施",并认为它能够帮助开发者以前所未有的速度构建和测试应用。
2.2 内存泄漏的严重性
Claude Code 是以 Bun 可执行文件的形式发布的。当你安装 Claude Code 时,你实际上也在运行 Bun。这并非简单的合作关系,而是紧密的依赖关系。
关键问题数据:
- Issue #33453:Claude Code 的主进程表现出严重的内存泄漏,RSS 内存在约 3 小时的短会话中从约 1.7GB 增长到 14GB 以上
- Issue #11377:运行 14 小时后,Claude Code 进程占用 23GB 虚拟内存,143.8% CPU,系统完全卡死
- 根本原因:泄漏位于 Bun 运行时的 WebKit Malloc 分配器中,而非用户空间的 JavaScript 分配
2.3 社区的不满
Reddit 用户 Xtergo 曾在一篇自称"粗糙调查"的帖子中集中吐槽 Bun 的内存泄漏问题:
"任何新运行时都会有成熟度问题,这些问题最终会随着时间慢慢被修复。但我担心的是,Bun 的路线图看起来更像是在不断叠加新功能,而不是优先解决稳定性和 Bug 修复问题。"
波兰数字会员系统公司 Rewardo 的 CTO Wojciech Maj 做过一个惊人的对比:
- Node.js:作为几乎"驱动整个互联网"的运行时,目前大约有 1700 个 open issues
- Bun:更年轻、用户规模远小于 Node.js,却已经积累了约 4700 个 open issues
"单纯数字不能说明全部问题,但这个差距依然很惊人。Node.js 承担着全球级别的工作负载,却维持着更小的 backlog;而仍处于早期阶段的 Bun,却已经被问题淹没了。"
重写:六天、96万行代码的奇迹
3.1 AI 驱动的迁移策略
2026 年 5 月初,Bun 的 GitHub 仓库里出现了一个名为 claude/phase-a-port 的新分支。分支内部,数十万行由 AI 生成的 Rust 代码,和原始 Zig 实现并排存在。
同时出现了一份极其详细的 PORTING.md 文档。这是一份长达 576 行的 Zig-to-Rust 迁移指南。它把迁移拆成 Phase A 和 Phase B:
- Phase A:要求 Claude 逐文件忠实保留 Zig 的逻辑,即便 Rust 代码暂时不能编译也没关系
- Phase B:再逐个 crate 解决编译、构建和运行问题
文档还细到规定文件命名、crate 引用、禁止使用 tokio/rayon/hyper/futures、禁止 async fn、unsafe 必须写明 SAFETY 注释,甚至要求遇到不确定逻辑时宁可留下 TODO,也不要让 AI 自行猜测。
3.2 迁移的技术细节
核心架构保持不变:
- 相同的架构设计
- 相同的数据结构
- 依然使用极少的第三方库
- 依然不依赖 async Rust
关键的技术挑战:
Tagged Pointer 转换:Bun 原来的 Zig 代码大量使用 tagged pointer 来处理 event loop task、进程退出回调、非阻塞文件 I/O 等接口;迁到 Rust 后,如果直接用 trait 或函数指针,可能会带来额外开销。
内存管理:Rust 的所有权系统需要重新设计,确保与原有功能的兼容性。
性能保持:确保 Rust 版本在保持功能的同时,不牺牲性能优势。
3.3 惊人的进度
整个项目以一种不太像"正常软件工程"的速度推进:
- 5月7日:约 4000 次 commit、96 万行代码,只剩下 3 个编译错误
- 5月9日:在 Linux x64 glibc 环境下通过了 Bun 既有测试套件的 99.8%
- 5月11日:正式宣布 Rust 版本将成为默认版本
Jarred Sumner 解释说,Rust 版本"基本上还是同一个代码库",但编译器可以帮助团队检查类型生命周期,也能在需要时使用析构函数;那些危险部分会以 unsafe 的形式暴露出来,看起来更刺眼,也更容易推动重构。
争议:1.3万个 unsafe 与 AI 编程的信任危机
4.1 unsafe 调用的争议
重写完成后,最大的争议来自 unsafe 调用的数量:
- uv:包含 35 万行 Rust 代码,以及 73 个 unsafe 调用
- Bun:68.1 万行 Rust 代码,超过 13,000 个 unsafe 调用
这个差距接近 180 倍,引发了社区对代码质量的严重担忧。
Jarred Sumner 的解释:
"今天已经下降了大约 2000。我预计它会稳定在 1 万左右,因为 Bun 的大部分内容都是用 C 和 C++ 编写的,这种情况不会改变。"
4.2 AI 编程的信任危机
网友 Aashish Ranjan Singh 在 X 上写道:
"UV rust 是由真正的开发人员编写的,每一行代码都经过了审查。Bun rust 由 Agents 编写,由 Agents 审核,并由 Agents 批准和合并。完全在意料之中的结果。"
另一位用户 HSVSphere 更是不客气:
"uv 不是 vibecoded 的垃圾,而且开发它的人对 Rust 非常了解。但 Bun 就完全不同了,它简直是一场风格灾难。用 Deno 吧。"
4.3 开发流程的重新定义
这次重写暴露了一个更深层次的问题:AI 编程的开发流程应该如何定义?
传统的软件工程流程:
- 人类编写代码
- 人类审查代码
- 人类测试代码
- 人类合并代码
AI 驱动的软件工程流程:
- AI 编写代码
- AI 审查代码
- AI 测试代码
- AI 合并代码
这种新模式带来了前所未有的速度,但也带来了前所未有的信任挑战。
架构分析:从 Zig 到 Rust 的技术演变
5.1 核心架构的保持
Bun 的重写不是推倒重来,而是在保持原有架构优势的基础上,用更安全的语言替换底层实现。
核心组件保持不变:
- JavaScript 引擎:依然使用 JavaScriptCore(Safari 的引擎)
- 包管理器:内置的 npm/yarn/pnpm 替代品
- 打包器:内置的 webpack/vite/esbuild 替代品
- 测试框架:内置的 jest/vitest 替代品
- Shell 执行:内置的 shell 功能
5.2 内存安全的提升
Rust 的价值在于其编译器提供的内存安全保证。过去多年,内存 bug 消耗了开发团队大量时间进行调试和修复。Rust 的所有权系统和借用检查器能够在编译时捕获这类问题,从根本上杜绝了:
- dangling pointer
- buffer overflow
- use after free
- double free
对于一个每天处理数十亿次请求的 JavaScript 运行时来说,这种保障的价值难以估量。
5.3 性能对比
二进制文件体积:
- 重写后缩小了 3-8MB
- 更小的体积意味着更快的下载和部署
性能测试结果:
- 在各个平台上均达到或超越原有水平
- 启动时间保持约 3 毫秒
- 包管理速度保持比 npm 快 20-30 倍
实战指南:迁移到 Bun Rust 版本
6.1 环境准备
# 安装 Bun Rust 版本
bun upgrade --canary
# 验证版本
bun --version
6.2 项目迁移
原有项目结构:
my-project/
├── package.json
├── src/
│ ├── index.ts
│ └── utils.ts
├── tests/
│ └── test.ts
└── bunfig.toml
迁移步骤:
- 保持现有代码不变:Bun Rust 版本完全兼容现有的 Node.js API
- 更新配置:根据需要调整
bunfig.toml配置 - 测试兼容性:运行完整测试套件确保功能正常
# 运行测试
bun test
# 启动开发服务器
bun dev
# 构建项目
bun build
6.3 性能优化建议
利用 Bun 的内置功能:
// 使用 Bun 的内置 HTTP 服务器 const server = Bun.serve({ port: 3000, fetch(req) { return new Response('Hello from Bun!', { status: 200, }); }, });包管理优化:
# 使用 Bun 的快速包安装 bun install # 使用 Bun 的快速依赖分析 bun pm audit构建优化:
# 使用 Bun 的快速构建 bun build --target=browser src/index.ts > dist/bundle.js
深度解析:AI 编程的未来趋势
7.1 AI 编程的现状
Bun 的重写不是孤例,而是 AI 编程大趋势的一个缩影。类似的 AI 驱动极限重写正在多个领域同时发生:
- Cloudflare:在一周内借助 AI 重新实现了 Next.js API 的大部分能力
- Ladybird 浏览器:在两周内将自己的 JavaScript 引擎从 C++ 迁移到了 Rust
- 其他开源项目:越来越多的项目开始尝试 AI 辅助的重写
7.2 AI 编程的优势与挑战
优势:
- 速度:六天完成 96 万行代码的迁移,这是人类团队无法企及的速度
- 规模:能够处理大规模代码库的重构
- 一致性:AI 生成的代码在风格和模式上更加一致
挑战:
- 安全性:1.3万个 unsafe 调用引发的安全担忧
- 可维护性:AI 生成的代码是否易于人类理解和维护
- 创新性:AI 是否能够真正推动技术创新,而不仅仅是代码转换
7.3 未来的发展方向
Jarred Sumner 曾预言:
"我预计开源软件会走向完全相反的方向——未来甚至可能变成'禁止人类贡献代码'。人类依然会负责讨论问题、决定优先级,但真正写代码、提交 PR、回复和处理反馈、完成实现的工作,最终都会由 LLM 来完成。"
这种预测正在逐步成为现实。未来的软件开发可能会呈现以下特点:
- 人类负责架构设计:确定系统的整体架构和技术选型
- AI 负责实现:将设计转化为具体的代码实现
- AI 负责测试:自动生成测试用例并验证功能
- 人类负责审查:对 AI 生成的高风险代码进行人工审查
总结与展望
8.1 本次重写的意义
Bun 从 Zig 到 Rust 的重写,不仅仅是一次技术迁移,更是软件工程史上的一个重要里程碑:
- 证明了 AI 编程的可行性:六天完成 96 万行代码的重写
- 展示了跨语言迁移的价值:用 Rust 的安全性替换 Zig 的性能优势
- 揭示了 AI 编程的挑战:unsafe 代码数量、可维护性等问题
8.2 对 JavaScript 生态的影响
这次重写对整个 JavaScript 生态产生了深远影响:
- 性能标准的提升:Bun 重新定义了 JavaScript 运行时的性能标准
- 工具链的整合:一体化工具链成为新的发展趋势
- 安全性的重视:内存安全成为运行时设计的重要考量
8.3 对 AI 编程的启示
Bun 的案例给我们带来了重要启示:
- 速度与质量的平衡:AI 编程需要在速度和质量之间找到平衡
- 人类监督的必要性:即使是 AI 编程,也需要人类的监督和指导
- 技术选型的重新思考:编程语言的选择不仅仅是技术问题,还涉及维护成本、社区支持等因素
8.4 未来展望
展望未来,AI 编程可能会成为软件开发的主流模式:
- 更智能的 AI 编程助手:能够理解更复杂的业务逻辑和设计意图
- 更好的代码质量保证:AI 生成的代码质量将大幅提升
- 更完善的开发流程:形成适合 AI 编程的全新开发方法论
正如 Jarred Sumner 所说:"这种 pipeline,任何 VC 支持的 OSS 或者有大量 GitHub issues 的公司都能搭建。更普遍地说,它可以用于自动修复用户报告的 bug。"
Bun 的重写只是一个开始。未来,我们将看到更多这样的 AI 驱动的大型项目重构。速度上天的时代,信任只能自己想办法落地。
参考资料
作者简介
本文由程序员茄子技术团队原创,专注于深度技术分析和前沿技术趋势解读。我们致力于为开发者提供有深度、有见解的技术内容。