Täpsem teave
Sisemised üksikasjad. Kui manustate Phasis, võite selle jaotise vahele jätta. Kui muudate mootorit, on kõik siinsed lehed olulised.
Lehed
- Arhitektuur — kuidas lähtekoodist saab täitmine: leksikaalne analüüs → parser → AST → baidikoodi kompileerimine → baidikoodi virtuaalmasin koos puupõhise interpretaatori varuteega. Moodulilaadija, käituskeskkonnad ja
Phasis\Engineroll käituskeskkonna piirina. - Baidikoodi virtuaalmasin — opkoodide hulk, väljakutsesilmus, inline-vahemälud, JsToPhpi lähtekoodi transpileerimise kiirtee, funktsiooni kuju heuristik canSkipEnvAlloc ning millal liiguvad kutsed baidikoodi teed ja millal puupõhisesse interpretaatorisse.
- Võrdlustestid — praegused
bench/näitajad, nende tõlgendamine, miks ~100× V8 on puupõhiste interpretaatorite püsiv jõudluspiir ja kuidas vahet vähendada. - Testimine — võrdlusmudel. Iga muudatust kontrollitakse kolme sõltumatu võrdlusallikaga: Node.js (V8 spetsifikatsiooni tõeväärtus), test262 ja populaarsete teekide baiditäpsuse komplekt.
Kaastöö tegemise tavad
- Ära muuda mootori tuuma ilma mõjuva põhjuseta. Kõik asukohas
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/kuulub test262 kriitilisele rajale. Selle muutmine ilma vastava test262 kontrollita toob tõenäoliselt kaasa regressioone. Sisseehitatud funktsioonid (src/BuiltIn/) on ohutumad, sest iga funktsiooni test262 alamkomplekt tuvastab rikked kohapeal. - Kasuta korraldamiseks trait'e, mitte klasse. Kui fail ületab umbes 2K rida, jaga see kõrvalkataloogi trait-failideks (
src/BuiltIn/Temporal/,src/Runtime/Parts/jne), selle asemel et luua uusi klasse — nii töötavadself::otsingud edasi ja privaatmeetodi API liides ei katke. - Käivita
bin/verify-allenne koodi üleslaadimist lokaalselt. See käivitab PHPStan, PHPCS, kõik PHPUnit komplektid (unit, oracle, popular, wpt) ja võrdlusregressiooni. CI käivitab WPT ja popular-komplektid muudatuste korral asukohassrc/; täielik test262 maatriks käivitatakse käsitsi, seega vali mõjutatud test262 kategooriad ja käivita need lokaalselt. - Iga Web API lisamise jaoks lisa WPT testjuht. Tõsta
.any.jsasukohasttests/Wpt/upstream/<area>/asukohtatests/Wpt/fixtures/<category>/ning käitaja leiab selle automaatselt.