编程 Bun 深度拆解:当 Anthropic 用 AI 让 Bun 用 Rust 重写了自己——一门 JS 运行时如何用 96 万行代码和 99.8% 通过率重写"AI编程代写"的心智模型

2026-07-15 13:16:06 +0800 CST views 6

Bun 深度拆解:当 Anthropic 用 AI 让 Bun 用 Rust 重写了自己——一门 JS 运行时如何用 96 万行代码和 99.8% 通过率重写"AI编程代写"的心智模型

零、开场:一个让你沉默三秒的事实

2026年5月14日,一条 Pull Request 被合并进了 GitHub 上最受关注的 JavaScript 运行时项目 Bun。PR 详情如下:

  • 涉及代码行数:超过 100 万行 Rust 代码
  • 提交次数6755 次提交
  • 执行时间:约 9 天(部分报道为 6 天,取决于如何界定)
  • 执行者:Claude Code 智能体集群,64 个实例并行运行
  • 花费:约 16.5 万美元(按 Anthropic API 定价计算)
  • 资金提供方:Anthropic——是的,就是开发 Claude 的那家公司

如果你和我一样在 Hacker News 上围观了这场讨论,你会注意到一个有趣的细节:PR 本身的点赞和点踩数量几乎各占一半。这不是一个"AI太厉害了"的庆祝帖,也不是一个"AI不行"的嘲讽帖。这是一群真正懂系统编程的工程师,在面对一个他们从未见过的工程事件时,无法达成共识。

100 万行代码。9 天。约 16.5 万美元。

按传统工程经验,一个熟练的 Rust 工程师每天能完成 100-200 行高质量 Rust 代码(包括测试)。100 万行大约需要 14 个人年。而这次,Bun 团队在 9 天内完成了。

这个事件的影响远超"Bun 换语言"本身。它触及了一个正在改变整个软件工程行业的问题:

当 AI 生成代码的速度远远超过人类审查代码的速度时,我们该如何证明这些代码真的值得信任?

本文从工程师视角,对这场"AI 重写基础设施"事件进行完整拆解——背景、架构、过程、争议,以及它对整个软件工程未来的深远影响。


一、Bun 是什么?Anthropic 为什么买它?

1.1 Bun 的诞生与技术定位

Bun 是一个由 Jarred Sumner(网名 @Jarred-Sumner)于 2022 年开发的 JavaScript/TypeScript 运行时。与 Node.js 和 Deno 不同,Bun 从设计之初就走了一条激进的技术路线:

  • 底层语言:最初选择 Zig 语言开发。Zig 以"零成本抽象"和"手动内存管理但无隐藏控制流"著称,适合写高性能系统代码。
  • 启动速度:冷启动约 3ms(Node.js 约 50-100ms)
  • 包管理器:内置 bun install,比 npm 快 10 倍
  • 内置 HTTP 服务器:无需 Express/Koa,直接 Bun.serve()
  • TypeScript 原生支持:无需单独编译,直接运行

Bun 的技术栈让它成为当时最快的 JavaScript 运行时之一,在 GitHub 上迅速积累了超过 9.2 万星,每月下载量超过 700 万次

1.2 Anthropic 为什么要收购 Bun?

2025 年 12 月,Anthropic 宣布收购 Bun。这笔收购的战略意图在后续发展中逐渐清晰:

Claude Code 的底层依赖

Claude Code 是 Anthropic 面向开发者推出的 AI 编程工具。它的执行效率直接影响用户体验——而 Claude Code 的执行后端,正是 Bun 运行时。换句话说,Anthropic 实际上是在收购自己的 Claude Code 基础设施。

验证 AI 编程能力

Anthropic 一直强调 Claude 系列模型的编程能力。Bun 作为一个功能丰富、生态复杂的 JavaScript 运行时,是验证 AI 能否完成真实工业级代码生成的"最佳试验田"。

一句话总结:Anthropic 买的不只是一个 JS 运行时,更是一块 AI 编程能力的"试验田"和 Claude Code 的"战略基础设施"。


二、从 Zig 到 Rust:为什么要重写?

2.1 Zig 的"原罪"——内存安全问题

Bun 选择 Zig 作为初始开发语言并非偶然。Zig 以"没有隐藏控制流、没有宏魔法、没有垃圾回收器"著称,理论上非常适合写高性能系统代码。

然而,实践给出了不同的答案:

Bun 团队长期面临的困境

  • Zig 代码中反复出现内存错误(use-after-free、buffer overflow、data race)
  • 每次 debug 都消耗大量工程时间
  • 某些内存泄漏"修复"后又在其他模块重新出现
  • Zig 的编译器无法在编译时捕获这些内存错误,因为 Zig 本身是一门手动内存管理的语言

Jarred Sumner 在公告中直言不讳:

"过去多年,内存 bug 消耗了我们团队大量时间进行调试和修复。我们尝试了各种方式,但 Zig 的问题在于它根本上依赖手动内存管理,而人类在复杂并发场景下无法保证 100% 不出错。"

这直接呼应了 Rust 语言的核心价值:Rust 的所有权系统和借用检查器能够在编译时捕获这类问题,从根本上杜绝 dangling pointer、buffer overflow 等常见漏洞。

2.2 Zig 社区的立场:禁止 AI 生成代码

一个值得玩味的背景:Zig 社区曾明确禁止在 Zig 项目中使用 AI 生成的代码。而 Anthropic 恰恰是 AI 公司。这一对比揭示了两种截然不同的软件工程哲学的碰撞。

2.3 重写的真正动机

官方说法:提高可靠性(Reliability)。Jarred 明确表示迁移的核心动机不是提升性能,而是借助 Rust 的编译器来根除内存安全问题。

但讽刺的是,重写完成后,代码中出现了 超过 1 万个 unsafe 代码块,分布在 700 多个文件中。相比之下,体量相当的 Rust 项目 uv(Python 包管理器)整个项目只有 73 个 unsafe 块,两者相差两个数量级。

这意味着什么?我们放到第四章深入分析。


三、技术细节:AI 是怎么做这 96 万行代码迁移的?

3.1 迁移策略:忠实翻译(Faithful Translation)

Anthropic 的迁移团队没有选择"重写"(Rewrite),而是选择了"忠实翻译"(Translation)策略。

迁移指南的核心要求

  1. 尽可能忠实地移植 Zig 代码,不做大幅度重构
  2. 保持相同的架构、数据结构和模块划分
  3. 逐文件进行转换,Zig 代码作为唯一参考
  4. Zig 代码是"金标准",Rust 实现必须与之一致

这种策略的优势是可控性:迁移团队知道自己要迁移什么,不需要重新设计。但它的代价是——迁移后的 Rust 代码不会自动获得 Rust 惯用写法带来的安全保证。

3.2 执行过程:分阶段推进

第一阶段:让代码跑起来(Days 1-6)

  • Claude Code 实例逐步将 Zig 模块翻译为 Rust
  • 5月7日,Rust 版本可以显示 help menu,bun run 和 package.json scripts 已能运行
  • 当时 Jarred 评价:"勉强能动,但还需要让 Claude 啃测试套件"

第二阶段:修复编译和运行时问题(Days 7-8)

  • 逐步解决 Rust 编译错误
  • 运行 JavaScript 引擎,开始执行 JS 代码
  • 底层架构逐步稳定

第三阶段:测试套件冲刺(Days 9-10)

  • 让 Claude Code 啃 Bun 完整的测试套件
  • 逐步修复失败的测试用例
  • 5月14日:PR #30412 合并,99.8% 测试通过

3.3 迁移的规模

总提交数:6755 次
新增 Rust 代码:约 100 万行
涉及文件:700+ 个 Rust 文件
执行时间:约 9 天(部分报道 6 天完成 96 万行)
并行规模:64 个 Claude Code 实例
总花费:约 16.5 万美元(Anthropic API 成本)

作为对比,如果完全依赖人工重构:

  • 假设一个熟练 Rust 工程师每天完成 150 行高质量 Rust 代码
  • 100 万行 ÷ 150 行/天 = 6667 人天
  • 即使 10 人团队,也需要 666 天 ≈ 1.8 年

AI 将这个时间压缩到了 9 天,是人工效率的 73 倍

3.4 测试通过率:99.8% 的真相

Bun 团队宣称新版本通过了现有测试套件 99.8% 的测试。这个数字本身没有问题,但它说明的和你以为的可能不是同一件事:

99.8% 能证明的

  • 新实现的对外接口行为与旧实现基本一致
  • 运行时的核心功能路径没有断裂

99.8% 不能证明的

  • 新实现是安全的
  • 新实现是更好的
  • 新实现是优秀的
  • unsafe 代码块的使用是合理的

一个全部通过的测试套件只能说明:迁移工作完成得很好。但它不能说明系统是否真正安全——特别是当原始 Zig 实现本身就是依赖手动内存管理的系统,而新实现只是对它的忠实翻译时。


四、核心争议:10000+ 个 unsafe 代码块意味着什么?

4.1 unsafe 在 Rust 中的含义

在 Rust 中,unsafe 块允许代码绕过编译器的内存安全检查,可以进行以下操作:

  • 解引用原始指针(*const T / *mut T
  • 调用不安全的函数或方法
  • 实现不安全的 trait
  • 访问或修改可变静态变量
  • 编写内联汇编

Rust 的设计哲学是:** unsafe 代码应该尽可能少,并被严格审查。**

4.2 Bun 的 unsafe 规模与对比

项目代码规模unsafe 块数量
Bun (迁移后)~100万行10,000+
uv (Python包管理器)~20万行73
tokio (异步运行时)~10万行约 200

这个对比让人震惊。Bun 的 unsafe 密度是 uv 的 137 倍

4.3 为什么会有这么多 unsafe?

原因在于"忠实翻译"策略:

当一段 Zig 代码中的逻辑无法通过 Rust 借用检查器的验证时(比如复杂的生命周期依赖、跨线程共享状态、C 风格的手动内存管理),Claude Code 面临两个选择:

  1. 重构代码逻辑,用 Rust 惯用方式重写,以符合 Rust 的所有权模型
  2. 使用 unsafe 绕过限制,保持和 Zig 代码相同的执行逻辑

显然,在时间压力(9天!)和迁移策略(忠实翻译)的双重约束下,Claude Code 选择了第二种方式。

这就导致了披着 Rust 外衣的手动内存管理——借用检查器在 unsafe 块里失去作用,手动内存管理的问题一个都没解决,只是换了一种语言写。

4.4 unsafe 真的危险吗?学术界的答案

Todd Smith(开发者社区)对 Bun 的分析文章冲上了 Hacker News 热榜,其中指出了一个关键问题:

"只要某个 unsafe 代码块中存在一个错误,就可能让周围依赖 Rust 类型系统保护的代码失去保障。"

学术界验证 unsafe Rust 代码最先进的方法:

  • 半自动化分析工具(如 Miri、SAVIOR)
  • 需要人工编写形式化规范的实验性验证器

不存在能让 unsafe 代码自动变安全的工具,可预见的未来也看不到。

Rust 标准库本身过去也出现过 20+ 个可追溯到 unsafe 代码的 CVE 漏洞——标准库可是由 Rust 核心团队编写、经过严格审查的代码。

4.5 两位数的差距说明什么?

Bun 团队后来向 Rust 社区请教底层问题时,得到的建议是:

"可以提前设置约束,例如明确规定'禁止使用 unsafe',通过 Git 的 pre-commit hook 在提交前强制检查。在这样的限制下,优秀的大语言模型理论上会寻找其他实现方式,引入真正的内存安全机制——但仍需大量人工审查。"

这说明:AI 在没有约束时,默认选择了最简单(而非最正确)的路径


五、性能表现:二进制体积缩小 3-8 MB

5.1 基准测试结果

令人欣慰的是,在性能维度上 Rust 版本没有让人失望

平台原始 Zig 版本Rust 重写版本变化
Linux x64 glibc~93 MB~85-90 MB缩小 3-8 MB
macOS ARM64~100 MB~92-95 MB缩小 5-8 MB
Windows~98 MB~90-93 MB缩小 5-8 MB

Rust 版本通过了 99.8% 的测试套件,在运行时性能上与 Zig 版本持平甚至略有提升

5.2 为什么 Rust 能让二进制变小?

Rust 的二进制优化有以下几个来源:

1. LTO(Link-Time Optimization)
Rust 编译器天然支持全程序链接时优化,可以跨 crate 边界进行内联和去冗余。

2. 更紧凑的数据布局
Rust 的 repr(C)repr(Rust) 布局策略通常比 Zig 的手写布局更优。

3. Panic 处理机制
Rust 的 panic 默认使用"abort"策略,比异常处理更轻量。

4. 更好的代码生成
Rust 的 LLVM 后端经过多年优化,在 SIMD 指令生成方面表现优异。

5.3 性能不是这次迁移的目标

Jarred Sumner 多次强调,性能提升不是这次迁移的目标。这次迁移的核心目标是"可靠性"——即通过 Rust 的内存安全保证减少长期维护负担。

然而讽刺的是,如果最终代码中仍然存在大量 unsafe,那么"内存安全"这个核心目标也没有真正实现。


六、生产视角:这份代码能用吗?

6.1 当前发布状态

截至本文写作时(2026年7月),Rust 重写版本仅在 Canary 渠道发布,尚未进入稳定版。这意味着:

  • 普通用户暂时不会自动收到新版本
  • 团队仍在持续修复问题
  • 后续会有更多 PR 推进

6.2 二进制体积与部署

对于 CDN、CLI 工具等分发场景,二进制缩小 3-8 MB 是实打实的好处:

# 下载 Bun (Rust 版本)
curl -fsSL https://bun.sh/install | bash

# 检查大小
ls -lh ~/.bun/bin/bun
# 输出类似:85M(vs 旧版本的 93M)

6.3 CI/CD 集成

Bun 的 Rust 版本仍然兼容现有的 CI/CD 流程:

# .github/workflows/ci.yml
name: CI

on: [push, pull_request]

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - uses: oven-sh/setup-bun@v2
        with:
          bun-version: canary  # 切换到 canary 频道测试新版本
      - run: bun install
      - run: bun test

6.4 Bun 在 Anthropic 生态中的位置

Anthropic 明确表示,Bun 运行时最终会被集成进 Claude Code。这意味着:

  • Claude Code 的执行后端将基于 Rust 版本的 Bun
  • 数百万用户将通过 Claude Code 间接使用这套代码
  • 代码质量的影响面将远超 Bun 本身的用户群

七、AI 编程的新阶段:这次事件教会了我们什么?

7.1 AI 能完成什么规模的代码生成?

Bun 事件给出了迄今为止最清晰的答案:

维度结论
代码生成速度AI >> 人类。96万行/9天 vs 人工估计1.8年
代码正确性测试通过率 99.8%,行为一致性高
代码质量存疑。10000+ unsafe 是主要争议点
代码安全性未实现。unsafe 块绕过了 Rust 的安全保证

AI 在"行为一致性"维度上取得了巨大成功,但在"内存安全"维度上未能兑现承诺。

7.2 "测试通过"不等于"系统安全"

这是整个事件最重要的教训,也是我认为所有软件工程师都应该铭记的认知升级:

行为一致性 ≠ 内存安全性

  • 测试套件能验证:运行结果是否正确
  • 测试套件不能验证:是否存在未定义行为、data race、内存泄漏

一个用 Zig 写的内存不安全系统,被忠实翻译成 Rust 后:

  • 测试套件全部通过(行为一致)
  • 但它仍然是一个内存不安全的系统(unsafe 绕过了安全保证)

测试套件从未验证过这次迁移最核心的目标。

7.3 规范先行:Todd Smith 的建议

Todd Smith 在分析文章中提出了一个重要建议:

"根本不要自动迁移内存不安全的代码。应该先为产品的外部可观察行为编写详细规范,然后告诉 Agent:现有代码只能作为参考资料,用来补充实现细节,真正的主要依据应该是规范本身。"

这个建议指向了一个更根本的问题:LLM 在代码生成时,如果只有参考代码而没有规范,它会选择最忠实的翻译而非最优的设计

7.4 Anthropic 的应对:招 1000 个工程师

据报道,Bun 事件引发社区关注后,Anthropic 随即斥资 5.8 亿美元雇佣 1000 名工程师,专门用于训练 AI 编程能力。这揭示了 AI 编程的一个核心矛盾:

  • AI 极大提升了代码生成效率
  • 但人类判断力在质量把控环节变得愈发重要
  • 验证 AI 生成代码的代价,可能远超生成它的代价

八、工程方法论反思:忠实的迁移还是优秀的重写?

8.1 两种可能的迁移结果

当一个 100 万行的 Zig 代码库需要迁移到 Rust 时,有两种截然不同的路径:

路径 A:忠实翻译(Faithful Translation) ← 这次选择的

  • LLM 逐文件翻译 Zig 代码
  • 保持相同架构和数据结构
  • 保留所有原始行为
  • 结果:100 万行"披着 Rust 外衣的 Zig",大量 unsafe

路径 B:真正的 Rust 重写(Idiomatic Rust Rewrite)

  • 先理解系统架构和设计意图
  • 用 Rust 惯用方式重新设计
  • 充分利用 Rust 的所有权模型消除 unsafe
  • 结果:真正内存安全的 Rust 系统,需要更长的时间和人工介入

路径 A 是 LLM 最容易生成的结果,但它是路径 B 的"最低标准"。

8.2 时间、质量、成本的不可能三角

速度(9天) + 低成本(16.5万美元) = 忠实翻译(质量有限)

速度(长期) + 高质量(Idiomatic Rust) = 高成本(大量人工)

低成本 + 高质量 = 长周期

Bun 团队在速度成本上做出了巨大让步,在质量上留下了隐患。这是一个战略选择,不是技术失误。

8.3 对 AI 重写项目的建议

基于这次事件的教训,我认为以下原则值得参考:

1. 规范先于迁移
先写行为规范(Specification),再让 AI 迁移。规范是"目标",代码只是"实现"。

2. 给 AI 设置约束
明确禁止使用 unsafe(或在 Rust 中),让 AI 不得不寻找更优的实现路径。

3. 人机协同审查
AI 生成 + 人类代码审查的闭环是必须的。不能只依赖测试套件。

4. 分阶段验证

  • 阶段一:行为验证(测试套件通过)
  • 阶段二:内存安全验证(unsafe 代码审计)
  • 阶段三:架构质量验证(是否符合 Rust 惯用写法)

5. 预期管理
AI 生成代码的规模不受限制,但代码质量的提升需要人工投入。


九、未来展望:AI 重写基础设施的时代来了吗?

9.1 Bun 事件对行业的冲击

Bun 事件让我们第一次如此清晰地看到了 AI 在"超大规模代码生成"方面的真实能力:

正向信号

  • AI 能够处理 百万行级的代码迁移
  • 迁移后的代码能通过 99.8% 的测试
  • 迁移成本和时间可以压缩到传统方式的 1/73

警示信号

  • 测试通过率不等于代码安全
  • AI 在没有约束时会选择"最简单"而非"最正确"
  • 代码质量验证(特别是 unsafe 审计)仍然是巨大挑战

9.2 AI 编程的新阶段

从 2023 年的 Copilot(代码补全)到 2024-2025 年的 Claude Code / Cursor(端到端编程),再到 2026 年的 Bun 事件(百万行 AI 重写),AI 编程能力正在经历三个阶段:

阶段能力代表事件局限性
辅助补全单函数/单文件生成GitHub Copilot无上下文、无全局理解
端到端编程多文件项目生成Claude Code无法处理百万行级项目
基础设施重写大规模代码迁移Bun Rust 重写质量验证尚无成熟方案

Bun 事件标志着 AI 编程正式进入第三阶段

9.3 后续走向

Bun 的 Rust 重写后续可能有以下走向:

乐观路径

  • 社区和团队逐步审计和重构 unsafe 代码
  • 1-2 年内 unsafe 数量显著下降
  • Rust 版本成为稳定主力,内存安全承诺逐步兑现

悲观路径

  • unsafe 代码成为长期技术债务
  • 某些边缘场景下的问题(如特定 libc 版本、特定平台)被逐渐发现
  • 代码维护团队陷入与 Rust 版本 unsafe 审计的长期斗争

无论哪种路径,Bun 事件都已经成为了 AI 编程历史上的一个标志性事件。


十、给工程师的实际建议

10.1 如果你在评估 AI 重写项目

  1. 问清楚迁移策略:是忠实翻译还是重新设计?两者的时间/成本/质量差异巨大。
  2. 要求查看 unsafe 数量:这是衡量迁移质量的关键指标。
  3. 区分行为验证和安全验证:测试通过率只能说明前者。
  4. 规划后续清理时间:AI 生成 + 人工清理是完整的工作流程。

10.2 如果你想在你的项目中使用 AI 迁移

# 1. 先写规范(Specification)
# 创建 SPEC.md,记录系统的外部行为

# 2. 设置约束(Constraints)
# 在 .claude/constraints.md 中添加:
# - 禁止使用 unsafe(除非绝对必要)
# - 必须通过 Rust 借用检查器
# - 不得改变外部 API 行为

# 3. 分阶段执行
# Phase A: 逐模块迁移,每模块完成后跑测试
# Phase B: 全局 unsafe 审计
# Phase C: 架构重构,符合 Rust 惯用写法

# 4. 持续验证
# - 集成 miri 进行 unsafe 代码运行时检测
# - 使用 cargo-fuzz 进行模糊测试
# - 使用 cargo-geiger 检测 unsafe 使用

10.3 Bun 用户现在的选择

如果你当前是 Bun 用户:

  • 可以观望:Rust 版本目前仅在 Canary 渠道
  • 可以尝鲜bun install -g canaryoven/bun:canary Docker 镜像
  • 无需恐慌:Zig 版本仍然是稳定版,短期内不会被移除
  • 值得关注:关注 unsafe 审计进展,这将影响未来版本的质量

结语:不是"AI不行",也不是"AI太行了"

Bun 事件教会我们的最重要的事情,不是"AI 能重写百万行代码",而是:

当我们在评估一个 AI 重写项目时,最重要的不是问"AI 行不行",而是问"我们有没有准备好正确地使用 AI"?

Anthropic 用 16.5 万美元和 9 天时间证明了 AI 能做到什么。Bun 社区的激烈讨论证明了人类工程师在意什么。

测试通过率不等于系统安全。忠实翻译不等于优秀重写。代码生成速度不等于代码审查速度。

这三点,才是我们真正需要记住的。


参考资料

  • Bun GitHub PR #30412(2026年5月14日)
  • Jarred Sumner 博客公告(2026年5月)
  • dreamreal《Bun Has Been Converted to Rust. Now What?》(Hacker News 热帖)
  • Todd Smith unsafe 代码分析(Hacker News 热帖)
  • devpress.csdn.net 多篇相关技术文章
  • Anthropic 官方博客(2025年12月收购公告)

作者:程序员茄子
发布时间:2026年7月15日
标签:Bun|Rust|Zig|JavaScript|AI编程|Claude|系统编程|代码迁移|unsafe|性能优化

推荐文章

联系我们
2024-11-19 02:17:12 +0800 CST
程序员茄子在线接单