Preskoči na vsebino

Obseg specifikacije

Phasis cilja na trenutno specifikacijo ECMAScript (ES2024+) in spremlja predloge TC39 na stopnji 3 ali višje. Ta stran je berljiv seznam tega, kar je dejansko vključeno.

Jezik

Funkcija Stanje
Leksikalne deklaracije (let, const) s časovno mrtvo cono (TDZ) ✅
Obseg bloka, obseg funkcije, obseg modula ✅
Puščične funkcije (z leksikalnim this) ✅
Privzeti parametri, preostali parametri, razširjanje ✅
Razčlenjevanje na sestavne dele (polja, objekti, gnezdena struktura, privzete vrednosti, preostali elementi) ✅
Nizi predlog, označene predloge ✅
Izračunana imena lastnosti ✅
Skrajšane lastnosti in metode ✅
Razredi — konstruktorji, metode, dostopniki, statične metode ✅
Polja razredov (javna, zasebna, statična) ✅
Zasebne metode in dostopniki ✅
super v metodah in konstruktorjih ✅
Dekoratorji (3. stopnja) ✅
Statični inicializacijski bloki ✅
Izbirno veriženje (?.), združevanje z ničelno vrednostjo (??) ✅
Logični operatorji prirejanja (&&=, ||=, ??=) ✅
Ločila v številskih literalih (1_000_000) ✅
Literali BigInt (123n) in operatorji ✅
Asinhrone funkcije, asinhroni generatorji, await na najvišji ravni ✅
Generatorji (sinhroni in asinhroni) ✅
for…of, for…in, for await…of ✅
Iteratorji in iterabilni objekti (Symbol.iterator) ✅
Primitivi Symbol in znani simboli ✅
Moduli ES (import / export, dinamični import()) ✅
import.meta ✅
import attributes (3. stopnja) ✅
Strogi način + podedovano vedenje Annex B ✅
Regularni izrazi (/u, /v, /d, poimenovane skupine, preverjanje vnaprej) ✅
Samodejno vstavljanje podpičij (ASI) ✅
Slovnica hashbang (#!/usr/bin/env phasis) ✅
Pravilni repni klici v strogem načinu (ES2015, zahtevani s specifikacijo) ✅

Standardna knjižnica

Osnovno

Objekt Pokritost
Object polna — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries in drugo
Array polna — vse metode prototipa, vključno z at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String polna — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number polna — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER in drugo
BigInt polna — poljubna natančnost prek bcmath
Boolean polna
Math polna — vse metode, vsi posebni primeri za NaN / Infinity / -0
JSON polna — parse, stringify, lastni nadomestki, oživljalnik, zamiki
Symbol polna — for, keyFor, vsi znani simboli, Symbol.toPrimitive
Function polna — semantika call, apply, bind, length, name, prototype

Zbirke

Objekt Pokritost
Map polna — vključno z groupBy in sprotnim iteriranjem
Set polna — vključno z intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry polna

Asinhrono

Objekt Pokritost
Promise polna — all, race, any, allSettled, withResolvers, asinhrona iteracija
AsyncIterator, AsyncGenerator polna
Razporejanje mikroopravil ✅

Binarni podatki

Objekt Pokritost
ArrayBuffer, SharedArrayBuffer polna
DataView polna — getBigInt64, setBigInt64 in drugo
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array polna
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync polna (samo z enim izvajalnim sklopom)

Refleksija in posredniki

Predmet Pokritost
Proxy vseh 13 pasti, preklicljive
Reflect vseh 14 statičnih metod

Napake

Predmet Pokritost
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError popolna
AggregateError popolna
SuppressedError (upravljanje virov, stopnja 3) popolna

Datumi in čas

Predmet Pokritost
Date popolna
Temporal (stopnja 3) popolna — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (vključno s hebrejskim, kitajskim, dangi, etiopskim itd.)

Internacionalizacija

Predmet Pokritost
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter popolna (če je na voljo, uporabi razširitev intl za PHP)

Upravljanje virov

Predmet Pokritost
DisposableStack, AsyncDisposableStack (stopnja 3) popolna
Symbol.dispose, Symbol.asyncDispose popolna
deklaraciji using / await using popolna

Drugo

Predmet Pokritost
RegExp (vključno z zapisom množic /v, poimenovanimi zajemi, iskanjem v okolici, zastavicama sticky/global) popolna
pomožni funkciji Iterator (stopnja 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find popolna
ShadowRealm (stopnja 3) popolna
globalThis ✅

API-ji spletne platforme (WHATWG / W3C, ne TC39)

Poleg čistega ECMAScript Phasis ponuja več slojev paketov API-jev spleta, za katere knjižnice JS v praksi vnaprej preverijo podporo. Za celoten nabor in skladnost po področjih glejte API-je spleta.

Paket Globalni objekti WPT
Spletna platforma URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (vzdevek za globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, Body mixin, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, celoten WHATWG Streams (ReadableStream, WritableStream, TransformStream, strategije čakanja v vrsti, BYOB), CompressionStream / DecompressionStream (zlib + neobvezni brotli prek ext-brotli), navigator 100 %¹
Kriptografija crypto.getRandomValues, crypto.randomUUID, celoten SubtleCrypto (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (konstruktor + kodirnik okvirjev RFC 6455, zamenljiv prenos prek setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (zgrajen na prenosu fetch, zato veljajo kavlji pravilnikov) 100 %
Zanka dogodkov setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (stopnja 3) n/a (preverjeno z oracle)

¹ Izključeni so podtesti s seznama dovoljenih v testnih primerih stiskanja: primeri brotli, ki potrebujejo ext-brotli, in primeri, ki prejmejo vhod, podprt z SharedArrayBuffer (EXPECTED_FAILURES v tests/Wpt/WptTest.php).

Vsi drugi uvoženi testi Web Platform Tests so uspešni — razčlenitev skladnosti si oglejte pri API-jih spleta.

Kaj še ni implementirano

  • Semantika delavcev SharedArrayBuffer zunaj enega agenta — večnitno atomsko obveščanje med dejanskimi nitmi OS zahteva pcntl in ni v načrtu. Atomske operacije znotraj enega agenta delujejo.
  • Intl.Segmenter z grafemskimi skupinami, ki zahtevajo ICU 76+ — odvisno je od različice razširitve intl gostiteljevega PHP.

Različice

Phasis upošteva semantično različičenje. Veja različice sledi osnutkom specifikacije ECMAScript:

Različica Phasis Ciljna specifikacija Predlogi stopnje 3
0.x ES2024 dekoratorji, Temporal, izrecno upravljanje virov, pomožne funkcije za iteratorje, metode množic

Prehod na 1.0 je pogojen z implementacijo vseh predlogov stopnje 4 iz osnutka ES2025 in stabilno semantiko praznjenja Promise.