Mistral 用 AI Agent 迁移 4 万行 Fortran 77 到 C++:老代码现代化的样板
Fortran 77 是什么概念?它是上世纪七十年代的编程语言,今天还在大量科研、气象、工程软件里跑。这些代码往往几十万行,没人敢动,因为谁也说不清每一行到底在算什么。
Mistral 最近复盘了一件事:他们用 AI Agent 把一个约 4 万行 Fortran 77 的项目迁移到了 C++。这不是"让 AI 写个新功能",而是把一堆年久失修的老代码,原样、可验证地搬进现代语言。这个过程很有参考价值。
为什么老代码迁移这么难
老代码迁移有三座大山:
- 没有测试。你改完不知道对不对,因为原项目压根没写过测试。
- 语义晦涩。Fortran 77 的写法、隐式类型、goto 满天飞,现代工程师看着头疼。
- 不能改行为。迁移要求"算出来的结果一样",而不是"看起来像"。一丝一毫的数值偏差,在科学计算里都可能是灾难。
过去这种活只能靠资深老手一行行啃,按人月计费,贵且慢。
Agent 在迁移里怎么干活
Mistral 的复盘里,Agent 承担的不是"一次性写对",而是"在验证循环里逐步逼近":
- 先把 Fortran 模块逐段翻译成 C++,保留原始结构和命名
- 用"差分测试"——同一份输入,分别在旧程序和新程序上跑,比对输出是否一致
- 哪里不一致,agent 就回到那段代码定位、修改、再比
- 把这种"翻译—比对—修正"的循环自动化,人只在关键架构决策上把关
关键不是 agent 多聪明,而是给它套了一个能自动判定"对没对"的闭环。没有这个闭环,agent 写得再漂亮也是裸奔。
对普通开发者的启发
你手里大概率也有这种"想动不敢动"的代码:十年前的脚本、接手没人懂的内部系统、某个只有离职同事碰过的服务。
Mistral 这次给的样板是:
- 先别急着改代码,先搭一个"比对原行为和改后行为"的验证环境——这是成败前提
- 把迁移拆成小模块,逐段过,而不是整体重写
- 让 agent 在"出错—定位—修复"的循环里转,人做验收
- 老项目最怕没有测试,补测试比补功能更急
老代码现代化过去因为太贵、太险,一直被搁置。Agent 把"贵"和"险"都吃掉了一部分,剩下的就是你愿不愿意开始。这或许是 AI 编码最实在的用途之一:让那些被遗忘、却还在默默跑着的系统,有机会活到今天。