17611538698
info@21cto.com

Ladybird 利用 AI 将 JS 编译器从 C++ 迁移至 Rust

动态 0 18 17小时前
图片

21CTO导读:Ladybird浏览器放弃使用 Swift编写,将借助大语言模型的帮助翻译成 C++语言。

Ladybird 浏览器创始人安德烈亚斯·克林(Andreas Kling)于23日宣布,他借助 AI 工具成功将 JavaScript 编译器代码从 C++ 重写为 Rust。

这一过程不仅验证了 AI 在处理复杂逻辑和系统级代码迁移方面的能力,也显著降低了重写底层组件的门槛。尽管开发者社区对 AI 编程的态度褒贬不一,但此举无疑证明了 AI 正从“代码补全工具”进化为“核心重构搭档”,深度重塑软件工程的未来工作流。

图片

Ladybird 项目是从零开始编写的一款现代级Web浏览器,包括其渲染引擎。这是一项艰巨的任务,目前这类项目,不论开源闭源都已经寥寥无几。除了少数小众工具外,所有主流浏览器都可以归为三大类:Mozilla 的 Firefox 是其中之一,它基于 Mozilla 自家的 Gecko 渲染引擎。另外两类浏览器彼此关联。在苹果操作系统上,Safari 基于苹果的 WebKit 引擎,该引擎最初是 2003 年 KDE 的 KHTML 的一个分支。在其他平台上,还有谷歌 Chrome,它使用谷歌十年后从 WebKit 分支出来的 Blink 引擎。

Ladybird 最初是 Serenity OS 项目的内置原生Web浏览器。18 个月后,Serenity OS 项目迎来了五周年,做为首席开发者的克林决定将浏览器剥离出来,作为一个独立的跨平台程序。

说起Serenity OS,它是一款全新的类 Unix 操作系统。与 Linux 或 BSD 不同,它使用 C++ 编写,这意味着 Ladybird 浏览器也是用 C++ 编写的。早在 2024 年,Kling就在 X 大会上宣布,该浏览器项目将改变方向,转而使用相对较新的 Swift 编程语言。苹果公司于 2014 年发布了 Swift,并在次年承诺Swift 2 将开源,从而实现完全跨平台。

此次,他的选择方式颇让人们有些意外。他选择使用基于 LLM 的代码助手将 C++ 代码翻译成 Rust,然后仔细检查生成的代码结构是否与原始代码一致,以及输出结果是否完全相同。之所以选择 Ladybird 里的 JavaScript 解释器,是因为它相对独立,各个阶段和输出都定义清晰,而且由于ECMAScript 测试套件的存在,它的测试覆盖率很高。

正如他谨慎解释的那样,这并非一次“氛围编码”练习:

“我使用 Claude Code 和 Codex 进行代码翻译。这是一个人工引导的过程,而非自动代码生成。我决定了要移植哪些内容、移植顺序以及 Rust 代码的格式。这需要数百条简短的提示,引导智能体完成必要的工作。初次翻译完成后,我进行了多轮对抗性代码审查,让不同的模型分析代码中的错误和不良模式。”

实玩的结果,很令我们印象深刻:

“从一开始的要求就是两个流水线输出完全相同的字节。最终生成了大约 25,000 行 Rust 代码,整个移植过程耗时约两周。同样的工作如果手动完成,需要几个月的时间。我们已经验证了 Rust 解析器生成的每个抽象语法树 (AST)都与 C++ 生成的完全相同,Rust 编译器生成的所有字节码也与 C++ 编译器的输出完全一致。所有方面均未出现任何回归问题。”

在 2024 年,我们就曾漫不经心地设想过,使用 LLM 将软件从一种语言翻译成另一种语言,以追求更高的安全性以及性能、代码大小和其他理想的特性。这几乎与“vibe coding”群体所奉行的放任自流、让机器人代劳的方法截然相反。

克林也指出,目前的输出结果并不完全符合Rust的编程习惯与风格,还需要进一步完善。

而且这并非该项目唯一的全新方向:

“这并非项目的主要重点。我们将继续使用 C++ 开发引擎,而将子系统移植到 Rust 将是一个长期进行的副项目。”

这是一个有意思的尝试。更有趣的是该项目还获得了 Cloudflare 的赞助,而 Cloudflare 一向对少数族裔浏览器不太友好,但却帮助了Ladybird,这也是对项目的某些技术或功能的赞许~

作者:洛逸

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信