Przejdź do treści

Zakres specyfikacji

Phasis jest zgodny z aktualną specyfikacją ECMAScript (ES2024+) i uwzględnia propozycje TC39 na etapie Stage 3 i wyższym. Ta strona to czytelny dla człowieka indeks tego, co faktycznie zostało dostarczone.

Język

Funkcja Status
Deklaracje leksykalne (let, const) z TDZ ✅
Zakres blokowy, zakres funkcji, zakres modułu ✅
Funkcje strzałkowe (z leksykalnym this) ✅
Parametry domyślne, parametry rest, rozproszenie ✅
Destrukturyzacja (tablic, obiektów, zagnieżdżona, z wartościami domyślnymi i rest) ✅
Literały szablonowe, szablony z tagami ✅
Obliczane nazwy właściwości ✅
Skrócone właściwości i metody ✅
Klasy — konstruktory, metody, gettery/settery, elementy statyczne ✅
Pola klas (publiczne, prywatne, statyczne) ✅
Metody prywatne i akcesory ✅
super w metodach i konstruktorach ✅
Dekoratory (Stage 3) ✅
Bloki inicjalizujące elementy statyczne ✅
Łańcuchowanie opcjonalne (?.), koalescencja wartości nullish (??) ✅
Operatory przypisania logicznego (&&=, ||=, ??=) ✅
Separatory numeryczne (1_000_000) ✅
Literały BigInt (123n) i operatory ✅
Funkcje asynchroniczne, generatory asynchroniczne, await na najwyższym poziomie ✅
Generatory (synchroniczne i asynchroniczne) ✅
for…of, for…in, for await…of ✅
Iteratory i obiekty iterowalne (Symbol.iterator) ✅
Prymitywy Symbol i symbole dobrze znane ✅
Moduły ES (import / export, dynamiczne import()) ✅
import.meta ✅
import attributes (Stage 3) ✅
Tryb ścisły + starsze zachowania Annex B ✅
Wyrażenia regularne (/u, /v, /d, nazwane grupy, lookbehind) ✅
Automatyczne wstawianie średników (ASI) ✅
Gramatyka hashbang (#!/usr/bin/env phasis) ✅
Poprawne wywołania ogonowe w trybie ścisłym (ES2015, wymagane przez specyfikację) ✅

Biblioteka standardowa

Podstawowe

Obiekt Zakres obsługi
Object pełna — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries i inne
Array pełna — wszystkie metody prototypu, w tym at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String pełna — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number pełna — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER i inne
BigInt pełna — dowolna precyzja przez bcmath
Boolean pełna
Math pełna — każda metoda i każdy przypadek specjalny dla NaN / Infinity / -0
JSON pełna — parse, stringify, własne funkcje replacer, reviver i wcięcia
Symbol pełna — for, keyFor, wszystkie dobrze znane symbole, Symbol.toPrimitive
Function pełna — semantyka call, apply, bind, length, name, prototype

Kolekcje

Obiekt Zakres obsługi
Map pełna — w tym groupBy i iteracja na żywo
Set pełna — w tym intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry pełna

Asynchroniczność

Obiekt Zakres obsługi
Promise pełna — all, race, any, allSettled, withResolvers, iteracja asynchroniczna
AsyncIterator, AsyncGenerator pełna
Planowanie zadań mikrotask ✅

Dane binarne

Obiekt Zakres obsługi
ArrayBuffer, SharedArrayBuffer pełna
DataView pełna — getBigInt64, setBigInt64 i inne
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array pełna
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync pełna (tylko jeden agent)

Refleksja i proxy

Obiekt Zakres
Proxy wszystkie 13 pułapek, możliwość cofnięcia
Reflect wszystkie 14 metod statycznych

Błędy

Obiekt Zakres
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError pełny
AggregateError pełny
SuppressedError (jawne zarządzanie zasobami — etap 3) pełny

Daty i godziny

Obiekt Zakres
Date pełny
Temporal (etap 3) pełny — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (w tym hebrajski, chiński, Dangi, etiopski itd.)

Internacjonalizacja

Obiekt Zakres
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter pełny (w razie dostępności deleguje do rozszerzenia intl obiektu PHP)

Zarządzanie zasobami

Obiekt Zakres
DisposableStack, AsyncDisposableStack (etap 3) pełny
Symbol.dispose, Symbol.asyncDispose pełny
deklaracje using / await using pełne

Inne

Obiekt Zakres
RegExp (w tym notacja zbiorów /v, nazwane grupy przechwytujące, lookaround, flagi sticky/global) pełny
pomocniki Iterator (etap 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find pełne
ShadowRealm (etap 3) pełny
globalThis ✅

Interfejsy API platformy WWW (WHATWG / W3C, nie TC39)

Poza czystym ECMAScript Phasis dostarcza kilka warstwowych pakietów interfejsów API platformy WWW, które rzeczywiste biblioteki JS sprawdzają wstępnie. Pełny zakres i zgodność w poszczególnych obszarach opisano na stronie Interfejsy API platformy WWW.

Pakiet Zmienne globalne WPT
Platforma WWW URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (alias dla globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, domieszka Body, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, pełna obsługa strumieni WHATWG (ReadableStream, WritableStream, TransformStream, strategie kolejkowania, BYOB), CompressionStream / DecompressionStream (zlib + opcjonalny brotli przez ext-brotli), navigator 100 %¹
Crypto crypto.getRandomValues, crypto.randomUUID, pełny SubtleCrypto (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (konstruktor + koder ramek RFC 6455, wymienny transport przez setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (oparte na transporcie fetch, więc obowiązują zaczepy zasad) 100 %
Pętla zdarzeń setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (etap 3) nie dotyczy (testowane względem wzorca)

¹ Z wyłączeniem dozwolonych podtestów w zestawach testowych kompresji: przypadków brotli, które wymagają ext-brotli, oraz przypadków przekazujących dane wejściowe oparte na SharedArrayBuffer (EXPECTED_FAILURES w tests/Wpt/WptTest.php).

Wszystkie pozostałe zaimportowane testy platformy WWW przechodzą — zestawienie zgodności znajdziesz na stronie Interfejsy API platformy WWW.

Jeszcze niezaimplementowane elementy

  • Semantyka SharedArrayBuffer wątków roboczych poza pojedynczym agentem — atomowe powiadamianie między wieloma rzeczywistymi wątkami systemu operacyjnego wymaga pcntl i nie ma go w planach. Atomiki pojedynczego agenta działają.
  • Intl.Segmenter z klastrami grafemów wymagającymi ICU 76+ — zależy od wersji rozszerzenia intl hosta PHP.

Wersjonowanie

Phasis stosuje semver. Linia wersji odpowiada wersjom roboczym specyfikacji ECMAScript:

Wersja Phasis Docelowa specyfikacja Propozycje etapu 3
0.x ES2024 dekoratory, Temporal, jawne zarządzanie zasobami, pomocniki iteratorów, metody zbiorów

Wydanie wersji 1.0 wymaga zaimplementowania każdej propozycji etapu 4 z projektu ES2025 oraz ustabilizowania semantyki opróżniania Promise.