Preskoči na vsebino

Združljivost

Phasis je preverjen s tremi neodvisnimi viri:

  1. test262 — uradna zbirka testov skladnosti TC39 ECMAScript. 100 % različice, določene v repozitoriju.
  2. Web Platform Tests — uradna zbirka WHATWG / W3C za spletne API-je, ki niso del ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kodiranje, URL, structured-clone, abort, hr-time, atob, crypto). 100 % uvoženega korpusa.
  3. Priljubljene knjižnice — 204 pogosto uporabljanih paketov npm (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) se izvede z enakimi bajti kot Node.js.

V primerjavi z drugimi pogoni

Pogon test262 Opombe
Phasis 100 % Čisti PHP. Cilja na ES2024+.
V8 (Node, Chrome) 99.8 % Referenčni pogon C++.
SpiderMonkey (Firefox) 99.6 % Referenčni pogon C++.
JavaScriptCore (Safari) 99.4 % Referenčni pogon C++.
QuickJS ~97 % Lahek vgradljiv pogon v jeziku C.
Hermes (izvorni React) ~95 % Vgradljiv pogon, optimiziran za mobilne naprave.

Številke iz test262.fyi. Phasis je v najvišjem razredu skupaj s produkcijskimi brskalniškimi pogoni.

Strani

  • test262 pokritost — kaj se testira, kako se izvaja zbirka in zakaj je pomembno 100%.
  • Spletni API-ji (WPT) — Web Platform Pack in Fetch Pack: URL, kodiranje, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams ter crypto, WebSocket in XMLHttpRequest.
  • Tokovi — celoten standard WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, strategije čakalnih vrst, asinhrona iteracija.
  • Priljubljeni paketi — enakost bajtov, preverjena v CI, z Node.js za 204 paketov npm na področjih razčlenjevanja, predlog, preverjanja veljavnosti, datumov in časa, matematike, zgoščevanja, iskanja in primerjanja razlik, barv, obravnave URL ter drugje.
  • Površina specifikacije — vse vgrajene funkcije ECMAScript, sintaktične zmožnosti in objekti standardne knjižnice, ki jih ponuja Phasis.
  • Znane omejitve — področja, kjer Phasis namerno odstopa od V8: omejitve zmogljivosti, sočasnost več agentov, Wasm in spletni API-ji, ki so na voljo samo v brskalniku.

Kako se meri

  • test262 — bin/test262 zažene zbirko lokalno. Celotna matrika se izvaja v poteku dela compat-matrix.yml, ki se zažene ročno in ne ob vsakem potisku; uspešen zagon shrani posnetek v COMPAT.md, kjer je zabeleženo, kdaj je bil posnet in za katero objavo. Različica zbirke je določena s podmodulom test262 git.
  • Web Platform Tests — bin/wpt zažene uvožene preizkusne primere. Potek dela wpt.yml jih zažene ob potiskih v main in zahtevah za vključitev sprememb, ki spremenijo src/, preizkusne primere ali datoteke Composer.
  • Priljubljene knjižnice — composer test zažene PHPUnit, vključno z zbirko testov enakosti bajtov priljubljenih knjižnic pod tests/Popular/. Potek dela popular.yml jih zažene z enakim filtrom poti in znova ustvari tudi vse referenčne rezultate v pravem Node, zato se zastarel referenčni rezultat zazna ob posodobitvi vključene knjižnice.

Regresija v WPT ali priljubljenem paketu povzroči neuspeh zahteve za vključitev sprememb, ki jo je uvedla. Regresija test262 se pokaže ob naslednjem zagonu matrike.