Avancerat
Interna detaljer. Om du bäddar in Phasis kan du hoppa över det här avsnittet. Om du ändrar motorn är varje sida här grundläggande.
Sidor
- Arkitektur — hur källkod blir till exekvering: lexer → parser → AST → bytekodskompilering → bytekod-VM med trädtolkarreservväg. Modulhanterare, kontexter och
Phasis\Engines roll som gräns mellan kontexter. - Bytekod-VM — uppsättningen opkoder, dispatchloopen, inline-cacherna, snabbvägen för källkodstranspilering med JsToPhp, heuristiken canSkipEnvAlloc för funktionsformer samt när anrop går via bytekodsvägen respektive trädtolkaren.
- Bänktester — aktuella
bench/-siffror, hur de ska tolkas, varför ~100× V8 är den stabila övre gränsen för trädtolkare och vad som skulle minska gapet. - Testning — orakelmodellen. Varje ändring verifieras mot tre oberoende orakel: Node.js (specifikationens facit för V8), test262 och sviten som kontrollerar byte-för-byte-likhet med populära bibliotek.
Bidragsriktlinjer
- Rör inte kärnmotorn utan starka skäl. Allt under
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/ligger på den test262 kritiska sökvägen. Att röra den utan motsvarande verifiering test262 är ett säkert recept på regressioner. Inbyggda funktioner (src/BuiltIn/) är säkrare eftersom test262 delsviterna för varje inbyggd funktion fångar upp problem lokalt. - Använd traits för organisering, inte klasser. När en fil överstiger ~2K rader, dela upp den i trait-filer i en syskonsökväg (
src/BuiltIn/Temporal/,src/Runtime/Parts/osv.) i stället för att bryta ut nya klasser — det hållerself::-sökningar fungerande och undviker att bryta ytan för privata metoder API. - Kör
bin/verify-alllokalt före push. Det kör PHPStan, PHPCS, varje PHPUnit-svit (unit, oracle, popular, wpt) och oracle-regressionstestet. CI kör WPT- och popular-sviterna vid ändringar isrc/; den fullständiga test262-matrisen startas manuellt, så testa berörda test262-kategorier lokalt. - Lägg till en WPT-fixture för varje tillägg till Web API. Lägg
.any.jsfråntests/Wpt/upstream/<area>/itests/Wpt/fixtures/<category>/så hittar köraren den.
Se även
- Kompatibilitet — hur oracle-resultaten mäts.
- CLI-referens —
bin/phasis,bin/test262,bin/wpt.