Vai al contenuto

Copertura delle specifiche

Phasis ha come obiettivo la specifica ECMAScript attuale (ES2024+) e segue le proposte TC39 allo Stage 3 e superiori. Questa pagina è l'indice leggibile di ciò che è effettivamente incluso.

Linguaggio

Funzionalità Stato
Dichiarazioni lessicali (let, const) con TDZ ✅
Ambito di blocco, di funzione e di modulo ✅
Funzioni freccia (con this lessicale) ✅
Parametri predefiniti, parametri rest, spread ✅
Destrutturazione (array, oggetti, annidata, valori predefiniti, rest) ✅
Template literal e template literal con tag ✅
Nomi di proprietà calcolati ✅
Proprietà e metodi abbreviati ✅
Classi — costruttori, metodi, getter/setter, statici ✅
Campi di classe (pubblici, privati, statici) ✅
Metodi e accessor privati ✅
super in metodi e costruttori ✅
Decorator (Stage 3) ✅
Blocchi di inizializzazione statici ✅
Chaining opzionale (?.), coalescenza dei nullish (??) ✅
Operatori di assegnazione logica (&&=, ||=, ??=) ✅
Separatore numerico (1_000_000) ✅
Literal BigInt (123n) e operatori ✅
Funzioni asincrone, generatori asincroni, await a livello superiore ✅
Generator (sincroni e asincroni) ✅
for…of, for…in, for await…of ✅
Iterator e iterabili (Symbol.iterator) ✅
Primitivi Symbol e simboli noti ✅
Moduli ES (import / export, import() dinamico) ✅
import.meta ✅
import attributes (Stage 3) ✅
Modalità strict + comportamenti legacy di Annex B ✅
Espressioni regolari (/u, /v, /d, gruppi con nome, lookbehind) ✅
Inserimento automatico del punto e virgola (ASI) ✅
Grammatica hashbang (#!/usr/bin/env phasis) ✅
Tail call ottimali in modalità strict (ES2015, richieste dalla specifica) ✅

Libreria standard

Fondamentali

Oggetto Copertura
Object completa — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries, ecc.
Array completa — tutti i metodi prototype, inclusi at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String completa — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number completa — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER, ecc.
BigInt completa — precisione arbitraria tramite bcmath
Boolean completa
Math completa — tutti i metodi e tutti i casi speciali per NaN / Infinity / -0
JSON completa — parse, stringify, replacer personalizzati, reviver, indentazione
Symbol completa — for, keyFor, tutti i simboli noti, Symbol.toPrimitive
Function completa — semantica di call, apply, bind, length, name, prototype

Collezioni

Oggetto Copertura
Map completa — include groupBy e iterazione live
Set completa — include intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry completa

Asincrono

Oggetto Copertura
Promise completa — all, race, any, allSettled, withResolvers, iterazione asincrona
AsyncIterator, AsyncGenerator completa
Pianificazione dei microtask ✅

Dati binari

Oggetto Copertura
ArrayBuffer, SharedArrayBuffer completa
DataView completa — getBigInt64, setBigInt64, ecc.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array completa
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync completa (solo singolo agente)

Reflection e proxy

Oggetto Copertura
Proxy tutte le 13 trap, revocabile
Reflect tutti i 14 metodi statici

Errori

Oggetto Copertura
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError completa
AggregateError completa
SuppressedError (gestione esplicita delle risorse, Stage 3) completa

Date e orari

Oggetto Copertura
Date completa
Temporal (Stage 3) completa — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (incl. ebraico, cinese, Dangi, etiope, ecc.)

Internazionalizzazione

Oggetto Copertura
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter completa (si affida all'estensione intl di PHP quando disponibile)

Gestione delle risorse

Oggetto Copertura
DisposableStack, AsyncDisposableStack (Stage 3) completa
Symbol.dispose, Symbol.asyncDispose completa
dichiarazioni using / await using completa

Altro

Oggetto Copertura
RegExp (incl. notazione insiemistica /v, catture con nome, lookaround, flag sticky/globali) completa
helper Iterator (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find completa
ShadowRealm (Stage 3) completa
globalThis ✅

API della piattaforma Web (WHATWG / W3C, non TC39)

Oltre al solo ECMAScript, Phasis include diversi pacchetti stratificati di API Web per cui le librerie JS del mondo reale eseguono controlli preliminari. Consultate API Web per la copertura completa e la conformità per area.

Pacchetto Globali WPT
Piattaforma Web URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (alias di globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, mixin Body, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, WHATWG Streams complete (ReadableStream, WritableStream, TransformStream, strategie di accodamento, BYOB), CompressionStream / DecompressionStream (zlib + brotli opzionale tramite ext-brotli), navigator 100 %¹
Crittografia crypto.getRandomValues, crypto.randomUUID, SubtleCrypto completa (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (costruttore + codec di frame RFC 6455, trasporto sostituibile tramite setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (basati sul trasporto fetch, quindi si applicano gli hook delle policy) 100 %
Ciclo degli eventi setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) n/a (test oracle)

¹ Esclusi i sottotest autorizzati nei test di compressione: i casi brotli, che richiedono ext-brotli, e i casi che ricevono input basato su SharedArrayBuffer (EXPECTED_FAILURES in tests/Wpt/WptTest.php).

Tutti gli altri Web Platform Tests importati vengono superati: consultate API Web per il dettaglio della conformità.

Funzionalità non ancora implementate

  • Semantica dei worker SharedArrayBuffer oltre il singolo agente — la notifica atomica multithread tra thread reali del sistema operativo richiede pcntl e non è prevista nella roadmap. Gli atomici con un singolo agente funzionano.
  • Intl.Segmenter con cluster di grafemi che richiedono ICU 76+ — dipende dalla versione dell'estensione intl del PHP host.

Versioni

Phasis segue il versionamento semantico. La versione segue le bozze delle specifiche ECMAScript:

Versione Phasis Specifica di riferimento Proposte Stage 3
0.x ES2024 decorator, Temporal, gestione esplicita delle risorse, helper per iteratori, metodi per set

Il passaggio alla versione 1.0 è subordinato all'implementazione di tutte le proposte Stage 4 della bozza ES2025 e alla stabilità della semantica di svuotamento di Promise.