Към съдържанието

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

Phasis е насочен към текущата спецификация на ECMAScript (ES2024+) и следи предложенията на TC39 със статус Stage 3 и по-висок. Тази страница е разбираем за хората индекс на вече включеното.

Език

Възможност Статус
Лексикални декларации (let, const) с TDZ ✅
Област на видимост на блок, функция и модул ✅
Функции със стрелка (с лексикален this) ✅
Параметри по подразбиране, остатъчни параметри, разгръщане ✅
Деструктуриране (масив, обект, вложени структури, стойности по подразбиране, остатъчни стойности) ✅
Шаблонни литерали, шаблонни литерали с таг ✅
Изчислявани имена на свойства ✅
Съкратен запис на свойства и методи ✅
Класове — конструктори, методи, гетъри/сетъри, статични елементи ✅
Полета на класове (публични, частни, статични) ✅
Частни методи и аксесори ✅
super в методи и конструктори ✅
Декоратори (Stage 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 (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, персонализирани заместващи стойности, възстановяваща функция, отстъпи
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 (вкл. еврейски, китайски, данги, етиопски и др.)

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

Обект Покритие
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, именувани захвати, lookaround, лепкави/глобални флагове) пълно
Помощни функции Iterator (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find пълно
ShadowRealm (Stage 3) пълно
globalThis ✅

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

Освен чистия ECMAScript, Phasis предоставя няколко многослойни пакета от 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 (Stage 3) неприложимо (проверено с oracle)

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

Всички останали импортирани тестове на уеб платформата минават — вижте API за уеб за разбивка на съответствието.

Какво все още не е реализирано

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

Версии

Phasis следва семантичното версиониране. Номерът на версията следва черновите на спецификацията ECMAScript:

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

Преминаването към 1.0 зависи от реализирането на всяко предложение Stage 4 в черновата на ES2025 и от стабилна семантика за изчерпване на Promise.