コンテンツへスキップ

仕様の対応範囲

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を参照してください。

パック グローバル 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セマンティクスが安定することを条件とします。