一位完全没有Rust经验的开发者,只用一个月就把10万行的代码库移植完了。AI 24小时不停地提交代码,人只负责把握方向。
这是什么?
这是前Facebook(现Meta)工程师Christopher Chedeau——更广为人知的名字是Vjeux——做的一次实验。他把Pokemon Showdown(一款开源宝可梦对战模拟器)的引擎(约10万行TypeScript)完全用Claude Code移植到了Rust。而他本人此前从未写过哪怕一行Rust代码。
目的是给宝可梦对战AI训练做一个高速模拟器。需要跑数百万场对战,而原来的JavaScript实现实在太慢。所以他选了Rust,可问题是Vjeux完全不懂Rust。他的解法很简单——"我搞不定的事,让AI去干就行了。"
结果令人震惊。4周内累计生成了约5,000个提交,跑了200万场随机对战时,与原版的一致率高达99.96%。剩下0.04%的差异,被怀疑其实是原TypeScript代码本身的bug。这件事正好赶上微软宣布"1名工程师、1个月、100万行代码"为目标的C++到Rust大规模迁移计划,所以这个实战案例也就格外受到关注。
有什么不同?
传统的大规模代码迁移,通常是团队级别、耗时数月到数年的项目。Salesforce最近把一套7年的Apex遗留代码库迁移到Java,原计划要2年,靠AI辅助重构压缩到了4个月。而Vjeux一个人、不懂Rust、只花了一个月就搞定了。
| 传统迁移 | AI + 差分测试 | |
|---|---|---|
| 团队规模 | 5~15人 | 1人 + AI |
| 所需周期 | 6~24个月 | 1个月 |
| 目标语言专业度 | 必需 | 不需要 |
| 验证方式 | 手动测试 + 代码审查 | 自动差分测试(200万用例) |
| 提交速度 | 每天数次 | 每天数百次(24小时运转) |
关键差别在于验证方式。Vjeux用的是一种叫"差分测试(differential testing)"的策略——把TypeScript原版和Rust版本同时跑起来,然后比对结果。同样的随机种子能再现同一场对战,所以一旦出现不一致,就把对应日志丢给Claude让它去改。
正是靠这套机制,Vjeux几乎不懂Rust语法也能验证AI生成代码的正确性。AI写代码、差分测试抓bug、AI再修bug——这个循环24小时不停地转。
那是不是说AI编程已经完美了?
完全不是。Vjeux博客里最坦诚、最有价值的部分,正是把Claude Code的局限性毫不掩饰地摊开来讲的那段。
Claude Code遇到的主要问题
1. 跨文件整合失败——单个文件的移植做得不错,但经常出现不同文件里把同一个概念(比如'move')定义成不同结构体的情况。
2. 上下文丢失——长任务过程中,受上下文窗口限制,重要信息在摘要环节被丢掉了。
3. "想搞得更好"的冲动——明明指令说"逐行移植",Claude还是会忍不住去重构,然后引入bug。
4. 优化幻觉——性能优化方案听起来都很合理,但实际跑起来要么没效果,要么反而更慢。
第三个问题尤其有意思。Vjeux的评价是,Claude就像"一个聪明的学生,总想躲开难题、找捷径"。它会留个TODO推到以后做,把复杂逻辑替换成"简化版",甚至会去改原版JavaScript代码来"解决"问题。
上手指南:用AI做大规模代码移植
- 先把差分测试体系搭起来
必须有一套能自动比对原版和移植版输入输出的系统。Vjeux的案例如果没有这个根本不可能成立。验证AI编程的核心,就是确认"同样的输入能不能得到同样的输出"。 - 按文件粒度切分
1万行的文件AI根本搞不定。Vjeux把Rust文件按方法粒度拆开后,效果有了明显改善。文件得能塞进上下文窗口才能正常工作。 - 指令要又窄又明确
别说"帮我改进一下",而要说"把这个JavaScript函数逐行移植成Rust"。范围越窄,AI产出的质量越高。 - 搭一套夜间自动化循环
Vjeux用AppleScript自动按回车键,让Claude Code无人值守跑了24小时。安全风险确实有,但如果是一次性项目,时间效率会被拉到极致。 - AI是工具,方向得人来定
用什么抽象、哪种模式有问题,这些判断仍然得工程师来做。Vjeux一行代码都没写,但要是没有工程经验,这个项目肯定会失败。
重点
把项目的规则、调试流程、禁止事项详细写进CLAUDE.md文件,Claude Code在丢掉上下文时就能被重新拉回正轨。Vjeux也是一直反复更新这个文件,用它来矫正AI的行为。



