
# 规范覆盖范围

Phasis 以当前 ECMAScript 规范（ES2024+）为目标，并跟踪处于 Stage 3 及以上阶段的 TC39 提案。本页是实际已发布内容的易读索引。

## 语言

| 功能 | 状态 |
|---|:---:|
| 词法声明（`let`、`const`），含 TDZ | ✅ |
| 块级作用域、函数作用域、模块作用域 | ✅ |
| 箭头函数（含词法 `this`） | ✅ |
| 默认参数、剩余参数、展开语法 | ✅ |
| 解构（数组、对象、嵌套、默认值、剩余元素） | ✅ |
| 模板字面量、标签模板 | ✅ |
| 计算属性名 | ✅ |
| 简写属性和方法 | ✅ |
| 类——构造函数、方法、getter/setter、静态成员 | ✅ |
| 类字段（公有、私有、静态） | ✅ |
| 私有方法和访问器 | ✅ |
| 方法和构造函数中的 `super` | ✅ |
| 装饰器（Stage 3） | ✅ |
| 静态初始化块 | ✅ |
| 可选链（`?.`）、空值合并（`??`） | ✅ |
| 逻辑赋值运算符（`&&=`、`\|\|=`、`??=`） | ✅ |
| 数字分隔符（`1_000_000`） | ✅ |
| BigInt 字面量（`123n`）和运算符 | ✅ |
| 异步函数、异步生成器、顶层 await | ✅ |
| 生成器（同步和异步） | ✅ |
| `for…of`、`for…in`、`for await…of` | ✅ |
| 迭代器和可迭代对象（Symbol.iterator） | ✅ |
| Symbol 原始值和知名 Symbol | ✅ |
| ES 模块（`import` / `export`、动态 `import()`） | ✅ |
| `import.meta` | ✅ |
| `import attributes`（Stage 3） | ✅ |
| 严格模式 + Annex B 旧版行为 | ✅ |
| 正则表达式（`/u`、`/v`、`/d`、命名组、后行断言） | ✅ |
| 自动分号插入（ASI） | ✅ |
| Hashbang 语法（`#!/usr/bin/env phasis`） | ✅ |
| 严格模式下的适当尾调用（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`、自定义替换函数、reviver、缩进 |
| `Symbol` | 完整 — `for`、`keyFor`、所有知名 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` | 全部 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` 集合表示法、命名捕获、前后查找、粘滞/全局标志） | 完整 |
| `Iterator` 辅助函数（Stage 3）— `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | 完整 |
| `ShadowRealm`（Stage 3） | 完整 |
| `globalThis` | ✅ |

## Web 平台 API（WHATWG / W3C，非 TC39）

除纯 ECMAScript 外，Phasis还提供了多层 Web API 套件，实际的 JS 库会预先检查这些 API。完整接口范围和各领域的一致性情况，请参阅[Web API](https://phasis.inline0.dev/zh/docs/compatibility/web-apis)。

| 套件 | 全局对象 | WPT |
|---|---|---|
| **Web 平台** | `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 + 可选的 brotli，通过 `ext-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/zh/docs/compatibility/web-apis)。

## 尚未实现的内容

- **单个代理之外的 SharedArrayBuffer worker 语义** — 跨真实 OS 线程的多线程原子通知需要 `pcntl`，目前不在路线图中。单代理原子操作可用。
- **需要 ICU 76+ 字素簇的 `Intl.Segmenter`** — 取决于宿主 PHP 的 `intl` 扩展版本。

## 版本管理

Phasis遵循语义化版本规范。版本系列对应 ECMAScript 规范草案：

| Phasis 版本 | 规范目标 | Stage 3 提案 |
|---|---|---|
| 0.x | ES2024 | decorators、Temporal、显式资源管理、迭代器辅助方法、集合方法 |

升至 1.0 的前提是：ES2025 草案中的每个 Stage 4 提案都已实现，且 Promise 清空机制稳定。
