Μετάβαση στο περιεχόμενο

Κάλυψη προδιαγραφών

Το Phasis στοχεύει στην τρέχουσα προδιαγραφή ECMAScript (ES2024+) και παρακολουθεί τις προτάσεις TC39 στο Στάδιο 3 και άνω. Αυτή η σελίδα είναι το ευανάγνωστο ευρετήριο όσων έχουν πράγματι υλοποιηθεί.

Γλώσσα

Δυνατότητα Κατάσταση
Λεξικές δηλώσεις (let, const) με TDZ ✅
Εμβέλεια μπλοκ, συνάρτησης και μονάδας ✅
Συναρτήσεις βέλους (με λεξικό this) ✅
Προεπιλεγμένες παράμετροι, παράμετροι rest, spread ✅
Αποδόμηση (πίνακα, αντικειμένου, εμφωλευμένη, με προεπιλογές, rest) ✅
Συμβολοσειρές προτύπων, πρότυπα με ετικέτες ✅
Υπολογιζόμενα ονόματα ιδιοτήτων ✅
Συντομευμένες ιδιότητες και μέθοδοι ✅
Κλάσεις — κατασκευαστές, μέθοδοι, getters/setters, static ✅
Πεδία κλάσεων (δημόσια, ιδιωτικά, static) ✅
Ιδιωτικές μέθοδοι και προσπελαστές ✅
super σε μεθόδους και κατασκευαστές ✅
Decorators (Στάδιο 3) ✅
Μπλοκ αρχικοποίησης static ✅
Προαιρετική αλυσιδωτή κλήση (?.), σύντηξη nullish (??) ✅
Τελεστές λογικής εκχώρησης (&&=, ||=, ??=) ✅
Διαχωριστικά αριθμητικών τιμών (1_000_000) ✅
Κυριολεκτικές τιμές BigInt (123n) και τελεστές ✅
Ασύγχρονες συναρτήσεις, ασύγχρονοι generators, await ανώτατου επιπέδου ✅
Generators (σύγχρονοι και ασύγχρονοι) ✅
for…of, for…in, for await…of ✅
Iterators και iterables (Symbol.iterator) ✅
Πρωτογενείς τιμές Symbol και γνωστά σύμβολα ✅
Μονάδες ES Modules (import / export, δυναμικό import()) ✅
import.meta ✅
import attributes (Στάδιο 3) ✅
Strict mode + παλαιές συμπεριφορές Annex B ✅
Κανονικές εκφράσεις (/u, /v, /d, ονομασμένες ομάδες, lookbehind) ✅
Αυτόματη εισαγωγή ελληνικών ερωτηματικών (ASI) ✅
Γραμματική hashbang (#!/usr/bin/env phasis) ✅
Ορθές κλήσεις ουράς σε strict mode (ES2015, απαιτούνται από την προδιαγραφή) ✅

Τυπική βιβλιοθήκη

Θεμελιώδη

Αντικείμενο Κάλυψη
Object πλήρης — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries κ.ά.
Array πλήρης — κάθε μέθοδος πρωτοτύπου, συμπεριλαμβανομένων των at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String πλήρης — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number πλήρης — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER κ.ά.
BigInt πλήρης — αυθαίρετη ακρίβεια μέσω bcmath
Boolean πλήρης
Math πλήρης — κάθε μέθοδος και κάθε ειδική περίπτωση για NaN / Infinity / -0
JSON πλήρης — parse, stringify, προσαρμοσμένοι replacers, reviver, εσοχή
Symbol πλήρης — for, keyFor, όλα τα γνωστά σύμβολα, Symbol.toPrimitive
Function πλήρης — call, apply, bind, length, name, σημασιολογία prototype

Συλλογές

Αντικείμενο Κάλυψη
Map πλήρης — συμπεριλαμβανομένων των groupBy και της ζωντανής επανάληψης
Set πλήρης — συμπεριλαμβανομένων των intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry πλήρης

Ασύγχρονα

Αντικείμενο Κάλυψη
Promise πλήρης — all, race, any, allSettled, withResolvers, ασύγχρονη επανάληψη
AsyncIterator, AsyncGenerator πλήρης
Χρονοπρογραμματισμός microtask ✅

Δυαδικά δεδομένα

Αντικείμενο Κάλυψη
ArrayBuffer, SharedArrayBuffer πλήρης
DataView πλήρης — getBigInt64, setBigInt64 κ.ά.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array πλήρης
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync πλήρης (μόνο ένας agent)

Αναστοχασμός και διακομιστές μεσολάβησης

Αντικείμενο Κάλυψη
Proxy και οι 13 παγίδες, με δυνατότητα ανάκλησης
Reflect και οι 14 στατικές μέθοδοι

Σφάλματα

Αντικείμενο Κάλυψη
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError πλήρης
AggregateError πλήρης
SuppressedError (ρητή διαχείριση πόρων Stage 3) πλήρης

Ημερομηνίες και ώρα

Αντικείμενο Κάλυψη
Date πλήρης
Temporal (Stage 3) πλήρης — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (συμπερ. εβραϊκού, κινεζικού, Dangi, αιθιοπικού κ.ά.)

Διεθνοποίηση

Αντικείμενο Κάλυψη
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter πλήρης (αναθέτει στην επέκταση intl του PHP όταν είναι διαθέσιμη)

Διαχείριση πόρων

Αντικείμενο Κάλυψη
DisposableStack, AsyncDisposableStack (Stage 3) πλήρης
Symbol.dispose, Symbol.asyncDispose πλήρης
δηλώσεις using / await using πλήρης

Άλλα

Αντικείμενο Κάλυψη
RegExp (συμπερ. σημειογραφίας συνόλων /v, επώνυμων captures, lookaround, sticky/global flags) πλήρης
βοηθητικά Iterator (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find πλήρης
ShadowRealm (Stage 3) πλήρης
globalThis ✅

API πλατφόρμας Ιστού (WHATWG / W3C, όχι TC39)

Πέρα από την καθαρή ECMAScript, το Phasis παρέχει πολλά επίπεδα πακέτων Web API, για τα οποία οι βιβλιοθήκες JS πραγματικών εφαρμογών εκτελούν εκ των προτέρων ελέγχους. Δείτε το Web APIs για την πλήρη επιφάνεια και τη συμμόρφωση ανά τομέα.

Πακέτο Καθολικά αντικείμενα WPT
Web Platform URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (ψευδώνυμο του globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, mixin Body, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, πλήρη WHATWG Streams (ReadableStream, WritableStream, TransformStream, στρατηγικές ουράς, BYOB), CompressionStream / DecompressionStream (zlib + προαιρετικό brotli μέσω ext-brotli), navigator 100 %¹
Crypto crypto.getRandomValues, crypto.randomUUID, πλήρες 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, αντικαταστάσιμη μεταφορά μέσω setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (βασίζεται στη μεταφορά fetch, οπότε ισχύουν τα hooks πολιτικής) 100 %
Event loop setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) δεν εφαρμόζεται (δοκιμές oracle)

¹ Εξαιρούνται τα επιτρεπόμενα υποτεστ στις δοκιμές συμπίεσης: οι περιπτώσεις brotli, που χρειάζονται ext-brotli, και όσες περνούν είσοδο που βασίζεται στο SharedArrayBuffer (EXPECTED_FAILURES στο tests/Wpt/WptTest.php).

Όλα τα άλλα εισαγόμενα Web Platform Tests περνούν — δείτε το Web APIs για την ανάλυση συμμόρφωσης.

Τι δεν έχει υλοποιηθεί ακόμη

  • Σημασιολογία worker του SharedArrayBuffer πέρα από έναν agent — η ατομική ειδοποίηση πολλών νημάτων σε πραγματικά νήματα λειτουργικού συστήματος απαιτεί pcntl και δεν βρίσκεται στον σχεδιασμό. Τα atomics ενός agent λειτουργούν.
  • Intl.Segmenter με συμπλέγματα γραφημάτων που χρειάζονται ICU 76+ — εξαρτάται από την έκδοση της επέκτασης intl του host PHP.

Εκδόσεις

Το Phasis ακολουθεί το semver. Η γραμμή έκδοσης παρακολουθεί τα προσχέδια προδιαγραφών ECMAScript:

έκδοση Phasis στόχος προδιαγραφής προτάσεις Stage 3
0.x ES2024 decorators, Temporal, ρητή διαχείριση πόρων, βοηθητικά iterator, μέθοδοι set

Η μετάβαση στην έκδοση 1.0 προϋποθέτει την υλοποίηση κάθε πρότασης Stage 4 του προσχεδίου ES2025 και σταθερή σημασιολογία εκκένωσης Promise.