Aller au contenu

Surface de la spécification

Phasis cible la spécification ECMAScript actuelle (ES2024+) et suit les propositions du TC39 au stade 3 et au-delà. Cette page constitue l'index lisible par un humain de ce qui est effectivement fourni.

Langage

Fonctionnalité État
Déclarations lexicales (let, const) avec TDZ ✅
Portée de bloc, portée de fonction, portée de module ✅
Fonctions fléchées (avec this lexical) ✅
Paramètres par défaut, paramètres rest, spread ✅
Déstructuration (tableaux, objets, imbrication, valeurs par défaut, rest) ✅
Littéraux de gabarit, gabarits marqués ✅
Noms de propriétés calculés ✅
Propriétés et méthodes abrégées ✅
Classes — constructeurs, méthodes, accesseurs, statiques ✅
Champs de classe (publics, privés, statiques) ✅
Méthodes et accesseurs privés ✅
super dans les méthodes et les constructeurs ✅
Décorateurs (stade 3) ✅
Blocs d'initialisation statiques ✅
Chaînage optionnel (?.), coalescence des valeurs nulles (??) ✅
Opérateurs d'affectation logique (&&=, ||=, ??=) ✅
Séparateurs numériques (1_000_000) ✅
Littéraux BigInt (123n) et opérateurs ✅
Fonctions asynchrones, générateurs asynchrones, await au niveau supérieur ✅
Générateurs (synchrones et asynchrones) ✅
for…of, for…in, for await…of ✅
Itérateurs et itérables (Symbol.iterator) ✅
Primitifs Symbol et symboles bien connus ✅
Modules ES (import / export, import() dynamique) ✅
import.meta ✅
import attributes (stade 3) ✅
Mode strict et comportements hérités de l'Annex B ✅
Expressions régulières (/u, /v, /d, groupes nommés, lookbehind) ✅
Insertion automatique de points-virgules (ASI) ✅
Grammaire hashbang (#!/usr/bin/env phasis) ✅
Appels terminaux optimisés en mode strict (ES2015, exigés par la spécification) ✅

Bibliothèque standard

Fondamentaux

Objet Couverture
Object complète — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries, etc.
Array complète — toutes les méthodes de prototype, dont at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String complète — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number complète — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER, etc.
BigInt complète — précision arbitraire via bcmath
Boolean complète
Math complète — toutes les méthodes, tous les cas particuliers pour NaN / Infinity / -0
JSON complète — parse, stringify, remplaçants personnalisés, reviver, indentation
Symbol complète — for, keyFor, tous les symboles bien connus, Symbol.toPrimitive
Function complète — sémantique de call, apply, bind, length, name, prototype

Collections

Objet Couverture
Map complète — y compris groupBy et l'itération en temps réel
Set complète — y compris intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry complète

Asynchrone

Objet Couverture
Promise complète — all, race, any, allSettled, withResolvers, itération asynchrone
AsyncIterator, AsyncGenerator complète
Ordonnancement des microtâches ✅

Données binaires

Objet Couverture
ArrayBuffer, SharedArrayBuffer complète
DataView complète — getBigInt64, setBigInt64, etc.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array complète
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync complète (agent unique uniquement)

Réflexion et proxys

Objet Couverture
Proxy les 13 pièges, révocables
Reflect les 14 méthodes statiques

Erreurs

Objet Couverture
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError complète
AggregateError complète
SuppressedError (gestion explicite des ressources, étape 3) complète

Dates et heures

Objet Couverture
Date complète
Temporal (étape 3) complète — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (y compris l'hébreu, le chinois, le Dangi, l'éthiopien, etc.)

Internationalisation

Objet Couverture
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter complète (délègue à l'extension intl de PHP lorsqu'elle est disponible)

Gestion des ressources

Objet Couverture
DisposableStack, AsyncDisposableStack (étape 3) complète
Symbol.dispose, Symbol.asyncDispose complète
Déclarations using / await using complètes

Autres

Objet Couverture
RegExp (y compris la notation d'ensemble /v, les captures nommées, les assertions de recherche et les indicateurs sticky/global) complète
Assistants Iterator (étape 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find complète
ShadowRealm (étape 3) complète
globalThis ✅

API de la plateforme Web (WHATWG / W3C, hors TC39)

Au-delà d'ECMAScript, Phasis fournit plusieurs ensembles d'API Web à plusieurs niveaux, que les bibliothèques JS du monde réel vérifient au préalable. Consultez API Web pour découvrir toute la surface et la conformité par domaine.

Ensemble Globals WPT
Plateforme Web URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (alias de globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, mixin Body, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, Streams WHATWG complets (ReadableStream, WritableStream, TransformStream, stratégies de mise en file d'attente, BYOB), CompressionStream / DecompressionStream (zlib + brotli facultatif via ext-brotli), navigator 100 %¹
Crypto crypto.getRandomValues, crypto.randomUUID, SubtleCrypto complet (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (constructeur + codec de trames RFC 6455, transport remplaçable via setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (au-dessus du transport fetch, les hooks de stratégie s'appliquent donc) 100 %
Boucle d'événements setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (étape 3) s.o. (testé par oracle)

¹ À l'exclusion des sous-tests autorisés dans les jeux de tests de compression : les cas brotli, qui nécessitent ext-brotli, et ceux qui utilisent une entrée reposant sur SharedArrayBuffer (EXPECTED_FAILURES dans tests/Wpt/WptTest.php).

Tous les autres tests importés de la plateforme Web réussissent — consultez API Web pour le détail de la conformité.

Fonctionnalités pas encore implémentées

  • Sémantique des workers SharedArrayBuffer au-delà d'un seul agent — la notification atomique multithread entre de vrais threads du système d'exploitation nécessite pcntl et n'est pas prévue. Les opérations atomiques sur un seul agent fonctionnent.
  • Intl.Segmenter avec des graphèmes nécessitant ICU 76+ — dépend de la version de l'extension intl du PHP hôte.

Gestion des versions

Phasis suit le versionnage sémantique. La branche de version suit les brouillons de spécification ECMAScript :

Version de Phasis Cible de la spécification Propositions de l'étape 3
0.x ES2024 décorateurs, Temporal, gestion explicite des ressources, assistants d'itération, méthodes d'ensemble

Le passage à la version 1.0 dépend de l'implémentation de toutes les propositions de l'étape 4 dans le brouillon ES2025 et de la stabilité de la sémantique de vidage des Promises.