14 天,100 万行代码,16.5 万美元 API 账单。

这是 Anthropic 工程师最近干的一件事,用 Claude Code 把 Bun 运行时的核心代码,从 Zig 语言整体迁移到 Rust。两周后,100% 的现有测试通过,编译时间从 8 分钟降到 2 秒,二进制启动速度提升了 6 倍。

如果你只看这些数据,会觉得这就是一篇标准的 AI 编程爽文。但故事的另一面是,合并后出现了 19 个回归问题,团队花了不少时间才全部修复。花这么多钱、冒这么大风险,到底值不值?

19 个回归放在 100 万行代码的基座上,听起来不多,但每一个都可能影响成千上万的下游用户。Bun 不是一个玩具项目,它被用来跑真实的 Web 服务、构建工具、测试框架。如果一个回归破坏了 npm 包的兼容性,或者改变了文件系统的行为,ripple effect 会非常广。

也正因如此,单纯比较 100 万行代码这个数量级意义不大。真正重要的是迁移后的代码质量、行为一致性和长期可维护性。数量可以吹牛,质量只能交给时间。

我觉得这件事最有趣的地方,不是 AI 又完成了一项不可能的任务,而是它让我们看清了当前 AI 编程的真实边界,上限很高,下限也很真实。

坦白讲,第一次看到这条新闻的时候,我下意识是怀疑的。两周 100 万行,听起来像是为了融资简报做的数字。但当我看到 Anthropic 愿意把 19 个回归和 16.5 万美元成本都摆出来,反而觉得这件事可信度变高了。因为真正吹牛的人,不会主动告诉你失败的细节。

Anthropic 内部其实把这个项目当成一次工程实验。他们选了一个足够复杂的场景,Bun 是一个被大量开发者使用的 JavaScript 运行时,代码库规模庞大,Zig 和 Rust 虽然都是系统级语言,但内存模型、错误处理、并发抽象差别不小。能把这种体量的代码迁移完成,本身就说明 Claude Code 已经不只是写写脚本那么简单。

这跟他们去年发布的 Claude Code 定位一致。它不是简单的代码补全,而是一个可以自主执行多步骤任务的编码 Agent。你可以让它理解整个仓库,修改多个文件,运行测试,根据结果继续调整。也就是说,它试图把过去需要几个工程师协作几周的工作,压缩成一个人加一台机器的对话。

他们具体是怎么做的?

核心方式是把 Claude Code 当成一个可以长时间自主工作的编码助手。工程师给出高层指令,Claude Code 负责分析依赖关系、生成 Rust 代码、处理 FFI 边界、跑测试、定位失败。它不是一次把 100 万行全改完,而是分模块推进,每完成一块就验证一块。

这种工作流和过去两年我们熟悉的 Copilot 完全不一样。Copilot 更像是一个「高级自动补全」,你写一行,它猜下一行。它帮你提速,但决策权在你手里。Claude Code 这种 Agent 模式,是你扔给它一个目标,它会自己拆解步骤、调用工具、回退重来。

那结果会怎样呢?工程师的角色开始发生变化。你不再是一行行敲代码的人,而是更像一个项目经理,负责定义目标、验收结果、判断方向。好处是,你可以把大量机械性工作外包出去。坏处是,如果 Agent 在某一步走偏了,你要有能力及时发现并把它拉回来。

让我比较震惊的是成本数字。16.5 万美元,换算成人民币大概一百多万。如果按国内 API 价格算,这笔钱够一个小团队做几个月的常规开发。但 Anthropic 的算法是,迁移后编译时间从 8 分钟降到 2 秒,工程师每次改完代码不用等一杯咖啡,CI/CD 流水线也能大幅缩短。启动速度快了 6 倍,对用户体验和产品性能都是直接提升。长期看,这些节省的时间会被摊薄。

说实话,这个 ROI 计算我并不完全买账。因为真正贵的不是 API 调用,而是那 19 个回归 bug。在大型系统迁移里,测试通过只是第一步,生产环境里那些隐蔽的边界条件、性能退化、平台兼容性,才是真正烧钱的地方。修复一个回归,有时候比写十段新代码还难。

另一个值得算的经济账是,16.5 万美元只是 API 的直接费用,没算工程师在监督、验收、修复回归上花的时间。如果把这些人工成本加进去,总成本可能翻倍。这也是为什么我觉得这个案例不适合直接套用到普通公司。对 Anthropic 来说,这是品牌建设和技术验证的投入;对一家需要控制预算的创业公司来说,这可能是一笔承担不起的开销。

不过 Anthropic 坦诚地公布了这些回归问题,反而让我觉得这件事更有价值。大多数 AI 编程的 case study 只讲成功,不讲失败。恨不得把一切都包装成「AI 又赢了」的叙事。但这里把 19 个回归摆出来,至少说明他们没有为了 PR 效果把数据打磨得过于光滑。

这种坦诚在 AI 行业里其实挺稀缺的。我们看过太多只展示最佳结果的 demo,却很少有人告诉我们失败的概率和修复的成本。一个真实的工程故事,应该有裂缝,有修补,有不完美。Anthropic 这次至少把裂缝亮出来了。

另一个容易被忽略的细节是,他们不只是迁移了 Bun。另一名工程师用周末时间,把一个 Python 代码库迁移到了 16.5 万行 TypeScript。也就是说,这种能力不是针对某一种语言的 trick,而是 Claude Code 在长程代码理解和跨语言迁移上的一次集中展示。

很多人可能不理解,Bun 原来为什么用 Zig。Zig 是一门很年轻的系统语言,强调显式控制和编译期能力。Bun 选择它,一部分原因是为了追求极致性能,另一部分是因为 Zig 的构建系统相对简单。但 Zig 的生态系统还不够成熟,工具链、第三方库、调试支持都远不如 Rust。对 Anthropic 来说,把 Bun 迁到 Rust,不只是为了秀代码迁移能力,而是让 Bun 站在一个更成熟、更容易招人、更容易维护的生态系统上。

那 19 个回归到底是什么样的?Anthropic 没有逐条列出,但我们可以猜个大概。可能是某个平台特定的行为变了,比如文件路径处理、信号处理、进程 fork 行为。也可能是性能退化,某个原本优化过的热路径在新代码里被改回了普通实现。最麻烦的通常是那些依赖未定义行为的代码,在原语言里碰巧能跑,到新语言里就崩了。

跨语言迁移是个特别麻烦的事。不同语言有自己的惯用法、标准库、社区习惯。Zig 的显式错误处理和 Rust 的 Result 类型看起来相似,但细节上天差地别。C 语言里常见的指针操作,到了 Rust 里要重新思考所有权。Python 的动态类型,迁移到 TypeScript 时要补齐类型声明。这些都不是简单的语法翻译,而是要在理解业务逻辑的基础上,做出成千上万个小决策。

如果 Agent 能在这些场景下帮到我们,那它的价值就远不止「写代码更快」。

传统重构工具一般只做语法转换,比如把一种循环改写成另一种,或者把回调改成 async/await。但 Agent 迁移不一样,它要理解模块边界、数据流、错误传播路径。它更像是一个初级工程师,能干活,但需要有人盯着。

如果要让我判断什么样的项目适合用 Agent 做迁移,我会给出三个条件,第一,测试覆盖足够;第二,业务逻辑相对稳定,没有大量正在迭代的需求;第三,团队里有人能看懂迁移前后的代码,并承担验收责任。三个条件缺一个,都别轻易试。

那对我们普通开发者有什么意义?

我觉得最直接的影响是,那些以维护为主、代码量巨大、但业务逻辑相对稳定的项目,终于有了被重构的可能性。以前大家觉得重写老代码成本太高,宁可堆补丁。一个 Spring 项目写了十年,没人敢动核心逻辑,因为动一下可能引发连锁反应。现在如果 Agent 能读懂旧代码、生成新代码、跑测试、定位回归,重构的门槛会被显著降低。

我自己主要做 Java 和 Spring 相关的项目,偶尔也会接触 LangGraph 和 AI Agent 的编排。看到这种大规模迁移的案例,第一反应不是兴奋,而是紧张。兴奋是因为终于有工具能处理那些我们不敢动的代码,紧张是因为我知道,一个迁移项目最难的部分从来不是翻译代码,而是保留那些没人写进文档的隐性知识。

但这个结论也不能太乐观。Claude Code 能完成迁移,有一个很重要的前提,Bun 有完整的测试覆盖。如果没有测试,Agent 根本不知道自己改对了没有。它可能会生成看起来正确的代码,但真正的业务语义是否被保留,没有人说得清楚。

而国内很多老项目的现状是,代码还在,测试早没了。有些项目甚至从来就没有过完整的测试。这种情况下,Agent 再强也只是闭着眼睛飞。它飞得很快,但你不知道它会撞到哪里。

还有一个问题值得我们警惕。Claude Code 能生成正确的代码,但它对系统架构的理解是否足够深?迁移代码和迁移架构是两回事。把 Zig 翻译成 Rust 相对容易,但在这个过程中,原有的设计假设是否还成立?Rust 的所有权模型是否会逼迫你做出完全不同的架构选择?这些都需要人来做判断。

Agent 擅长的是已知模式的应用,而不是未知问题的定义。它可以在已有框架内做得很好,但如果你问它「这个框架是不是该换了」,它往往给不出好答案。

我特别喜欢 Anthropic 描述这个项目时用的一个词,「实验」。他们没有说这就是未来软件工程的标准流程,而是诚实地把它当成一次实验。实验结果就是,能做,但贵,且有回归。

这个态度我觉得很关键。现在整个行业都在喊 AI 编程取代工程师,但真正在工程一线的人都知道,AI 目前还处在从「副驾驶」向「主驾驶」过渡的阶段。它能在某些场景下开得很快,但遇到复杂路况还是需要人接管。

前几天我跟一个做后端的朋友聊起这件事,他的第一反应是,那以后是不是不需要那么多 Java 工程师了?我说,如果你的工作是写 CRUD 接口,那确实会越来越容易被替代。但如果你的工作是判断一个系统该怎么拆、一个新的业务需求该用微服务还是单体、迁移后的系统能不能扛住双十一流量,那 AI 暂时还帮不上太多。

关键不是 AI 会不会取代你,而是你能不能把自己从「写代码的人」变成「定义问题的人」。

回到那个最吸引人的数据,编译时间从 8 分钟降到 2 秒。

这个数字本身就很魔幻。8 分钟,意味着你每次改完代码要等一首歌的时间才能知道结果。2 秒,意味着你可以把编译当成一个即时反馈。这种体验差异会改变工程师的工作节奏,甚至改变整个团队的开发文化。

但这种收益是 Rust 带来的,还是 Claude Code 带来的?严格来说是两者共同作用。如果没有 Claude Code,从 Zig 切到 Rust 这种工程量可能根本就不会启动。如果没有 Rust 的成熟工具链和性能优势,迁移后的收益也不会这么明显。

所以这件事真正的启示,不是某一种工具的胜利,而是人机协作模式在工程领域的可行性被进一步验证。当 Agent 能承担大量机械性、重复性、但高风险的工作时,工程师的角色会向上移动,从写代码的人变成定义问题、验证结果、判断架构的人。

这个转变不会一蹴而就。我甚至可以想象,未来会有一个新的岗位,叫「AI 迁移工程师」或者「代码迁移架构师」。他们不需要精通每一门语言,但需要懂工程风险、懂测试策略、懂如何验收 Agent 的输出。

对很多团队来说,眼下更现实的做法不是直接让 Agent 迁移整个代码库,而是从小范围开始。比如先让 Agent 帮你迁移一个独立的工具模块,或者把某个旧服务从 Java 8 升级到 Java 17。风险可控,收益可见,团队也能慢慢建立对 Agent 的信任。信任这东西很重要,因为它直接决定了你敢不敢把更大的任务交给 AI。

所以人始终要在循环里。不是说人要检查每一行代码,而是人要在关键节点做判断,目标是不是对的,验收标准是不是合理的,回归修复的方向是不是正确的。Agent 可以把 80% 的机械工作做完,但剩下 20% 的决策,价值往往超过 80%。

最后想说一点我自己的担忧。

Anthropic 是 Claude Code 的开发商,Bun 是自家工程师推动的项目。这种内部项目和外部的真实客户场景之间,往往有巨大的距离。内部项目可以承受 16.5 万美元的实验成本,可以容忍 19 个回归,客户项目不一定能。

而且,内部项目通常有更完整的上下文。工程师对代码库熟悉,知道哪里是雷区,哪里可以大胆改。外部客户拿出一个完全不熟悉的代码库让 Agent 迁移,结果可能会大不相同。

所以我对这件事的判断是,它证明了上限,但没有证明普及性。我们可能需要更多来自第三方、真实商业项目的案例,才能判断 Claude Code 的迁移能力到底有多可靠。

不过即便如此,两周迁移百万行代码这件事,还是把我震撼到了。不是因为结果有多完美,而是因为它让我们看到了一种可能性,也许未来的某一天,维护一个十年老项目,不再是一件让人头皮发麻的事。

那一天的到来,可能还需要一点时间。但这件事告诉我们,它已经不在科幻小说的范畴里了。

写到这里,我又想起开头那三个数字,14 天、100 万行代码、16.5 万美元。它们像是一个坐标,标出了 AI 编程目前能到达的位置。离终点还有距离,但方向已经清楚了。接下来我们要做的,不是等待一个完美的 AI,而是学会在有缺陷的当下,把它用到对的地方。