
# 仕様の対応範囲

Phasisは現行のECMAScript仕様（ES2024以降）を対象とし、Stage 3以上のTC39提案を追跡しています。このページでは、実際に提供されている機能を人が読める形で一覧にしています。

## 言語

| 機能 | 状態 |
|---|:---:|
| TDZを伴う字句宣言（`let`、`const`） | ✅ |
| ブロックスコープ、関数スコープ、モジュールスコープ | ✅ |
| アロー関数（字句的な`this`を伴う） | ✅ |
| デフォルト引数、rest引数、spread | ✅ |
| 分割代入（配列、オブジェクト、入れ子、デフォルト、rest） | ✅ |
| テンプレートリテラル、タグ付きテンプレート | ✅ |
| 計算されたプロパティ名 | ✅ |
| 省略記法のプロパティとメソッド | ✅ |
| クラス — コンストラクター、メソッド、ゲッター／セッター、static | ✅ |
| クラスフィールド（public、private、static） | ✅ |
| privateメソッドとアクセサー | ✅ |
| メソッドとコンストラクター内の`super` | ✅ |
| デコレーター（Stage 3） | ✅ |
| static初期化ブロック | ✅ |
| オプショナルチェーン（`?.`）、Null合体演算子（`??`） | ✅ |
| 論理代入演算子（`&&=`、`\|\|=`、`??=`） | ✅ |
| 数値区切り文字（`1_000_000`） | ✅ |
| BigIntリテラル（`123n`）と演算子 | ✅ |
| async関数、asyncジェネレーター、トップレベルawait | ✅ |
| ジェネレーター（同期・非同期） | ✅ |
| `for…of`、`for…in`、`for await…of` | ✅ |
| イテレーターとイテラブル（Symbol.iterator） | ✅ |
| Symbolプリミティブとwell-known symbol | ✅ |
| ES Modules（`import`／`export`、動的`import()`） | ✅ |
| `import.meta` | ✅ |
| `import attributes`（Stage 3） | ✅ |
| strictモードとAnnex Bのレガシー動作 | ✅ |
| 正規表現（`/u`、`/v`、`/d`、名前付きグループ、後読み） | ✅ |
| 自動セミコロン挿入（ASI） | ✅ |
| ハッシュバン文法（`#!/usr/bin/env phasis`） | ✅ |
| strictモードでの適切な末尾呼び出し（ES2015、仕様上必須） | ✅ |

## 標準ライブラリ

### 基本機能

| オブジェクト | 対応範囲 |
|---|---|
| `Object` | 完全 — `keys`、`values`、`entries`、`assign`、`create`、`freeze`、`seal`、`getOwnPropertyDescriptor(s)`、`setPrototypeOf`、`getOwnPropertyNames`、`getOwnPropertySymbols`、`hasOwn`、`groupBy`、`fromEntries`など |
| `Array` | 完全 — `at`、`flatMap`、`flat`、`findLast`、`findLastIndex`、`toReversed`、`toSorted`、`toSpliced`、`with`、`group`、`groupToMap`を含むすべてのプロトタイプメソッド |
| `String` | 完全 — `at`、`codePointAt`、`match`、`matchAll`、`replaceAll`、`padStart`、`padEnd`、`trimStart`、`trimEnd`、`isWellFormed`、`toWellFormed` |
| `Number` | 完全 — `isFinite`、`isInteger`、`isNaN`、`isSafeInteger`、`EPSILON`、`MAX_SAFE_INTEGER`など |
| `BigInt` | 完全 — bcmathによる任意精度演算 |
| `Boolean` | 完全 |
| `Math` | 完全 — NaN／Infinity／-0のあらゆるメソッドと特殊ケース |
| `JSON` | 完全 — `parse`、`stringify`、カスタムreplacer、reviver、インデント |
| `Symbol` | 完全 — `for`、`keyFor`、すべてのwell-known symbol、`Symbol.toPrimitive` |
| `Function` | 完全 — `call`、`apply`、`bind`、`length`、`name`、`prototype`の意味論 |

### コレクション

| オブジェクト | 対応範囲 |
|---|---|
| `Map` | 完全 — `groupBy`とライブ反復を含む |
| `Set` | 完全 — `intersection`、`union`、`difference`、`symmetricDifference`、`isSubsetOf`、`isSupersetOf`、`isDisjointFrom`を含む |
| `WeakMap`、`WeakSet`、`WeakRef`、`FinalizationRegistry` | 完全 |

### 非同期

| オブジェクト | 対応範囲 |
|---|---|
| `Promise` | 完全 — `all`、`race`、`any`、`allSettled`、`withResolvers`、非同期反復 |
| `AsyncIterator`、`AsyncGenerator` | 完全 |
| マイクロタスクのスケジューリング | ✅ |

### バイナリーデータ

| オブジェクト | 対応範囲 |
|---|---|
| `ArrayBuffer`、`SharedArrayBuffer` | 完全 |
| `DataView` | 完全 — `getBigInt64`、`setBigInt64`など |
| `Int8Array`、`Uint8Array`、`Uint8ClampedArray`、`Int16Array`、`Uint16Array`、`Int32Array`、`Uint32Array`、`BigInt64Array`、`BigUint64Array`、`Float16Array`、`Float32Array`、`Float64Array` | 完全 |
| `Atomics` — `add`、`sub`、`and`、`or`、`xor`、`compareExchange`、`exchange`、`isLockFree`、`load`、`notify`、`pause`、`store`、`wait`、`waitAsync` | 完全（単一エージェントのみ） |

### リフレクションとProxy

| オブジェクト | 対応範囲 |
|---|---|
| `Proxy` | 13個すべてのトラップ、取り消し可能 |
| `Reflect` | 14個すべての静的メソッド |

### エラー

| オブジェクト | 対応範囲 |
|---|---|
| `Error`、`TypeError`、`RangeError`、`ReferenceError`、`SyntaxError`、`URIError`、`EvalError` | 完全 |
| `AggregateError` | 完全 |
| `SuppressedError`（Stage 3の明示的リソース管理） | 完全 |

### 日付と時刻

| オブジェクト | 対応範囲 |
|---|---|
| `Date` | 完全 |
| `Temporal`（Stage 3） | 完全 — `Now`、`Instant`、`PlainDate`、`PlainTime`、`PlainDateTime`、`PlainYearMonth`、`PlainMonthDay`、`ZonedDateTime`、`Duration`、`TimeZone`、`Calendar`（ヘブライ語、中国語、Dangi、エチオピア暦などを含む） |

### 国際化

| オブジェクト | 対応範囲 |
|---|---|
| `Intl.Locale`、`Intl.Collator`、`Intl.DateTimeFormat`、`Intl.NumberFormat`、`Intl.PluralRules`、`Intl.RelativeTimeFormat`、`Intl.ListFormat`、`Intl.DisplayNames`、`Intl.Segmenter` | 完全（利用可能な場合はPHPの`intl`拡張に委譲） |

### リソース管理

| オブジェクト | 対応範囲 |
|---|---|
| `DisposableStack`、`AsyncDisposableStack`（Stage 3） | 完全 |
| `Symbol.dispose`、`Symbol.asyncDispose` | 完全 |
| `using`／`await using`宣言 | 完全 |

### その他

| オブジェクト | 対応範囲 |
|---|---|
| `RegExp`（`/v`集合表記、名前付きキャプチャ、先読み／後読み、sticky／globalフラグを含む） | 完全 |
| `Iterator`ヘルパー（Stage 3） — `map`、`filter`、`take`、`drop`、`flatMap`、`reduce`、`toArray`、`forEach`、`some`、`every`、`find` | 完全 |
| `ShadowRealm`（Stage 3） | 完全 |
| `globalThis` | ✅ |

## Web Platform API（WHATWG／W3C、TC39の対象外）

ECMAScriptだけでなく、Phasisは実際のJSライブラリが事前にチェックする、複数レイヤーのWeb APIパックも提供します。対応範囲と分野ごとの適合状況の全容は[Web API](https://phasis.inline0.dev/ja/docs/compatibility/web-apis)を参照してください。

| パック | グローバル | WPT |
|---|---|---|
| **Web Platform** | `URL`、`URLSearchParams`、`URLPattern`、`TextEncoder`、`TextDecoder`、`atob`、`btoa`、`structuredClone`、`performance`、`console`、`setTimeout`／`setInterval`／`queueMicrotask`、`reportError`、`self`（`globalThis`の別名）、`DOMException` | 100 % |
| **Fetch** | `fetch`、`Request`、`Response`、`Headers`、`Body`ミックスイン、`AbortController`、`AbortSignal`、`Blob`、`File`、`FormData`、`EventTarget`、`Event`、WHATWG Streamsの全機能（`ReadableStream`、`WritableStream`、`TransformStream`、キューイング戦略、BYOB）、`CompressionStream`／`DecompressionStream`（zlib + `ext-brotli`経由の任意のbrotli）、`navigator` | 100 %¹ |
| **Crypto** | `crypto.getRandomValues`、`crypto.randomUUID`、`SubtleCrypto`の全機能（digest、HMAC、AES-GCM/CBC/CTR、RSA-OAEP/PSS/PKCS1、ECDSA P-256/384/521、ECDH、HKDF、PBKDF2） | 100 % |
| **WebSocket** | `WebSocket`（コンストラクター + RFC 6455フレームコーデック、`setWebSocketTransport`経由でトランスポートを置き換え可能） | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent`（fetchトランスポート上に構築されるため、ポリシーフックが適用されます） | 100 % |
| **イベントループ** | `setTimeout`、`setInterval`、`clearTimeout`、`clearInterval`、`queueMicrotask`、`AsyncContext`（Stage 3） | 該当なし（oracleテスト済み） |

¹ 圧縮フィクスチャ内の許可リスト対象サブテストを除きます。`ext-brotli`が必要なbrotliケース、および`SharedArrayBuffer`を使った入力（`tests/Wpt/WptTest.php`内の`EXPECTED_FAILURES`）を渡すケースが対象です。

それ以外のインポート済みWeb Platform Testsはすべて合格しています。適合状況の内訳は[Web API](https://phasis.inline0.dev/ja/docs/compatibility/web-apis)を参照してください。

## まだ実装されていない機能

- **単一エージェントを超えるSharedArrayBufferのワーカーセマンティクス** — 実際のOSスレッド間で複数スレッドのアトミック通知を行うには`pcntl`が必要で、ロードマップには含まれていません。単一エージェントのアトミック操作は動作します。
- **ICU 76以降を必要とする書記素クラスタを使った`Intl.Segmenter`** — ホストPHPの`intl`拡張のバージョンに依存します。

## バージョン管理

Phasisはセマンティックバージョニングに従います。バージョン系列はECMAScript仕様の草案に対応しています。

| Phasisのバージョン | 仕様の対象 | Stage 3提案 |
|---|---|---|
| 0.x | ES2024 | デコレーター、Temporal、明示的リソース管理、イテレーターヘルパー、Setメソッド |

1.0への移行は、ES2025草案のStage 4提案をすべて実装し、Promiseのdrainセマンティクスが安定することを条件とします。
