
2026/07/05 6:35
Rust で構築した自前製 AI PHP エンジンが PHP ソースコードのテストの 17%をパスし、WordPress を動作させることに成功しました
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Phargo は、AI が既存の Rust の経験もなく、PHP のソースコードも持たずから Scratch で複雑な PHP インタプリタを Rust で構築した画期的なプロジェクトです。「Radical Honesty(徹底的な正直さ)」に則り、開発者は AI による自己評価ではなく、22,000 個を超えるファイルを含む PHP の大規模テストスイートを外部のオラクルとして活用しています。現時点で約 17.4% のテストが合格しており(3,844/22,037)、GD や MySQL ドライバーなどの C エクスパンションを考慮すれば、その現実的な上限は概ね 40–45% と予測されています。初期段階での重大な問題として、行末の不一致(CRLF vs LF)や多数の「ポテムキン」機能(解析は可能だが実装上で機能しないもの)が特定され、反復的なテストを通じて修正されています。具体例としては、
clone が NULL を返し、DateTimeImmutable に数学的エラーがあり、オートローディングが破損しているなどが挙げられます。リソース枯渇を防ぐための安全装置として、6 GiB というグローバルアロケーターの上限、無限ループを防止するためのステップ制限、出力長上限などが実装されています。特定のブロック(HTML パーサー内の goto 使用や preg_split のフラグ処理など)を修正した後、Phargo は WordPress との機能的な統合を達成しました。現状では全ページの WordPress パフォーマンスは標準的な PHP の約 55 倍遅くなっていますが(7.1 秒対 126 ミリ秒)、ベースとなるバイトコード仮想マシンのマイクロベンチマークではすでに PHP 8.5 より 1–3 倍高速化が見られ、将来的には全ページのパフォーマンス向上を目標としており、その実現に向けて努力が続けられています。Phargo は、厳格な外部検証によって導かれることで AI が新しい言語で堅牢なシステムを生み出すことを示しており、「連続的なテストが機能の幻覚を防ぐ」という開発のパラダイムを検証する可能性を示唆しています。本文
Phargo: Rust からのゼロスクラッチで実装された PHP インタプリタの実験
数日前、容量わずか 26 KB の WordPress フロントページをターミナルで確認した。「Hello world!"とSQLite データベースから読み込まれ、綺麗に閉じられた HTML。その生成元である PHP エンジンのソースコードには、PHP 処理系のロジックがゼロ行も含まれていない。これは完全に Scratch から書き上げられた Rust で実装されたインタプリタ「Phargo」によるものだ。
著者は Rust を知らず、 Lexer も未経験だが、「木を渡る評価機」というコンセプトを追い、AI が書いたコードを監査する役割(狙う)を果たしている。本記事は、その開発プロセスと「Radical Honesty(徹底した正直さ)」という理念について綴られた実験レポートである。
1. Radical Honesty: 不可逆なテストスイートとの戦い
現代では AI でプロジェクトを作ることは容易だが、「動く」と言っても誰にとっての動作か不明確になりがちだ。このプロジェクトが採用したのは、**Bun チームから学び取った「AI に自分で点数を付けさせない」**というアプローチである。
PHP には 30 年にわたって作成された約 22,000 の
ファイルで構成される標準テストスイートが存在する。これらは AI や著者ではなく、言語の「呪われた角々」をコード化している。**オラクル(神託)**と呼ばれるこのスイートを、すべてパスすることが目標である。.phpt
スコア状況
- 現在のスコア: 22,037 件中 3,844 件がパス(約 17.4%)。
- 実質的な上限: 約 40〜45%。GD や C エクステンション等のテストは含まれていない。
- トレンド: ゼロからのスタートでありながら、上昇トレンドを確認中。
著者の作業ループ
AI との協業フローは以下の通り極めてシンプルだ:
- AI が全コーパスで失敗ヒストグラムを実行し、修正可能な最大のクラスタを発見する。
- 機能を実装する。
- テスト数約 22,000 を含むスコアボードを走査(ファン音が鳴るほど長時間かかる)。
- 数字が増えたら: コミットしてプッシュし、繰り返す。
- 数字が減ったら: 「後退したね、再確認」で工程に戻る。
2. オラクルには賄賂は効かない:ハルネスの罠
当初、パス率が不自然に停滞していた時期がある。これは単純なロジックエラーではなく、**「目に見えない改行コードの違い」**によるものだった。
CRLF との対戦
- 原因: テストコーパスが Windows 由来のため
(改行コード付き)で記録されているが、スコアボードはバイト単位の厳密な比較を行い、標準ランナーの正規化処理を無視していた。CRLF - 結果: 文字列の違いだけでマルチラインテストが無言で失敗し続けた。
- 解決策: 一行のコードで出力を正規化(
を\r\n
に置き換えるなど)するロジックを追加した。これにより数百件のテストが瞬時にグリーンに変化した。\n
教訓
「自分の測定方法を再確認せよ」 オラクルは誠実だが、それを支えるインフラ(ハルネス)に嘘が含まれていれば意味がない。「エンジンが間違っているのか、それともスコアボードが嘘をついているか?」という問いを常時抱えている。
3. テストスイート:地雷原と安全装置
他者が作成した 22,000 ファイルの中には、**「地雷」**と呼ばれるテストも含まれる。悪意があるのではなく、古くからのメモリバグや異常な構造を持つコードが含まれていることが多い。
代表的なリスク
- メモリーバグ: テストの実行により全ての RAM を消費し、システム全体がフリーズ・再起動してしまうケース。
- 無限ループ: 時間を消費し続けるジェネレータテストなど。
安全のために導入された制限
これらのリスクに対処するため、エンジンに以下のような**硬制約(Hard Constraints)**が設けられている:
// 例示的な制限ロジック const MAX_MEMORY_GB: usize = 6; // グローバルアロケーター上限 (6 GiB) const STEP_LIMIT: u32 = 1000; // ステップ数制限 (無限ループ防止) const STRING_MAX_LEN: usize = 10_000; // 文字列長上限
ビスクファイル(Breadcrumb)の重要性
テストがハングアップした場合、どのファイルが原因か即座に特定できるよう、現在のテスト名を更新する
ビスクファイル を維持している。これにより、開発マシンが再起動しても復旧が容易になる。
これらの制限こそが、「研究プロジェクト」から「安全に 22,000 ファイルを消化する実験」へと分ける決定的な線引きだ。
4. Quietly Lying: 静かに嘘をついている機能たち
テストスイートが発見した最も興味深いバグ群は、「存在し、パースされ、エラーなく実行されるが、何もしない機能」(ポチョムキンの
_builtin_)である。
発見された具体的バグ
| 機能名 | 異常な挙動 |
|---|---|
| を clone すると永久的に沈黙・破損する(不変の時刻計算が clone に依存しているため) |
| キーが存在せず、何もしない No-op な状態でも、キーがそのまま残ってしまう |
| 第 2 引数 を完全に無視し、空白文字のみをトリムする |
| 可変変数 | 実際に宣言されたのに存在しない挙動を示す |
| 静的な関数変数が認識されない |
| オートローダーへの登録は行われるが、実際には呼び出されない |
| 例外をキャッチするが、実際には何もマッチさせない |
テストの役割
これらのバグは人間によるコードレビューでは見過ごされがちだが、22,000 のテストという網羅的な監査により発見された。
テーシス: コードを完全に監査することは不可能であるため、テストが代わりに厳密な監査を行うのが究極の信頼性確保策だ。
5. そしてついに WordPress ページが出力された
「永遠の北極星」とも呼ばれる WordPress は、2003 年以来の PHP イディオムの堆積層を含み、互換性の最終ボスである。
開発の困難さ
の起動一つでも、以下の複雑な要素が絡む:wp-load.php
キーワードの使用(HTML パーサー内で)。goto
の参照パラメータstr_replace
の扱い。$count- 正規表現エスケープ
の処理。\xNN
による半分のビルトインの消失。function_exists()
- 深刻なバグ:
がpreg_split
内のwpdb::prepare
フラグを無視していたことは、4 階下の深層構造に隠れた致命傷だった。PREG_SPLIT_DELIM_CAPTURE
ついに達成
ある日の夕方、以下の完了を確認した:
- ✅ 新規インストール実行: ユーザー作成、オプションテーブル充填、3 件の投稿 SQLite 格納完了。
- ✅ フロントエンドレンダリング: テーマ、投稿、パーマリンク正常表示。
- ✅
の動作: ダッシュボードも問題なく動作(これほど完璧な状態で驚いた)。/wp-admin/
パフォーマンスと現状
- ⚠️ 速度差: 現時点では標準 PHP より約 55 倍遅い(7.1 秒 vs 126 ミリ秒)。
- ただし、光り輝く新しいバイトコード VM は、PHP 8.5 の 1〜3 倍のパフォーマンスを一部で発揮しており、この差は縮小に向かっている。
- ⚠️ 未解決: REST API などの領域はまだ探査中。
6. これは実際には何についてか?
著者は「AI が言語エンジンを書けるか」を知ろうと始めたが、答えはシンプルだ:
「コードを検証できない人がどうすればプロジェクトを誠実に保つか」
その答えは古風で退屈だが美しい:他人が書いたテストと、現実が変わる时才れ動く数字、そして公然無視できない成果。
現在のステータス
- コード行数: 約 24,000 ライン。
- 開発ログ: 戦いの物語が収集され、スコアボードは数十件ずつ上昇中。
- 未来: ブラウザ上で Rust エンジン(WASM)で動作する WordPress のバージョンが遠くにあるかもしれない。
GitHub リポジトリ
詳細な進捗を確認できます:
https://github.com/ekinertac/Phargo
このプロジェクト自体も、LLM で下書きされ、著者が編集したものだ。「マシンは書く、私は狙う」。それが全てではないか。