Pokročilé
Interné fungovanie. Ak vkladáte Phasis do iného prostredia, túto časť môžete preskočiť. Ak upravujete engine, každá stránka tu je kľúčová.
Stránky
- Architektúra — ako sa zdrojový kód mení na vykonávanie: lexer → parser → AST → kompilácia do bajtkódu → bajtkódový VM so záložným stromovým interpretom. Načítavač modulov, prostredia realm a úloha
Phasis\Engineako hranice realm. - Bajtkódový VM — množina opkódov, dispečovacia slučka, inline cache, rýchla cesta transpileru zdrojového kódu JsToPhp, heuristika canSkipEnvAlloc podľa tvaru funkcie a kedy volania využívajú bajtkódovú cestu namiesto stromového interpreta.
- Benchmarky — aktuálne výsledky
bench/, ako ich interpretovať, prečo je ~100× V8 ustáleným stropom stromových interpretov a čo by zmenšilo rozdiel. - Testovanie — model oracle. Každá zmena sa overuje voči trom nezávislým oracle: Node.js (referenčná špecifikácia V8), test262 a testovacej sade populárnych knižníc na úrovni bajtov.
Zásady prispievania
- Nemeňte jadro enginu bez vážneho dôvodu. Všetko v
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/leží na kritickej ceste test262. Úprava bez zodpovedajúceho overenia test262 môže viesť k regresiám. Vstavané funkcie (src/BuiltIn/) sú bezpečnejšie, pretože čiastkové testovacie sady test262 pre každú vstavanú funkciu zachytia problémy lokálne. - Na organizáciu používajte traits, nie triedy. Keď súbor prekročí približne 2K riadkov, rozdeľte ho na súbory s traits v podriadenom adresári (
src/BuiltIn/Temporal/,src/Runtime/Parts/atď.), namiesto vytvárania nových tried — zachováte funkčnosť vyhľadávaniaself::a neporušíte rozhranie privátnych metód API. - Pred odoslaním zmien spustite lokálne
bin/verify-all. Spustí PHPStan, PHPCS, všetky testovacie sady PHPUnit (unit, oracle, popular, wpt) a regresné testy oracle. CI spúšťa sady WPT a popular pri zmenách vsrc/; úplná matica test262 sa spúšťa manuálne, preto lokálne otestujte dotknuté kategórie test262. - Pri každom pridaní webového API pridajte fixture WPT. Vložte
.any.jsztests/Wpt/upstream/<area>/dotests/Wpt/fixtures/<category>/a runner ho automaticky nájde.
Pozrite si aj
- Kompatibilita — ako sa merajú výstupy oracle.
- CLI referencia —
bin/phasis,bin/test262,bin/wpt.