Pāriet uz saturu

Specifikācijas aptvērums

Phasis ir paredzēts pašreizējai ECMAScript specifikācijai (ES2024+) un seko TC39 priekšlikumiem, kas sasnieguši 3. stadiju vai augstāku. Šī lapa ir cilvēkiem lasāms pārskats par to, kas faktiski ir ieviests.

Valoda

Funkcija Statuss
Leksiskās deklarācijas (let, const) ar TDZ ✅
Bloka, funkcijas un moduļa tvērums ✅
Bultfunkcijas (ar leksisko this) ✅
Noklusējuma parametri, atlikuma parametri, izkliedēšana ✅
Destrukturēšana (masīvs, objekts, ligzdoti elementi, noklusējumi, atlikuma vērtības) ✅
Veidņu literāļi, marķēti veidņu literāļi ✅
Aprēķināmi īpašumu nosaukumi ✅
Saīsinātās īpašību un metožu pieraksta formas ✅
Klases — konstruktori, metodes, iegūšanas un iestatīšanas metodes, statiskie elementi ✅
Klases lauki (publiski, privāti, statiski) ✅
Privātās metodes un piekļuves metodes ✅
super metodēs un konstruktoros ✅
Dekoratori (3. stadija) ✅
Statiskie inicializācijas bloki ✅
Izvēles ķēdēšana (?.), nullish apvienošana (??) ✅
Loģiskās piešķiršanas operatori (&&=, ||=, ??=) ✅
Skaitļu atdalītāji (1_000_000) ✅
BigInt literāļi (123n) un operatori ✅
Asinhronās funkcijas, asinhronie ģeneratori, augstākā līmeņa await ✅
Ģeneratori (sinhronie un asinhronie) ✅
for…of, for…in, for await…of ✅
Iteratori un iterējamie objekti (Symbol.iterator) ✅
Symbol primitīvie tipi un iepriekš definētie simboli ✅
ES moduļi (import / export, dinamiskais import()) ✅
import.meta ✅
import attributes (3. stadija) ✅
Stingrais režīms un Annex B mantotā darbība ✅
Regulārās izteiksmes (/u, /v, /d, nosauktas grupas, skatīšanās atpakaļ) ✅
Automātiska semikolu ievietošana (ASI) ✅
Hashbang gramatika (#!/usr/bin/env phasis) ✅
Pareizi beigu izsaukumi stingrajā režīmā (ES2015, prasīti specifikācijā) ✅

Standarta bibliotēka

Pamatobjekti

Objekts Aptvērums
Object pilns — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries u. c.
Array pilns — visas prototipa metodes, tostarp at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String pilns — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number pilns — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER u. c.
BigInt pilns — patvaļīga precizitāte, izmantojot bcmath
Boolean pilns
Math pilns — visas metodes un visi īpašie gadījumi saistībā ar NaN / Infinity / -0
JSON pilns — parse, stringify, pielāgoti aizvietotāji, reviver, atkāpes
Symbol pilns — for, keyFor, visi iepriekš definētie simboli, Symbol.toPrimitive
Function pilns — call, apply, bind, length, name, prototype semantika

Kolekcijas

Objekts Aptvērums
Map pilns — tostarp groupBy un iterācija ar aktuālajiem datiem
Set pilns — tostarp intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry pilns

Asinhronā darbība

Objekts Aptvērums
Promise pilns — all, race, any, allSettled, withResolvers, asinhronā iterācija
AsyncIterator, AsyncGenerator pilns
Mikrouzdevumu plānošana ✅

Binārie dati

Objekts Aptvērums
ArrayBuffer, SharedArrayBuffer pilns
DataView pilns — getBigInt64, setBigInt64 u. c.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array pilns
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync pilns (tikai viena aģenta režīmā)

Refleksija un starpniekobjekti

Objekts Aptvērums
Proxy visi 13 slazdi, atsaucams
Reflect visas 14 statiskās metodes

Kļūdas

Objekts Aptvērums
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError pilns
AggregateError pilns
SuppressedError (3. stadijas skaidra resursu pārvaldība) pilns

Datumi un laiks

Objekts Aptvērums
Date pilns
Temporal (3. stadija) pilns — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (tostarp ebreju, ķīniešu, Dangi, etiopiešu u. c.)

Internacionalizācija

Objekts Aptvērums
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter pilns (ja pieejams, izmanto PHP intl paplašinājumu)

Resursu pārvaldība

Objekts Aptvērums
DisposableStack, AsyncDisposableStack (3. stadija) pilns
Symbol.dispose, Symbol.asyncDispose pilns
using / await using deklarācijas pilns

Cits

Objekts Aptvērums
RegExp (tostarp /v kopu pieraksts, nosauktas tveršanas grupas, skatīšanās uz priekšu un atpakaļ, lipīgie/globālie karodziņi) pilns
Iterator palīgfunkcijas (3. stadija) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find pilns
ShadowRealm (3. stadija) pilns
globalThis ✅

Tīmekļa platformas API (WHATWG / W3C, nav TC39 daļa)

Papildus pašam ECMAScript, Phasis piedāvā vairākas Web API pakotņu kārtas, ko reālās pasaules JS bibliotēkas pārbauda iepriekš. Pilnu funkciju klāstu un atbilstību katrā jomā skatiet lapā Tīmekļa API.

Pakotne Globālie objekti WPT
Tīmekļa platforma URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (globalThis aizstājvārds), DOMException 100 %
Fetch fetch, Request, Response, Headers, Body papildinājums, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, pilna WHATWG plūsmu saskarne (ReadableStream, WritableStream, TransformStream, rindas stratēģijas, BYOB), CompressionStream / DecompressionStream (zlib un neobligāts brotli, izmantojot ext-brotli), navigator 100 %¹
Kriptogrāfija crypto.getRandomValues, crypto.randomUUID, pilns SubtleCrypto (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (konstruktors un RFC 6455 kadru kodētājs un dekodētājs, aizstājams transports, izmantojot setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (veidots virs fetch transporta, tāpēc darbojas politiku āķi) 100 %
Notikumu cikls setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (3. stadija) n/a (pārbaudīts ar oracle)

¹ Izņemot atļauto apakštestu kopas saspiešanas pārbaudēs: brotli gadījumus, kam nepieciešams ext-brotli, un gadījumus, kuros ievade balstīta uz SharedArrayBuffer (EXPECTED_FAILURES vidē tests/Wpt/WptTest.php).

Visi pārējie importētie Web Platform Tests izpildās sekmīgi — atbilstības pārskatu skatiet lapā Tīmekļa API.

Kas vēl nav ieviests

  • SharedArrayBuffer darbinieku semantika ārpus viena aģenta — atomārai paziņošanai starp vairākām īstām OS pavedienu kopām nepieciešams pcntl, un tas nav izstrādes plānos. Viena aģenta atomārās darbības darbojas.
  • Intl.Segmenter ar grafēmu kopām, kam nepieciešama ICU 76+ — atkarīgs no resursdatora PHP paplašinājuma versijas: intl.

Versiju veidošana

Phasis ievēro semver. Versiju līnija seko ECMAScript specifikācijas melnrakstiem:

Phasis versija Specifikācijas mērķis 3. stadijas priekšlikumi
0.x ES2024 dekoratori, Temporal, skaidra resursu pārvaldība, iteratoru palīgfunkcijas, kopu metodes

Versija 1.0 tiks izdota, kad būs ieviesti visi 4. stadijas priekšlikumi ES2025 melnrakstā un būs stabila Promise iztukšošanas semantika.