Avanceret
Internt stof. Hvis du indlejrer Phasis, kan du springe dette afsnit over. Hvis du ændrer motoren, er alle sider her afgørende.
Sider
- Arkitektur — sådan bliver kildekode til eksekvering: lexer → parser → AST → bytekodekompilering → bytekode-VM med tree-walker-fallback. Modulloadefunktion, realms og
Phasis\Engine's rolle som realm-grænse. - Bytekode-VM — opkodesæt, dispatch-løkke, inline-caches, JsToPhp-kildekodetranspileringens hurtige sti, heuristikken canSkipEnvAlloc for funktionsform, og hvornår kald følger bytekodestien kontra tree-walkeren.
- Benchmarks — aktuelle
bench/-tal, hvordan de skal fortolkes, hvorfor ~100× V8 er den stabile øvre grænse for tree-walkere, og hvad der kan mindske forskellen. - Testning — oracle-modellen. Hver ændring verificeres mod tre uafhængige orakler: Node.js (V8-specifikationens facit), test262 og testsuiten for byte-identitet i populære biblioteker.
Konventioner for bidrag
- Rør ikke ved motorens kerne uden en god grund. Alt under
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/ligger på test262's kritiske sti. Ændres det uden en tilsvarende test262-verifikation, kan det føre til regressioner. Indbyggede funktioner (src/BuiltIn/) er sikrere, fordi test262's undertests for hver enkelt indbygget funktion fanger fejl lokalt. - Brug traits til organisering, ikke klasser. Når en fil overstiger ~2K linjer, skal den opdeles i trait-filer i en søstermappe (
src/BuiltIn/Temporal/,src/Runtime/Parts/osv.) i stedet for at oprette nye klasser — det holderself::-opslagene i gang og undgår at bryde overfladen for private metoder API. - Kør
bin/verify-alllokalt før push. Den kører PHPStan, PHPCS, alle PHPUnit-suiter (unit, oracle, popular, wpt) og oracle-regressionstesten. CI kører WPT- og popular-suiterne ved ændringer isrc/; den fulde test262-matrix startes manuelt, så kør lokalt test262-kategorier, der påvirkes. - Tilføj en WPT-fixture for hver tilføjelse af Web API. Læg
.any.jsfratests/Wpt/upstream/<area>/itests/Wpt/fixtures/<category>/, så finder runneren den.
Se også
- Kompatibilitet — sådan måles oracle-resultaterne.
- CLI-reference —
bin/phasis,bin/test262,bin/wpt.