互換性
Phasisは、互いに独立した3つの基準で検証されています。
- test262 — TC39公式のECMAScript適合性テストスイート。リポジトリで固定されたリビジョンの100 % に合格しています。
- Web Platform Tests — ECMAScript以外のWeb API(fetch、XHR、WebSocket、Streams、Headers、Blob、エンコーディング、URL、structured-clone、abort、hr-time、atob、crypto)を対象とするWHATWG / W3C公式スイート。取り込んだコーパスの100 % に合格しています。
- 人気ライブラリ — 広く使われているnpmパッケージ204個(acorn、lodash、zod、ramda、immer、redux、date-fns、marked、fuse.js、semver、validatorなど)がNode.jsとバイト単位で一致して動作します。
他のエンジンとの比較
| エンジン | test262 | 備考 |
|---|---|---|
| Phasis | 100 % | 純粋なPHP。ES2024以降を対象。 |
| V8(Node、Chrome) | 99.8 % | C++製のリファレンスエンジン。 |
| SpiderMonkey(Firefox) | 99.6 % | C++製のリファレンスエンジン。 |
| JavaScriptCore(Safari) | 99.4 % | C++製のリファレンスエンジン。 |
| QuickJS | ~97 % | C製の軽量な組み込みエンジン。 |
| Hermes(React Native) | ~95 % | モバイル向けに最適化された組み込みエンジン。 |
数値の出典はtest262.fyiです。Phasisは本番環境のブラウザーエンジンと並ぶ上位の適合性を備えています。
ページ
- test262のカバレッジ — テスト内容、スイートの実行方法、100%が重要な理由。
- Web APIs(WPT) — Web Platform PackとFetch Pack:URL、エンコーディング、atob/btoa、structuredClone、performance、Headers、Blob、AbortSignal、EventTarget、Streams、さらにcrypto、WebSocket、XMLHttpRequest。
- Streams — WHATWG Streams Standardの全機能:ReadableStream、WritableStream、TransformStream、BYOB、tee、pipeTo/pipeThrough、キューイング戦略、非同期イテレーション。
- 人気パッケージ — 解析、テンプレート処理、検証、日時、数学、ハッシュ、検索/差分、色、URL処理などに関するnpmパッケージ204個について、Node.jsとのバイト単位の一致をCIで検証します。
- 仕様の対応範囲 — Phasisが提供する、ECMAScriptのすべての組み込み機能、構文機能、標準ライブラリオブジェクト。
- 既知の制限 — パフォーマンス上限、マルチエージェント並行処理、Wasm、ブラウザー専用Web APIなど、Phasisが意図的にV8と異なる点。
測定方法
- test262 —
bin/test262がスイートをローカルで実行します。全マトリックスはcompat-matrix.ymlワークフローで実行します。毎回のプッシュ時ではなく手動で開始し、成功するとスナップショットをCOMPAT.mdにコミットします。スナップショットには取得日時と対象コミットが記録されます。スイートのリビジョンはtest262のgitサブモジュールで固定されています。 - Web Platform Tests —
bin/wptが取り込んだフィクスチャを実行します。wpt.ymlワークフローは、mainへのプッシュ時と、src/、フィクスチャ、Composerファイルを変更するプルリクエストで実行されます。 - 人気ライブラリ —
composer testがPHPUnitを実行し、tests/Popular/で人気ライブラリとのバイト単位の一致も検証します。popular.ymlワークフローも同じパスフィルターで実行され、実際のNodeですべてのオラクルを再生成するため、ベンダー提供ライブラリを更新した際に古いオラクルを検出できます。
WPTまたは人気パッケージの回帰があると、それを引き起こしたプルリクエストが失敗します。test262の回帰は、次回のマトリックス実行時に検出されます。