Compatibilità
Phasis viene verificato rispetto a tre oracoli indipendenti:
- test262 — la suite ufficiale di conformità ECMAScript di TC39. 100 % della revisione fissata nel repository.
- 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.
- 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/test262esegue la suite localmente. La matrice completa viene eseguita nel workflowcompat-matrix.yml, avviato manualmente e non a ogni push; al termine, un'esecuzione riuscita aggiunge lo snapshot aCOMPAT.md, che registra quando è stato creato e su quale commit. La revisione della suite è quella fissata dal sottomodulo gittest262. - Web Platform Tests —
bin/wptesegue i fixture importati. Il workflowwpt.ymlli esegue sui push amaine sulle pull request che modificanosrc/, i fixture o i file Composer. - Librerie diffuse —
composer testesegue PHPUnit, inclusa la suite di equivalenza byte per byte delle librerie diffuse intests/Popular/. Il workflowpopular.ymlla 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.