← 返回内容列表

不懂 Rust 的开发者用 AI 重写 PHP 引擎:Phargo 通过 17.4% 测试并运行 WordPress

不懂 Rust 的开发者用 AI 重写 PHP 引擎:Phargo 通过 17.4% 测试并运行 WordPress

一位不会 Rust 的开发者用 AI Agent 从零编写了一个 Rust 实现的 PHP 解释器 Phargo,通过了 PHP 上游 22,000 个测试中的 17.4%,甚至成功运行了 WordPress。其方法论核心是:用外部测试套件作为不可贿赂的验证者。

一位自称"不懂 Rust、没写过词法分析器、无法解释 tree-walking evaluator"的开发者,用 AI 创建了一个名为 Phargo 的项目——用 Rust 从零实现了 PHP 解释器,通过了上游测试套件的 17.4%,甚至成功渲染了 WordPress 页面。

核心方法论:不让 AI 给自己打分

这个实验的核心设计原则是:用别人写的测试来验证 AI 的输出。PHP 上游有约 22,000 个 .phpt 测试文件,由 PHP 内部团队在 30 年间编写,覆盖从 DateTime 夏令时计算到 var_dump() 浮点数输出格式的每一个细节。

图1:PHP测试套件通过率

图1:Phargo 的 PHP 测试套件通过率从 0 攀升至 17.4%

这些测试不是 AI 写的,不是作者写的,不可被讨好、谈判或用更好的 prompt 改善心情。要么 bug40261.phpt 通过,要么不通过。当前成绩:3,844 / 22,037 = 17.4%。考虑到约 40-45% 的测试涉及 C 扩展(GD、curl、SOAP 等)不在范围内,实际可用范围内的通过率更高。

开发循环极其精简

作者作为人类的贡献"大约就是瞄准"。AI 写代码,作者指向目标,读返回结果"像中世纪国王审视海图——严肃点头,零理解",然后输入现代软件开发中最强大的短语:"looks good, continue."

图2:AI编程工作流

图2:AI 编程工作流——人类瞄准,AI 写码,测试套件验证

循环如下:AI 运行失败直方图找到最大可修复集群 → 实现 → 运行 22,000 测试(约 7 分钟风扇噪音)→ 数字上升则提交,下降则说"hmm, that regressed, look again"。

测量你的测量工具

项目早期,通过率在明显简单的测试类别上停滞。失败 diff 与预期输出看起来完全相同——就像在"找不同"游戏中盯着两张一模一样的照片。

差异是看不见的,因为它是字面上看不见的:回车符。测试集在 Windows 上以 CRLF 行尾检出,而测试比较器逐字节比较。PHP 自己的测试运行器在比较前会规范化行尾,而 Phargo 的不会。一行规范化代码——数百个测试瞬间翻绿。

教训刻在了项目里:你的 oracle 只有连接你的管道和它一样诚实。此后每个可疑的停滞都会先问同一个问题——是引擎错了,还是测试运行器在撒谎?

"波特金内置函数"——存在的假象

测试套件无情地揭露了一类最喜欢的 bug:存在、能解析、运行不报错,但什么都不做的功能:

  • clone ——解析正常,求值为 NULL,所有 DateTimeImmutable 测试从一开始就静默失败
  • unset(arr[arr[key]) ——完全 no-op,键值纹丝不动
  • trim(str,str,charlist) ——从项目开始就忽略 charlist 参数
  • spl_autoload_register() ——接受你的自动加载器,微笑着,从不调用
  • catch (\Throwable) ——什么也匹配不到

这些 bug 每一个都能在 demo 中存活,在代码审查中被一个不懂 Rust 的人(作者自己)错过。但没有一个能在 22,000 个测试的考验中存活。

最终成就:WordPress

wp-load.php 基础引导就耗费了一系列阻塞链——goto(WordPress 的 HTML 解析器使用 goto)、str_replace 的引用参数 $count、正则字符类中的 \xNN 转义、function_exists() 对半数内置函数的盲区。

然后一个晚上:wp_install() 完成,管理员用户创建,选项表填充,三篇文章存入 SQLite。首页渲染——真实主题、真实文章、真实永久链接。/wp-admin/ 仪表盘也正常渲染。目前速度约为 PHP 原版的 55 倍慢(7.1s vs 126ms),但新的字节码 VM 已在微基准中达到 PHP 8.5 的 1-3 倍。

关联推荐

评论 (0)

加载评论中…

不懂 Rust 的开发者用 AI 重写 PHP 引擎:Phargo 通过 17.4% 测试并运行 WordPress | 必学必会