编程 从 Zig 到 Rust:Bun 运行时的六天重写奇迹与 AI 编程的未来

2026-06-21 07:26:08 +0800 CST views 6

从 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 版本也逐渐暴露出问题:

  1. 内存泄漏:特别是 WebKit Malloc 分配器中的泄漏问题
  2. 稳定性问题:长期存在的 flaky 测试
  3. 社区分歧:与 Zig 社区的理念冲突
  4. 维护成本: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

关键的技术挑战:

  1. Tagged Pointer 转换:Bun 原来的 Zig 代码大量使用 tagged pointer 来处理 event loop task、进程退出回调、非阻塞文件 I/O 等接口;迁到 Rust 后,如果直接用 trait 或函数指针,可能会带来额外开销。

  2. 内存管理:Rust 的所有权系统需要重新设计,确保与原有功能的兼容性。

  3. 性能保持:确保 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 编程的开发流程应该如何定义?

传统的软件工程流程:

  1. 人类编写代码
  2. 人类审查代码
  3. 人类测试代码
  4. 人类合并代码

AI 驱动的软件工程流程:

  1. AI 编写代码
  2. AI 审查代码
  3. AI 测试代码
  4. 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

迁移步骤:

  1. 保持现有代码不变:Bun Rust 版本完全兼容现有的 Node.js API
  2. 更新配置:根据需要调整 bunfig.toml 配置
  3. 测试兼容性:运行完整测试套件确保功能正常
# 运行测试
bun test

# 启动开发服务器
bun dev

# 构建项目
bun build

6.3 性能优化建议

  1. 利用 Bun 的内置功能

    // 使用 Bun 的内置 HTTP 服务器
    const server = Bun.serve({
      port: 3000,
      fetch(req) {
        return new Response('Hello from Bun!', {
          status: 200,
        });
      },
    });
    
  2. 包管理优化

    # 使用 Bun 的快速包安装
    bun install
    
    # 使用 Bun 的快速依赖分析
    bun pm audit
    
  3. 构建优化

    # 使用 Bun 的快速构建
    bun build --target=browser src/index.ts > dist/bundle.js
    

深度解析:AI 编程的未来趋势

7.1 AI 编程的现状

Bun 的重写不是孤例,而是 AI 编程大趋势的一个缩影。类似的 AI 驱动极限重写正在多个领域同时发生:

  1. Cloudflare:在一周内借助 AI 重新实现了 Next.js API 的大部分能力
  2. Ladybird 浏览器:在两周内将自己的 JavaScript 引擎从 C++ 迁移到了 Rust
  3. 其他开源项目:越来越多的项目开始尝试 AI 辅助的重写

7.2 AI 编程的优势与挑战

优势:

  • 速度:六天完成 96 万行代码的迁移,这是人类团队无法企及的速度
  • 规模:能够处理大规模代码库的重构
  • 一致性:AI 生成的代码在风格和模式上更加一致

挑战:

  • 安全性:1.3万个 unsafe 调用引发的安全担忧
  • 可维护性:AI 生成的代码是否易于人类理解和维护
  • 创新性:AI 是否能够真正推动技术创新,而不仅仅是代码转换

7.3 未来的发展方向

Jarred Sumner 曾预言:

"我预计开源软件会走向完全相反的方向——未来甚至可能变成'禁止人类贡献代码'。人类依然会负责讨论问题、决定优先级,但真正写代码、提交 PR、回复和处理反馈、完成实现的工作,最终都会由 LLM 来完成。"

这种预测正在逐步成为现实。未来的软件开发可能会呈现以下特点:

  1. 人类负责架构设计:确定系统的整体架构和技术选型
  2. AI 负责实现:将设计转化为具体的代码实现
  3. AI 负责测试:自动生成测试用例并验证功能
  4. 人类负责审查:对 AI 生成的高风险代码进行人工审查

总结与展望

8.1 本次重写的意义

Bun 从 Zig 到 Rust 的重写,不仅仅是一次技术迁移,更是软件工程史上的一个重要里程碑:

  1. 证明了 AI 编程的可行性:六天完成 96 万行代码的重写
  2. 展示了跨语言迁移的价值:用 Rust 的安全性替换 Zig 的性能优势
  3. 揭示了 AI 编程的挑战:unsafe 代码数量、可维护性等问题

8.2 对 JavaScript 生态的影响

这次重写对整个 JavaScript 生态产生了深远影响:

  1. 性能标准的提升:Bun 重新定义了 JavaScript 运行时的性能标准
  2. 工具链的整合:一体化工具链成为新的发展趋势
  3. 安全性的重视:内存安全成为运行时设计的重要考量

8.3 对 AI 编程的启示

Bun 的案例给我们带来了重要启示:

  1. 速度与质量的平衡:AI 编程需要在速度和质量之间找到平衡
  2. 人类监督的必要性:即使是 AI 编程,也需要人类的监督和指导
  3. 技术选型的重新思考:编程语言的选择不仅仅是技术问题,还涉及维护成本、社区支持等因素

8.4 未来展望

展望未来,AI 编程可能会成为软件开发的主流模式:

  1. 更智能的 AI 编程助手:能够理解更复杂的业务逻辑和设计意图
  2. 更好的代码质量保证:AI 生成的代码质量将大幅提升
  3. 更完善的开发流程:形成适合 AI 编程的全新开发方法论

正如 Jarred Sumner 所说:"这种 pipeline,任何 VC 支持的 OSS 或者有大量 GitHub issues 的公司都能搭建。更普遍地说,它可以用于自动修复用户报告的 bug。"

Bun 的重写只是一个开始。未来,我们将看到更多这样的 AI 驱动的大型项目重构。速度上天的时代,信任只能自己想办法落地。


参考资料

  1. Bun 官方文档
  2. Bun GitHub 仓库
  3. Claude Code 文档
  4. Rust 编程语言
  5. Zig 编程语言

作者简介

本文由程序员茄子技术团队原创,专注于深度技术分析和前沿技术趋势解读。我们致力于为开发者提供有深度、有见解的技术内容。

复制全文 生成海报 JavaScript Rust AI编程 运行时 性能优化

推荐文章

纯CSS绘制iPhoneX的外观
2024-11-19 06:39:43 +0800 CST
PHP服务器直传阿里云OSS
2024-11-18 19:04:44 +0800 CST
使用Python提取图片中的GPS信息
2024-11-18 13:46:22 +0800 CST
回到上次阅读位置技术实践
2025-04-19 09:47:31 +0800 CST
Vue中的表单处理有哪几种方式?
2024-11-18 01:32:42 +0800 CST
程序员茄子在线接单