Ga naar de inhoud

Specificatieoverzicht

Phasis richt zich op de huidige ECMAScript-specificatie (ES2024+) en volgt TC39-voorstellen vanaf Stage 3. Deze pagina is het leesbare overzicht van wat daadwerkelijk is geïmplementeerd.

Taal

Functie Status
Lexicale declaraties (let, const) met TDZ ✅
Blokbereik, functiebereik, modulebereik ✅
Pijlfuncties (met lexicale this) ✅
Standaardparameters, restparameters, spread ✅
Destructurering (array, object, genest, standaardwaarden, rest) ✅
Templatestrings, getagde templates ✅
Berekende eigenschapsnamen ✅
Verkorte eigenschappen en methoden ✅
Klassen — constructors, methoden, getters/setters, static ✅
Klassevelden (publiek, privé, static) ✅
Privémethoden en accessors ✅
super in methoden en constructors ✅
Decorators (Stage 3) ✅
Statische initialisatieblokken ✅
Optioneel koppelen (?.), nullish coalescing (??) ✅
Logische toewijzingsoperatoren (&&=, ||=, ??=) ✅
Numerieke scheidingstekens (1_000_000) ✅
BigInt-literals (123n) en operatoren ✅
Asynchrone functies, asynchrone generators, top-level await ✅
Generators (synchroon en asynchroon) ✅
for…of, for…in, for await…of ✅
Iterators en iterables (Symbol.iterator) ✅
Symbol-primitieven en bekende symbols ✅
ES-modules (import / export, dynamische import()) ✅
import.meta ✅
import attributes (Stage 3) ✅
Strikte modus + verouderd gedrag van Annex B ✅
Reguliere expressies (/u, /v, /d, benoemde groepen, lookbehind) ✅
Automatische puntkommainvoeging (ASI) ✅
Hashbang-grammatica (#!/usr/bin/env phasis) ✅
Juiste tail calls in strikte modus (ES2015, vereist door de specificatie) ✅

Standaardbibliotheek

Fundamenteel

Object Dekking
Object volledig — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries, enz.
Array volledig — elke prototypemethode, waaronder at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String volledig — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number volledig — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER, enz.
BigInt volledig — willekeurige precisie via bcmath
Boolean volledig
Math volledig — elke methode en elk speciaal geval voor NaN / Infinity / -0
JSON volledig — parse, stringify, aangepaste replacers, reviver, inspringing
Symbol volledig — for, keyFor, alle bekende symbols, Symbol.toPrimitive
Function volledig — call, apply, bind, length, name, prototype-semantiek

Collecties

Object Dekking
Map volledig — inclusief groupBy en live iteratie
Set volledig — inclusief intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry volledig

Asynchroon

Object Dekking
Promise volledig — all, race, any, allSettled, withResolvers, asynchrone iteratie
AsyncIterator, AsyncGenerator volledig
Microtaakplanning ✅

Binaire gegevens

Object Dekking
ArrayBuffer, SharedArrayBuffer volledig
DataView volledig — getBigInt64, setBigInt64, enz.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array volledig
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync volledig (alleen single-agent)

Reflectie en proxies

Object Dekking
Proxy alle 13 traps, intrekbaar
Reflect alle 14 statische methoden

Fouten

Object Dekking
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError volledig
AggregateError volledig
SuppressedError (Stage 3 expliciet resourcebeheer) volledig

Datums en tijd

Object Dekking
Date volledig
Temporal (Stage 3) volledig — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (o.a. Hebreeuws, Chinees, Dangi, Ethiopisch, enz.)

Internationalisering

Object Dekking
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter volledig (gebruikt PHP's intl-uitbreiding wanneer beschikbaar)

Resourcebeheer

Object Dekking
DisposableStack, AsyncDisposableStack (Stage 3) volledig
Symbol.dispose, Symbol.asyncDispose volledig
using / await using-declaraties volledig

Overig

Object Dekking
RegExp (incl. /v-setnotatie, benoemde captures, lookaround, sticky/global-flags) volledig
Iterator-helpers (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find volledig
ShadowRealm (Stage 3) volledig
globalThis ✅

Web Platform-API's (WHATWG / W3C, geen TC39)

Naast pure ECMAScript levert Phasis verschillende gelaagde pakketten met Web API's die praktijkbibliotheken van JS vooraf controleren. Bekijk Web-API's voor het volledige overzicht en conformiteit per gebied.

Pakket Globals WPT
Web Platform URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (alias van globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, Body-mixin, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, volledige WHATWG Streams (ReadableStream, WritableStream, TransformStream, wachtrijstrategieën, BYOB), CompressionStream / DecompressionStream (zlib + optionele brotli via ext-brotli), navigator 100 %¹
Crypto crypto.getRandomValues, crypto.randomUUID, volledige SubtleCrypto (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (constructor + RFC 6455-framecodec, vervangbaar transport via setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (gelaagd over het fetchtransport, waardoor beleids-hooks van toepassing zijn) 100 %
Eventloop setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) n.v.t. (getest met oracle)

¹ Exclusief toegestane subtests in de compressietestbestanden: de brotli-cases die ext-brotli nodig hebben, en de cases met invoer op basis van SharedArrayBuffer (EXPECTED_FAILURES in tests/Wpt/WptTest.php).

Alle andere geïmporteerde Web Platform Tests slagen — zie Web-API's voor het conformiteitsoverzicht.

Wat nog niet is geïmplementeerd

  • SharedArrayBuffer-workersemantiek buiten één agent — atomaire notificatie tussen meerdere threads van het echte besturingssysteem vereist pcntl en staat niet op de roadmap. Atomaire bewerkingen binnen één agent werken.
  • Intl.Segmenter met graphemeclusters waarvoor ICU 76+ nodig is — afhankelijk van de versie van de intl-extensie van de host-PHP.

Versiebeheer

Phasis volgt semver. De versiereeks volgt de concepten van de ECMAScript-specificatie:

Phasis-versie Specificatiedoel Stage 3-voorstellen
0.x ES2024 decorators, Temporal, expliciet resourcebeheer, iteratorhelpers, setmethoden

Een verhoging naar 1.0 is afhankelijk van de implementatie van elk Stage 4-voorstel in het ES2025-concept en stabiele semantiek voor het leegmaken van Promise's.