
# 互換性

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](https://test262.fyi)です。Phasisは本番環境のブラウザーエンジンと並ぶ上位の適合性を備えています。

## ページ

- **[test262のカバレッジ](https://phasis.inline0.dev/ja/docs/compatibility/test262)** — テスト内容、スイートの実行方法、100%が重要な理由。
- **[Web APIs（WPT）](https://phasis.inline0.dev/ja/docs/compatibility/web-apis)** — Web Platform PackとFetch Pack：URL、エンコーディング、atob/btoa、structuredClone、performance、Headers、Blob、AbortSignal、EventTarget、Streams、さらにcrypto、WebSocket、XMLHttpRequest。
- **[Streams](https://phasis.inline0.dev/ja/docs/compatibility/streams)** — WHATWG Streams Standardの全機能：ReadableStream、WritableStream、TransformStream、BYOB、tee、pipeTo/pipeThrough、キューイング戦略、非同期イテレーション。
- **[人気パッケージ](https://phasis.inline0.dev/ja/docs/compatibility/popular-packages)** — 解析、テンプレート処理、検証、日時、数学、ハッシュ、検索/差分、色、URL処理などに関するnpmパッケージ204個について、Node.jsとのバイト単位の一致をCIで検証します。
- **[仕様の対応範囲](https://phasis.inline0.dev/ja/docs/compatibility/spec-surface)** — Phasisが提供する、ECMAScriptのすべての組み込み機能、構文機能、標準ライブラリオブジェクト。
- **[既知の制限](https://phasis.inline0.dev/ja/docs/compatibility/limitations)** — パフォーマンス上限、マルチエージェント並行処理、Wasm、ブラウザー専用Web APIなど、Phasisが意図的にV8と異なる点。

## 測定方法

- **test262** — `bin/test262`がスイートをローカルで実行します。全マトリックスは`compat-matrix.yml`ワークフローで実行します。毎回のプッシュ時ではなく手動で開始し、成功するとスナップショットを[`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md)にコミットします。スナップショットには取得日時と対象コミットが記録されます。スイートのリビジョンは`test262`のgitサブモジュールで固定されています。
- **Web Platform Tests** — `bin/wpt`が取り込んだフィクスチャを実行します。`wpt.yml`ワークフローは、`main`へのプッシュ時と、`src/`、フィクスチャ、Composerファイルを変更するプルリクエストで実行されます。
- **人気ライブラリ** — `composer test`がPHPUnitを実行し、`tests/Popular/`で人気ライブラリとのバイト単位の一致も検証します。`popular.yml`ワークフローも同じパスフィルターで実行され、実際のNodeですべてのオラクルを再生成するため、ベンダー提供ライブラリを更新した際に古いオラクルを検出できます。

WPTまたは人気パッケージの回帰があると、それを引き起こしたプルリクエストが失敗します。test262の回帰は、次回のマトリックス実行時に検出されます。
