Aioga
AI资讯 / 技巧观点
返回 AI资讯

Anthropic 用 Claude Code 大规模迁移代码:Bun 百万行 Zig 转 Rust,两周完成

Claude:Blog(网页)Aioga 编辑团队2026-07-15T16:00:00.000Z热度 65

Anthropic 工程师用 Claude Code 在两周内将 Bun 的百万行 Zig 代码迁移至 Rust,100% 现有测试通过,合并后出现 19 个回归问题已全部修复...

技巧观点Claude:Blog(网页)

今日 AI 情报摘要

Anthropic 工程师用 Claude Code 在两周内将 Bun 的百万行 Zig 代码迁移至 Rust,100% 现有测试通过,合并后出现 19 个回归问题已全部修复。

另一工程师用周末将 Python 代码库迁移至 16.5 万行 TypeScript。 迁移消耗约 16.5 万美元 API 成本,但编译时间从八分钟降至两秒,二进制启动快 6 倍。

中文正文 · AI 翻译

使用 AI 代理进行大型代码迁移的逐步指南 —— 包括 Bun 的百万行 Zig 到 Rust 的移植。

Anthropic 用 Claude Code 大规模迁移代码:Bun 百万行 Zig 转 Rust,两周完成

代码迁移,即将生产代码库迁移到新语言的项目,直到最近仍然是多年的工作。

在过去一个月里,Anthropic 的独立开发者使用 Claude Fable 5、Claude Opus 4.8 以及动态工作流程迁移了 10 个代码包,总计数十万到数十万行代码:https://claude.com/blog/introducing-dynamic-workflows-in-claude-code。在本文中,我们将介绍两个示例以及这些项目的最佳实践。

Bun 的联合创始人以及 Anthropic 技术员工 Jarred Sumner 使用 Claude Code 将 Bun 从 Zig 迁移到 Rust:https://bun.com/blog/bun-in-rust。不到两周的时间就生成了百万行代码,在合并前 Bun 现有的测试套件在 CI 中全部通过。合并后出现了 19 个回归问题,目前全部已修复。Rust 版本在 6 月通过 Claude Code 发布。

Anthropic Labs 的联合负责人 Mike Krieger 在一个周末将一个 Python 代码库迁移到 165,000 行的 TypeScript。这包括数百个代理、八个阶段门、三轮对抗性审查,以及最后一次比对检查,将每条命令的输出与原 Python 版本进行差异对比。

Claude Code 的新功能改变了这些长期拖延项目的计算方式。下面是我们现在使用的六步流程,总结自这些迁移项目的经验。

核心见解是你不修复代码,而是修复生成代码的过程(循环)。

在直接讨论如何做之前,值得讨论一下何时以及为什么,因为这些项目的假设已发生变化。

团队发起迁移是因为从初始构建到当前项目之间的环境发生了变化。要么已知的权衡变得受限,要么出现了更好的方法,或者原来的生态系统正在萎缩。

例如,Jarred 最初选择 Zig 是因为它提供了 C 级性能并且极其简洁,非常适合一个创始人在没有 LLM 帮助的情况下“在奥克兰狭小公寓中用一年时间编写 Bun”。这种简洁性伴随着已知的权衡,他在这里进行了说明:https://bun.com/blog/bun-in-rust#just-be-really-smart-and-don-t-make-mistakes.

快进到2026年。Bun 的 CLI 每月下载量超过 1000 万次,并在 Claude Code 中被广泛使用。

就在上个季度,这些权衡可能还不足以证明冻结路线图并投入资源进行一个多季度项目是合理的。迁移语言可以带来更小、更快、更安全的系统,但没有人愿意为此付费。

软件工程师还必须应对这些曾经的超大型项目固有的职业风险。你可能需要维持两个平行的代码库几个月甚至几年,如果最终结果只有 90% 的一致性,你会比开始时面临更多的麻烦。

现在,最坏的情况就是删除分支然后重新尝试。

仍然需要有合理的商业案例。虽然百万行级别的迁移不再需要在四年项目周期内花费 300 万到 400 万美元的工程资源,但执行仍然需要花费数万到数十万美元甚至更多。例如,Bun 的迁移消耗了 59 亿未缓存输入令牌和 6.9 亿输出令牌——按 API 定价约为 16.5 万美元。Mike 的迁移的主要部分是 2700 万令牌。

Anthropic 用 Claude Code 大规模迁移代码:Bun 百万行 Zig 转 Rust,两周完成

然而,迁移案例不再需要是生死攸关的。一年的内存错误修补记录,或一个长期存在的瓶颈,现在就足以证明迁移的合理性。

编译步骤是 Mike 项目的动力。他团队使用的内部工具作为单个二进制文件发布给用户。使用 Python 工具链生成该二进制文件每个平台大约需要八分钟,总计在每次发布的构建矩阵上等待 30 分钟。迁移后,同样的编译现在大约只需两秒,二进制启动速度提高了 6 倍,团队还能够淘汰一个单独的部署流水线。

Claude Fable 5 是我们最强大、可广泛使用的模型。Fable 和 Opus 4.8 在分配、指导、验证基于子代理的并行工作流方面表现尤为出色,同时能够找到多个方式实现既定目标。

大型代码迁移是这些高级模型特别有效的使用场景,因为:

正如我们下面将看到的,Mike 和 Jarred 在迁移过程中关键步骤都使用了 Fable,特别是在使用多模型类来优化令牌消耗的 advisory 模式中。

下面的过程已经被泛化,以适用于多种语言和场景。欲了解更多详情,你可以阅读 Jarred 的博客:https://bun.com/blog/bun-in-rust。

在开始迁移项目之前的先决条件是必须有一个强大的评判机制,否则你将没有退出条件或成功衡量标准。

评判者必须能够在相同条件下评估原始代码和目标代码。原语言编写的测试套件通常依赖于目标代码中不存在的内部函数。

Jarred 有一个用第三种语言(TypeScript)编写的大型测试套件,但大多数项目并非如此。对于他的 Python 到 TypeScript 移植项目,Mike 创建了一个包含七个真实场景的对等测试框架,并将任何行为变化都视为需要修复的漏洞。

在进入每个阶段之前,这张图表可能有助于你跟随理解。这主要遵循 Jarred 的方法论,每个阶段都有评审和关卡。Mike 也遵循了类似的整体结构,使用类似的循环工作流,但他从头到尾运行了整个迁移,基于结果修改规则和工作流,然后再次运行——每次丢弃输出,直到第三次运行。

Anthropic 用 Claude Code 大规模迁移代码:Bun 百万行 Zig 转 Rust,两周完成
Anthropic 用 Claude Code 大规模迁移代码:Bun 百万行 Zig 转 Rust,两周完成

在这一阶段,我们正在创建迁移的基础:一份代码需要重构而不仅仅是翻译的地点清单,一本代码翻译规则手册,以及一张依赖关系图,用来安排迁移实施流程。

顺序很重要:规则手册必须在差距清单之前。差距清单是由规则手册的默认设置无法涵盖的部分定义的,这两项将在联合审核中一起测试。

规则手册的具体形式:https://github.com/anthropics/code-migration-kit-with-claude-code/blob/main/templates/RULEBOOK.md 取决于你在开始时必须做的关键架构决策。其中最重要的是,新代码是否会沿用相同结构,还是会完全重新设计。

如果是前者(Jarred),规则书主要是查找表,将不同语言之间的类型和习语进行转换,同时指向更难翻译组件的差距清单。如果是后者(Mike),它将是一个设计文档。

Jarred通过与Claude聊天创建了他的规则书,为每个模糊的区域制定策略。他还使用了八个专门设计的子代理,针对他直觉中常见失败模式的八个不同类别进行检查。

你需要了解文件依赖关系,以便有效地拆分工作流以进行并行迁移,这样你就知道哪些文件应首先迁移,哪些文件应包含在同一批次中。一些语言和代码库有明确的清单,使此操作变得容易,但对于遗留代码库和许多流行语言如C/C++和Python,这些依赖关系需要被发现和映射。

Claude Code可以部署代理来创建并运行确定性脚本以生成此映射。迁移工具包中的提示:https://github.com/anthropics/code-migration-kit-with-claude-code/blob/main/prompts/01-dependency-map.md 使用一个工作流来创建审查和修正循环。注意:启动套件是本文概述过程的通用模板——并不是这些特定迁移所使用的工具。

新语言有不同于旧语言的要求,必须满足这些要求。对于Zig到Rust的迁移,差异在于手动内存管理(C和C++的工作方式相同)。例如:

对于Python到TypeScript的迁移,差距在于接口和合同。Python不要求声明接受何种形状的对象或返回什么,但TypeScript则要求。例如:

Jarred和Mike都创建了捕获这种隐含知识的差距清单文件。Jarred预先盘点了这些差距,这也是我们在此处所做的,而Mike选择先翻译,再通过审核创建差距清单。你可能需要两者兼做。

查看这个Claude Code示例提示以创建差距清单文件:https://github.com/anthropics/code-migration-kit-with-claude-code/blob/main/prompts/02-gap-inventory.md。

Anthropic 用 Claude Code 大规模迁移代码:Bun 百万行 Zig 转 Rust,两周完成

这一步涉及一个迷你迁移,作为更大规模迁移的“试航”。

在这一步中,Jarred 使用一个代理通过规则书翻译三个文件,另一个代理以“高级 Rust 工程师”的方式翻译三个文件,还有一个代理使用差异创建新的翻译规则。在这个阶段,他发现了两个关键问题,如果扩展到所有 1,448 个文件,可能会造成大量问题。

提示可能类似于这个:https://github.com/anthropics/code-migration-kit-with-claude-code/blob/main/prompts/03-stress-test.md。

这种类型的压力测试仅适用于结构保持迁移,其中同一个文件的两种翻译可以逐行比较。如果你的规则书是重新设计——像 Mike 的那样——等价的测试方法是用对抗性的评审直接攻击设计文档,然后通过一次可丢弃的端到端运行进行验证。

无论如何,请丢弃任何已经翻译的文件。目标是优化规则,而不是取得渐进性的进展。

在接下来的步骤中,你将运行相同的多代理循环架构:实现、审查和修复。

你可以将实现者的工作卸载给较小的模型,同时让评审者使用较大的模型。例如,Mike 在主迁移过程中扩展 12 个子代理时使用了 Claude Sonnet。

工作队列应当是机械化的。批处理脚本通过检查磁盘上是否存在已翻译文件来决定已完成的任务,然后将待处理文件切分为实现者代理的批次。因为队列每次都是从磁盘重建的,所以迁移从设计上是可恢复的。

在这一阶段,代理可能对执行工作量过于谨慎。解决方法可以是一个直接、有力的提示指令,并附带上下文,让编译器在下一步捕捉错误。

任何翻译者不能自信执行的事项都会被标记为 // TODO(port):在步骤 4 中处理。从此以后,代办列表会自动生成:编译器列出错误,烟雾测试发现崩溃,测试套件报告失败。

两个对立的审阅者使用不同的上下文来评估实现者的工作,如果审阅者之间有分歧,则交给第三个代理处理。当一个审阅者在多个文件中反复发现同样的错误时,修复不是按文件进行的。你在规则书中添加一句话,然后重新生成受影响的批次。通过这一步,规则书持续增长;代码从未针对它进行手工修补。

在此步骤中需要注意的一个重要设计决策是编译器的位置。Mike 在每个循环中运行 TypeScript 编译器,因为它可以在几秒钟内检查一个单元。Jarred 完全禁止在循环中调用编译器,而将其推迟到下一步,因为 cargo 需要几分钟。

此步骤中,大部分繁重的工作已经完成,提示语开始变得更短。:https://github.com/anthropics/code-migration-kit-with-claude-code/blob/main/prompts/04-translation-kickoff.md

这三个步骤共享相同的循环架构,并且需要逐渐减少人的判断,因此我们一起介绍它们。

例如,第 4 步可能经常根据迁移的语言和规模而演变成第 3 步。

根据编译器步骤的规模和难度,代理可能根本不运行这一阶段。Jarred 使用一个编排脚本执行此步骤,该脚本在整个工作区只调用一次编译器。“修复代理”然后与对立审查一起并行处理错误列表。然后再次运行构建,反复如此。

查看错误列表有助于捕捉可能需要调整的系统性问题。例如,Jarred 在修复 Zig 的惰性编译可以容忍的循环导入后,遇到了成千上万的 Rust 模块错误。他通过编码逻辑来分类哪些依赖需要删除、移动或重构边界,从而修复了循环。

第 5 步同样有一个类似于编译器错误列表的机械事实来源:冒烟测试崩溃。同样,循环修复是将问题分组,在此案例中按根本原因分组,由对立子代理进行审查。

第 6 步,也是我们故事的结尾,是比较两个代码库中的程序行为。

我们的文件现在已经被翻译、编译并进行了冒烟测试。现在是时候将它们分片并对它们运行测试套件(来自前置阶段)。使用“修复代理”处理失败,这些代理会对比两个代码库来审查失败的测试。对抗性审查员会检查他们的修复。

这个循环的下一阶段是构建守护进程:https://github.com/anthropics/code-migration-kit-with-claude-code/blob/main/scripts/build_daemon.sh,这是唯一被允许重建二进制文件的进程。修复者编写补丁;守护进程将它们批处理,重建一次,重新运行受影响的测试,并反馈结果。这将最昂贵的操作串行化,而不是让多个代理独立触发它。

当同一个失败在许多测试中重复出现时,修复会向上游移动:你修改导致错误的规则,并只重新生成该规则触及的文件。

Mike的方法在这里很重要,因为许多开发者没有完整或移植的测试套件。Mike让Claude创建了一个小脚本,对新的移植版本和原始Python代码库运行7个真实场景,并对结果进行差异对比。每个失败的场景都有自己的修复代理,循环运行直到七个场景全部通过。

然后他更进一步。Claude设计了自己的端到端测试套件,并在整夜运行时自动修复出错部分,并连续四个晚上重新运行。因此,它捕捉到了任何场景列表都无法预测的细微问题。

情报判断

Aioga 编辑摘要

Anthropic 工程师借助 Claude Code,在不到两周内完成 Bun 从 Zig 到 Rust 的迁移并产出百万行代码;合并前现有测试全部通过,合并后发现的 19 个回归问题也已修复。

背景分析

公开材料称,代码库跨语言迁移过去往往需要多年。Anthropic 最近一个月由个人开发者迁移了 10 个代码包,并从相关项目中总结出包含阶段门、对抗审查和最终一致性检查的流程。

Aioga 观点

Aioga 判断,这些案例的重点并非证明智能体可无监督地替代迁移团队,而是表明将测试、阶段门和输出比对嵌入流程后,AI 可能显著压缩大型迁移项目的执行周期。

影响与后续

材料显示,该迁移约消耗 16.5 万美元 API 成本,同时编译时间从八分钟降至两秒,二进制启动速度提升至原来的 6 倍。值得关注的是,合并前测试全过仍未阻止 19 个回归问题出现。 值得关注后续是否披露更完整的成本构成、回归类型、人工投入及长期维护数据。计划采用类似方法的团队可先建立行为基线,并设置分阶段验收、对抗审查和逐项输出一致性检查。

来源与版权说明

本页正文由公开来源页面提取并按原有信息整理,同时保留来源、发布时间和原文入口。版权归原作者及来源网站所有,请通过原文链接核验和阅读来源版本。

抓取通道: 摘要聚合 · 原始域名: claude.com

来源: Claude:Blog(网页)

原文链接: 打开原始来源

Aioga 归档: 查看情报页

Content record: source-page · Updated: 2026-07-15T16:00:00.000Z

API 中转站
API RELAY · DEVELOPER INFRASTRUCTURE

API 中转站

统一接入主流 AI 模型 API,为开发、测试与生产环境提供稳定调用入口。

立即访问 api.w173.com
AIOGA SHARE POSTER

分享这篇 AI 情报

Anthropic 工程师用 Claude Code 在两周内将 Bun 的百万行 Zig 代码迁移至 Rust,100% 现有测试通过,合并后出现 19 个回归问题已全部修复...

Claude:Blog(网页)2026-07-15T16:00:00.000Z
扫码打开文章详情扫码直达文章详情

Aioga 自动聚合全球 AI 动态,并保留来源信息用于核验与引用。