Ladybird 浏览器放弃 Swift 转向 Rust,使用 Claude Code 和 Codex 在两周内完成 25000 行代码移植,实现字节级输出一致性和零测试回归,展示 AI 辅助大型代码库迁移的可行路径。
一个浏览器项目花了两年时间寻找 C++ 的替代品,先是搞了个自家语言 Jakt(没成),然后押宝 Swift(苹果生态限定版),最后发现还是 Rust 香。最骚的是,他们用 AI 两周干完了原本需要几个月的移植工作,而且零回归测试失败。这告诉我们一个道理:在技术选型这件事上,人类的本质就是复读机——只不过这次复读得特别快。
为什么 Ladybird 需要一场"中年危机"
Ladybird 这个浏览器项目,说白了就是 Andreas Kling 大佬的"中年危机"产物。这位老哥以前搞过 SerenityOS,一个从零开始写的操作系统,相当于程序员界的"我给自己造了个乐高城堡"。后来他觉得城堡里缺个浏览器,于是 Ladybird 诞生了。
但问题来了:C++ 这玩意儿就像你家的老式燃气灶,用是能用的,但随时可能漏气炸厨房。特别是对于浏览器这种天天要处理陌生人发来的代码的东西,内存安全不是锦上添花,是救命稻草。Kling 自己也说了,他们想要一个"内存安全"的语言,这需求直白得就像你妈让你找对象时的"人好就行"——听着简单,实则玄学。
Swift:一场注定分手的异地恋
2024 年的时候,Ladybird 团队评估过 Rust,然后拒绝了。为啥?因为 Rust 不擅长 C++ 那种面向对象编程(OOP)的风格。Web 平台的对象模型继承了一堆 90 年代的 OOP 遗产:垃圾回收、深度继承层级,这些东西跟 Rust 的所有权模型天生八字不合。
于是他们选了 Swift。对,就是那个苹果家的 Swift。Kling 当时的理由是:Swift 有 C++ 互操作性,语法现代,而且团队用起来爽。
但现实给了他们一记响亮的耳光。Swift 的 C++ 互操作性"永远差那么一口气",而且出了苹果生态,Swift 的支持基本等于"查无此人"。这就像你谈了个异地恋,对方说"我很好相处的",结果见面才发现人家只会在自家客厅里活动,出门就迷路。
更尴尬的是,Ladybird 宣布用 Swift 的时候,社区里一片"?"的表情。有人直接在评论区说:"Swift 跨平台?苹果自己都不信吧。"
Rust:兜兜转转还是你
一年后,Ladybird 团队回到了 Rust 的怀抱。这次的理由很务实:Rust 的生态系统比 Swift 成熟多了,而且很多贡献者本来就会 Rust。Firefox 和 Chromium 都已经开始往代码库里塞 Rust 了,Ladybird 觉得自己也不能落后。
但最精彩的部分不是这个决定本身,而是他们怎么执行的。
AI 翻译:从"人工智障"到"真香现场"
Kling 用了 Claude Code 和 Codex 来做代码翻译。注意,是"人类主导"的翻译,不是那种"AI 你随便写,写完了我直接部署"的自杀式操作。
具体怎么玩?几百个小提示(prompt),Kling 自己决定翻译什么、按什么顺序翻译、Rust 代码应该长什么样。翻译完之后,还要跑多轮"对抗性审查"——让不同的模型分析代码有没有错误和坏模式。
最狠的是他们的验收标准:字节级完全一致的输出。Rust 版本的解析器产生的每一个抽象语法树(AST)都必须和 C++ 版本一模一样,生成的字节码也必须完全一致。他们甚至搞了个"锁步模式"浏览网页,C++ 和 Rust 两个管道同时跑,验证每一份 JavaScript 的输出都相同。
结果?25000 行 Rust 代码,两周搞定。手工做的话,Kling 说需要"好几个月"。测试套件 52898 个 test262 测试,零回归。Ladybird 自己的 12461 个回归测试,零失败。性能测试,零退化。
这就像是:你请了个翻译,本来担心他会把"我爱你"翻成"你是个好人",结果人家不仅翻译准确,还帮你把语法错误都改好了,而且速度是你自己的十倍。
"翻译腔" Rust:先能跑,再好看
如果你去看这些 Rust 代码,会发现一股浓浓的"翻译腔"——因为它真的是从 C++ 翻译过来的。Kling 坦承,第一优先级的目标是兼容 C++ 管道,所以 Rust 代码故意模仿了 C++ 的寄存器分配模式,确保两个字节码生成器输出一致。
正确性是第二优先级。他们知道这代码不是地道的 Rust 风格,等 C++ 管道退役之后, cleanup 的工作会随之而来。但现在,能跑就是胜利。
评论区有个老哥说得特别好:"这种'翻译腔' Rust 作为起点完全没问题。你可以慢慢把它改得更地道,等 C++ 那边彻底凉了再说。Rust 编译器照样能帮你抓一堆内存错误,哪怕代码读起来有点怪——这就是 Rust 存在的意义。"
社区反应:从"AI 要取代程序员"到"AI 是高级搬砖工"
这篇文章在 Hacker News 上炸出了一堆精彩评论,完美展现了技术社区面对 AI 时的精神分裂状态。
一派是"AI 万能教":"Rust 是终极语言!无缺陷!类型完美!安全!人体工学!读起来美如画!AI 会写很多 Rust!'Rust 难写'的论点终于可以闭嘴了!"
然后 Rust 核心团队成员亲自下场打脸:"我是 Rust 上游开发者,这种 advocacy 对我们没帮助,实际上让我们的工作更难做。请把调子放低一点。"
另一派是"AI skeptic":"这代码是 AI 生成的垃圾,没人愿意跟这种不地道的 Rust 屎山一起工作。"
但更多人看到了中间地带:AI 在这里是"高级搬砖工",负责把 C++ 的砖搬到 Rust 的地基上,而架构设计、验收标准、质量把控,全是人类工程师的工作。这不是"AI 取代程序员",是"程序员用 AI 把自己从搬砖工作中解放出来"。
有个评论特别到位:"以前重构或重写整个项目的成本太高,以至于'顺便改进一下'成了说服老板同意迁移的唯一卖点。结果就是在追那些幽灵 bug 上浪费更多时间。现在有了 AI,纯移植可能成为常态。"
下一步:C++ 和 Rust 的"和平共处"
Ladybird 明确表示,Rust 不会成为项目的主要焦点。他们会继续在 C++ 中开发引擎,把子系统移植到 Rust 是一个会运行很长时间的"支线任务"。新的 Rust 代码会通过定义良好的互操作边界与现有的 C++ 代码共存。
他们想"深思熟虑地决定哪些部分被移植,以什么顺序移植",所以移植工作由核心团队管理。如果你想贡献移植代码,请先跟他们协调,"免得有人浪费时间在我们合并不了的东西上"。