Vai al contenuto

Compatibilità

Phasis viene verificato rispetto a tre oracoli indipendenti:

  1. test262 — la suite ufficiale di conformità ECMAScript di TC39. 100 % della revisione fissata nel repository.
  2. Web Platform Tests — la suite ufficiale WHATWG / W3C per le Web API non ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, codifica, URL, structured-clone, abort, hr-time, atob, crypto). 100 % del corpus importato.
  3. Librerie diffuse — 204 pacchetti npm molto usati (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) vengono eseguiti con risultati identici byte per byte a Node.js.

Confronto con altri motori

Motore test262 Note
Phasis 100 % PHP puro. Destinazione ES2024+.
V8 (Node, Chrome) 99.8 % Motore C++ di riferimento.
SpiderMonkey (Firefox) 99.6 % Motore C++ di riferimento.
JavaScriptCore (Safari) 99.4 % Motore C++ di riferimento.
QuickJS ~97 % Motore leggero in C, integrabile.
Hermes (React Native) ~95 % Motore integrabile ottimizzato per dispositivi mobili.

Dati da test262.fyi. Phasis è nella fascia più alta, insieme ai motori dei browser di produzione.

Pagine

  • test262 copertura — cosa viene testato, come viene eseguita la suite e perché 100% è importante.
  • Web APIs (WPT) — Web Platform Pack e Fetch Pack: URL, codifica, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, oltre a crypto, WebSocket e XMLHttpRequest.
  • Streams — intero standard WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, strategie di accodamento, iterazione asincrona.
  • Pacchetti diffusi — verifica dell'equivalenza byte per byte con Node.js per 204 pacchetti npm, soggetta ai controlli CI, relativi ad analisi, templating, convalida, date e orari, matematica, hashing, ricerca e confronto, colori, gestione URL e altro.
  • Superficie delle specifiche — ogni funzione integrata, caratteristica sintattica e oggetto della libreria standard inclusi in Phasis.
  • Limitazioni note — dove Phasis diverge intenzionalmente da V8: limiti di prestazioni, concorrenza multi-agent, Wasm, Web API disponibili solo nel browser.

Come vengono effettuate le misurazioni

  • test262 — bin/test262 esegue la suite localmente. La matrice completa viene eseguita nel workflow compat-matrix.yml, avviato manualmente e non a ogni push; al termine, un'esecuzione riuscita aggiunge lo snapshot a COMPAT.md, che registra quando è stato creato e su quale commit. La revisione della suite è quella fissata dal sottomodulo git test262.
  • Web Platform Tests — bin/wpt esegue i fixture importati. Il workflow wpt.yml li esegue sui push a main e sulle pull request che modificano src/, i fixture o i file Composer.
  • Librerie diffuse — composer test esegue PHPUnit, inclusa la suite di equivalenza byte per byte delle librerie diffuse in tests/Popular/. Il workflow popular.yml la esegue con lo stesso filtro sui percorsi e rigenera anche ogni oracolo con Node reale, così rileva un oracolo non aggiornato quando viene aggiornata una libreria inclusa.

Una regressione nei WPT o nei pacchetti diffusi fa fallire la pull request che la introduce. Una regressione test262 viene rilevata alla successiva esecuzione della matrice.