仕様の対応範囲
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 |
✅ |
ECMAScriptだけでなく、Phasisは実際のJSライブラリが事前にチェックする、複数レイヤーのWeb APIパックも提供します。対応範囲と分野ごとの適合状況の全容はWeb APIを参照してください。
| パック |
グローバル |
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を参照してください。
まだ実装されていない機能
- 単一エージェントを超える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セマンティクスが安定することを条件とします。