Anthropic 公开代码迁移六步法:Bun 百万行两周从 Zig 搬到 Rust
- 把一个跑在生产环境的代码库整体换语言,行业口径是四年、三四百万美元、还很可能搬一半卡死;Anthropic 的人过去一个月搬完了 10 个代码包,Bun 那次一百万行、不到两周、合并前原有测试全绿
- 整套方法的核心是一句话:不要去修代码,要去修那个生产代码的循环。同一个错在几十个文件里反复出现,正确动作是往规则手册加一句话然后整批重跑,不是一个文件一个文件改
- 动手之前必须先造一个裁判:把原有测试里能同时跑在新旧两边的挑出来改写成断言,再拿故意改坏的代码验一遍,抓不出坏的裁判不算裁判,没有它你就没有「什么时候算搬完」的判定
- 工程细节可以直接抄:工作队列每次从磁盘重算所以断了能续,实现用小模型、评审用大模型,两个评审各自独立上下文、吵起来交第三个 Agent 裁决,翻不动的地方统一打 // TODO(port) 留到后面
- 代价和收益都有账:Bun 那次 59 亿未缓存输入 token + 6.9 亿输出 token,按 API 价约 16.5 万美元;Mike Krieger 那个项目搬完后编译从 8 分钟变约 2 秒,程序启动快 6 倍,还砍掉一整条部署流水线
一个月搬了十个代码包
一百万行代码换一种语言,两周搬完,合并前原有的整套测试在 CI 里全绿。
这是 Anthropic 官方账号 ClaudeDevs 发的一篇实操文,讲他们内部这一个月怎么用 Claude Code 做代码迁移,把一个跑在生产环境的代码库,整体搬到另一种语言上。它把整套流程连同模板一起摊开给人抄,用的是 Claude Fable 5、Claude Opus 4.8 和 Claude Code 的 dynamic workflows。
过去一个月,Anthropic 的开发者搬完了 10 个代码包,规模从几万行到几十万行。文里只展开了其中两个。
做 Bun 迁移的是 Jarred Sumner,Bun 的联合创始人,现在是 Anthropic 的技术员工。做 Python 那个的是 Mike Krieger,Instagram 联合创始人,现在是 Anthropic Labs 的联合负责人。
以前为什么没人敢干
Jarred 当初选 Zig,是因为它能给到 C 那个级别的性能,同时足够简单,用他自己的话说,那是在奥克兰一间狭小公寓里、还没有大模型的年代,一个人花一年写出 Bun 的前提。简单是有代价的,代价一直摆在那儿。Bun 的命令行工具现在月下载量超过一千万,Claude Code 内部也在大量用它。
就在上个季度,这些代价还不足以让人冻结路线图、把资源押进一个跨好几个季度的项目。
- 四年周期,300 到 400 万美元的工程资源
- 期间路线图冻结
- 两套代码库并行维护好几个季度甚至几年
- 最差结果是拿到 90% 的相似度,比开工前更麻烦
- 几万到几十万美元量级,仍然是真钱
- 最差结果是删掉分支,重来一次
- 动手理由不再需要「不搬就活不下去」
- changelog 里躺了一年的内存 bug 补丁,或者一个长期卡脖子的瓶颈,就够了
Mike 的项目就是被一个瓶颈逼出来的。他团队做的那个内部工具要打包成单个可执行文件发给用户,Python 那套工具链每个平台编译要八分钟左右,整个构建矩阵跑完,每次发版都得等三十分钟。搬到 TypeScript 之后,同样的编译约两秒,可执行文件启动快 6 倍,团队顺手退役了一整条独立的部署流水线。
同一个错反复出现,就去改规则
整篇文章最值钱的是这一句:
The core insight is that you don't fix the code. You fix the process (loop) that produced the code.核心认识是:你不要去修代码,你要去修那个生产代码的流程(循环) · ClaudeDevs
它落到具体动作上是这样的:一个评审 Agent 在几十个文件里反复抓到同一个错,你的手不该伸向那几十个文件。你往规则手册里加一句话,然后把受影响的那一批重新生成一遍。规则手册在整个过程里只会越长越厚,代码从来不被手工打补丁去迎合它。