Κάλυψη προδιαγραφών
Το 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
✅
Πέρα από την καθαρή 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.