谁能想到,那个曾公开嫌弃Rust"社区有毒"、转头拥抱Swift的浏览器项目Ladybird,这么快就"真香"了。
更让人大跌眼镜的是,这次倒戈不仅是一次简单的技术选型,更是一场AI驱动下的极速实验:
25000行代码,两周时间,零回退。
这在以前,可是几个月甚至半年的工作量。
从Swift到Rust,一场务实的"背叛"
老实讲,Ladybird这次的选择,多少有点"打脸"的意思。
就在去年,创始人Andreas Kling还在评估后拒绝了Rust。
理由很硬核:Rust不擅长C++风格的面相对象编程(OOP)。
浏览器的对象模型继承自上世纪90年代的设计,垃圾回收、深度继承层级,这些跟Rust的所有权模型天生八字不合。
那时候,他们更看好Swift。
但仅仅一年,风向全变了。Swift的C++互操作性迟迟不到位,出了苹果生态更是举步维艰。反观Rust,Firefox在用,Chromium也在用,生态系统成熟得不像话。
这是一个务实的选择。Rust有我们需要的生态和安全保证。
Kling在公告里写得很直白。虽然OOP的问题还在,但与其继续在Swift的坑里空转,不如拥抱Rust的成熟生态。哪怕这意味着要跟曾经嫌弃的语言"和解"。
AI当打手,人类做监工
这波操作最让我感兴趣的,不是语言之争,而是他们怎么重写的。
全程AI辅助。
Kling直接动用了Claude Code和Codex,但他强调这不是无人驾驶,而是人类掌舵。
他决定移植什么、按什么顺序、代码长什么样,然后向AI发出几百个细碎的指令。AI负责干脏活累活,他负责把控方向。
更有意思的是审查环节。翻译完初稿后,Kling又让不同的AI模型进行"对抗性审查",互相找茬,分析错误和坏模式。
这事儿在评论区引发了巨大争议。有人直言:"让AI查AI,这能查出深层的逻辑错误吗?它顶多能找出点明显的安全漏洞模式。"
说实话,这种担忧不无道理。把代码审查权交给大模型,多少有点让罪犯当法官的既视感。但从结果看,Kling赌赢了。
"翻译腔"代码
既然是重写,最怕的就是"新瓶装旧酒"或者"改着改着把逻辑改崩了"。
Ladybird定了一个变态的硬指标:逐字节一致(Byte-for-byte identical)。
不管是Rust版还是C++版,生成的抽象语法树(AST)必须一模一样,生成的字节码也必须一模一样。甚至,Rust代码故意模仿C++的寄存器分配模式。
这导致了一个有趣的现象:这2.5万行Rust代码,有一股浓浓的"翻译腔"。
如果你是Rust老手,看这代码可能会难受。它不是地道的Rust(Idiomatic Rust),它就是披着Rust皮的C++。
但这恰恰是高明之处。
评论区有人点破了天机:这是最聪明的做法。太多的重写项目死在"顺手改进"上。开发者忍不住想优化,结果旧bug没修完,新bug一大堆,行为差异搞得人心力交瘁。
Ladybird直接锁死行为一致性,先跑起来,再谈优化。正如Kling所说:清理工作以后会有,但现在,兼容性是第一位。
双轨并行
虽然Rust进来了,但Ladybird并没有打算全面停用C++。
这又是一个引发争议的点。
Kling表示,C++依然是主力,Rust移植只是一个长期的支线任务。新代码会通过互操作边界与旧代码共存。
有人觉得这是在做双倍工,甚至有人担心这会带来严重的技术债。"非地道的Rust代码以后怎么维护?这难道不是另一个完全重写的开始?"
个人觉得,这种担忧有点过度了。
对于一个还在快速迭代的项目来说,这种渐进式的替换,远比推倒重来要稳妥得多。
毕竟,浏览器引擎这种庞然大物,没有哪家是能一口气吃成胖子的。
甚至有评论犀利指出,Kling不仅是好工程师,更是个好"创业者"。从Jakt到Swift再到Rust,每一次技术栈的摇摆,都精准踩在了流量和关注点上。这次AI加持的重写,更是让Ladybird在开源圈刷足了存在感。
不管是有意还是无意,Ladybird确实赢了。
结语
从嫌弃到真香,从手动编码到AI辅助,Ladybird这波操作给整个行业打了个样。
测试套件52,898项全部通过,0回退,这成绩单确实漂亮。但"翻译腔"的Rust代码到底能走多远?AI审查真的能守住安全底线吗?
这事儿,可能还得让子弹再飞一会儿。
参考链接:
https://ladybird.org/posts/adopting-rust/