Haladó
Belső részletek. Ha a Phasis elemet ágyazza be, ezt a részt átugorhatja. Ha a motort módosítja, az itt leírt minden oldal alapvető fontosságú.
Oldalak
- Architektúra — hogyan lesz a forrásból végrehajtás: lexer → parser → AST → bytecode-fordítás → bytecode VM, fa-bejárásos tartalékúttal. Modulbetöltő, realm-ek, a
Phasis\Engineszerepe a realm határaként. - Bytecode VM — opkódkészlet, diszpécserciklus, inline gyorsítótárak, a JsToPhp forráskód-transzpiler gyorsútja, a függvény alakján alapuló canSkipEnvAlloc heurisztika, valamint hogy mikor futnak a hívások bytecode-úton, és mikor fa-bejárásos úton.
- Benchmarkok — aktuális
bench/eredmények, értelmezésük, miért körülbelül 100× V8 a fa-bejárásos értelmezők állandósult állapotú felső határa, és mi csökkentené a különbséget. - Tesztelés — az oracle-modell. Minden módosítást három független orákulummal ellenőrzünk: Node.js (a V8 specifikációs alapigazság), test262 és a népszerű könyvtárak bájtegyezési tesztcsomagja.
Közreműködési konvenciók
- Alapos indok nélkül ne nyúljon a motor magjához. A
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/alatti elemek a test262 kritikus útvonalon vannak. A megfelelő test262 ellenőrzés nélküli módosításuk könnyen regresszióhoz vezet. A beépített elemek (src/BuiltIn/) biztonságosabbak, mert minden beépített elemhez a test262 altesztcsomag helyben észleli a hibákat. - Szervezéshez használjon trait-eket, ne osztályokat. Ha egy fájl meghaladja a körülbelül 2 ezer sort, bontsa szét a testvérkönyvtárban található trait-fájlokra (
src/BuiltIn/Temporal/,src/Runtime/Parts/stb.), ne hozzon létre új osztályokat — így működnek aself::keresések, és nem sérül a privátmetódusok API felülete. - Beküldés előtt futtassa helyben a
bin/verify-allparancsot. Ez futtatja a PHPStan, PHPCS, az összes PHPUnit tesztcsomagot (unit, oracle, popular, wpt) és az oracle-regressziós tesztet. A CI a WPT- és népszerűteszt-csomagokat futtatja, ha a módosítás asrc/fájljait érinti; a teljes test262 mátrixot kézzel indítják, ezért helyben tesztelje az érintett test262 kategóriákat. - Minden Web API kiegészítéshez adjon hozzá WPT-fixture-t. Helyezze a
.any.jselemet atests/Wpt/upstream/<area>/helyről atests/Wpt/fixtures/<category>/alá, és a futtató automatikusan megtalálja.
Lásd még
- Kompatibilitás — hogyan mérjük az oracle kimeneteit.
- CLI referencia —
bin/phasis,bin/test262,bin/wpt.