Перейти к содержимому

Охват спецификации

Phasis ориентируется на актуальную спецификацию ECMAScript (ES2024+) и отслеживает предложения TC39 на стадии 3 и выше. На этой странице представлен удобный для чтения перечень того, что уже реализовано.

Язык

Возможность Статус
Лексические объявления (let, const) с TDZ ✅
Блочная, функциональная и модульная области видимости ✅
Стрелочные функции (с лексическим this) ✅
Параметры по умолчанию, остаточные параметры, spread ✅
Деструктуризация (массивов, объектов, вложенная, значения по умолчанию, rest) ✅
Шаблонные литералы и помеченные шаблоны ✅
Вычисляемые имена свойств ✅
Сокращённая запись свойств и методов ✅
Классы — конструкторы, методы, геттеры/сеттеры, статические элементы ✅
Поля классов (публичные, приватные, статические) ✅
Приватные методы и аксессоры ✅
super в методах и конструкторах ✅
Декораторы (стадия 3) ✅
Статические блоки инициализации ✅
Опциональная цепочка (?.), оператор объединения с null (??) ✅
Операторы логического присваивания (&&=, ||=, ??=) ✅
Разделители в числовых литералах (1_000_000) ✅
Литералы BigInt (123n) и операторы ✅
Асинхронные функции, асинхронные генераторы, await верхнего уровня ✅
Генераторы (синхронные и асинхронные) ✅
for…of, for…in, for await…of ✅
Итераторы и итерируемые объекты (Symbol.iterator) ✅
Примитивы Symbol и известные символы ✅
Модули ES (import / export, динамический import()) ✅
import.meta ✅
import attributes (стадия 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.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 (явное управление ресурсами, стадия 3) полный

Даты и время

Объект Охват
Date полный
Temporal (стадия 3) полный — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (включая иврит, китайский, данги, эфиопский и другие календари)

Интернационализация

Объект Охват
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter полный (при наличии делегирует расширению intl для PHP)

Управление ресурсами

Объект Охват
DisposableStack, AsyncDisposableStack (стадия 3) полный
Symbol.dispose, Symbol.asyncDispose полный
Объявления using / await using полный

Прочее

Объект Охват
RegExp (включая запись множеств /v, именованные захваты, проверки контекста и флаги sticky/global) полный
Вспомогательные методы Iterator (стадия 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find полный
ShadowRealm (стадия 3) полный
globalThis ✅

API веб-платформы (WHATWG / W3C, не TC39)

Помимо чистого ECMAScript, Phasis поставляет несколько уровней наборов Web API, которые реальные библиотеки JS проверяют заранее. Полный охват и соответствие по областям см. в разделе API веб-платформы.

Набор Глобальные объекты WPT
Веб-платформа 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.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 (стадия 3) н/д (проверено по эталону)

¹ Исключены разрешённые подпроверки в тестах сжатия: случаи brotli, которым нужен ext-brotli, и случаи, где передаются данные на основе SharedArrayBuffer (EXPECTED_FAILURES в tests/Wpt/WptTest.php).

Все остальные импортированные Web Platform Tests проходят — см. разбор соответствия в разделе API веб-платформы.

Что ещё не реализовано

  • Семантика SharedArrayBuffer для рабочих потоков за пределами одного агента — атомарное уведомление между потоками ОС требует pcntl и не входит в планы. Атомарные операции в одном агенте работают.
  • Intl.Segmenter с графемными кластерами, для которых требуется ICU 76+ — зависит от версии расширения intl у хоста PHP.

Версии

Phasis придерживается семвер-версионирования. Линейка версий отслеживает черновики спецификации ECMAScript:

Версия Phasis Целевая спецификация Предложения стадии 3
0.x ES2024 декораторы, Temporal, явное управление ресурсами, вспомогательные средства для итераторов, методы для множеств

Выпуск версии 1.0 зависит от реализации всех предложений стадии 4 в черновике ES2025 и стабильной семантики обработки очереди Promise.