コンテンツへスキップ

互換性

Phasisは、互いに独立した3つの基準で検証されています。

  1. test262 — TC39公式のECMAScript適合性テストスイート。リポジトリで固定されたリビジョンの100 % に合格しています。
  2. Web Platform Tests — ECMAScript以外のWeb API(fetch、XHR、WebSocket、Streams、Headers、Blob、エンコーディング、URL、structured-clone、abort、hr-time、atob、crypto)を対象とするWHATWG / W3C公式スイート。取り込んだコーパスの100 % に合格しています。
  3. 人気ライブラリ — 広く使われている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の回帰は、次回のマトリックス実行時に検出されます。