Перейти до вмісту

Охоплення специфікації

Phasis орієнтується на поточну специфікацію ECMAScript (ES2024+) і відстежує пропозиції TC39 зі Stage 3 і вище. На цій сторінці наведено зрозумілий для читача перелік того, що фактично постачається.

Мова

Можливість Статус
Лексичні оголошення (let, const) з TDZ ✅
Область видимості блока, функції та модуля ✅
Стрілкові функції (з лексичним this) ✅
Параметри за замовчуванням, rest-параметри, spread ✅
Деструктуризація (масивів, об’єктів, вкладена, значення за замовчуванням, rest) ✅
Шаблонні рядки, шаблонні рядки з тегами ✅
Обчислювані назви властивостей ✅
Скорочений синтаксис властивостей і методів ✅
Класи — конструктори, методи, гетери/сетери, статичні члени ✅
Поля класів (публічні, приватні, статичні) ✅
Приватні методи й аксесори ✅
super у методах і конструкторах ✅
Декоратори (Stage 3) ✅
Блоки статичної ініціалізації ✅
Необов’язковий ланцюжок (?.), об’єднання з nullish-значенням (??) ✅
Оператори логічного присвоєння (&&=, ||=, ??=) ✅
Роздільники в числах (1_000_000) ✅
Літерали BigInt (123n) та оператори ✅
Асинхронні функції, асинхронні генератори, await верхнього рівня ✅
Генератори (синхронні й асинхронні) ✅
for…of, for…in, for await…of ✅
Ітератори та ітеровані об’єкти (Symbol.iterator) ✅
Примітиви Symbol і загальновідомі символи ✅
Модулі ES (import / export, динамічний import()) ✅
import.meta ✅
import attributes (Stage 3) ✅
Строгий режим і застарілі можливості Annex B ✅
Регулярні вирази (/u, /v, /d, іменовані групи, lookbehind) ✅
Автоматична вставка крапки з комою (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 (керування ресурсами, 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 повне (за наявності делегує розширенню intl від PHP)

Керування ресурсами

Об’єкт Охоплення
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 ✅

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

Окрім самого ECMAScript, Phasis постачає кілька рівнів наборів Web API, наявність яких реальні бібліотеки JS попередньо перевіряють. Повний перелік можливостей і відповідність у кожній області див. у розділі Web 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 (Stage 3) н/д (перевірено оракулом)

¹ Не враховано дозволені підтести у тестових наборах стиснення: випадки brotli, яким потрібен ext-brotli, і випадки, де передаються дані SharedArrayBuffer, (EXPECTED_FAILURES у tests/Wpt/WptTest.php).

Усі інші імпортовані Web Platform Tests проходять — таблицю відповідності див. у розділі Web API.

Що ще не реалізовано

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

Версіонування

Phasis дотримується semver. Лінійка версій відповідає чернеткам специфікації ECMAScript:

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

Перехід до 1.0 залежить від реалізації кожної пропозиції Stage 4 із чернетки ES2025 і стабільної семантики спорожнення черги Promise.