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)策略。
迁移指南的核心要求:
- 尽可能忠实地移植 Zig 代码,不做大幅度重构
- 保持相同的架构、数据结构和模块划分
- 逐文件进行转换,Zig 代码作为唯一参考
- 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 面临两个选择:
- 重构代码逻辑,用 Rust 惯用方式重写,以符合 Rust 的所有权模型
- 使用
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 重写项目
- 问清楚迁移策略:是忠实翻译还是重新设计?两者的时间/成本/质量差异巨大。
- 要求查看 unsafe 数量:这是衡量迁移质量的关键指标。
- 区分行为验证和安全验证:测试通过率只能说明前者。
- 规划后续清理时间: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 canary或oven/bun:canaryDocker 镜像 - 无需恐慌: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|性能优化