Ugrás a tartalomhoz

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\Engine szerepe 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 a self:: keresések, és nem sérül a privátmetódusok API felülete.
  • Beküldés előtt futtassa helyben a bin/verify-all parancsot. 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 a src/ 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.js elemet a tests/Wpt/upstream/<area>/ helyről a tests/Wpt/fixtures/<category>/ alá, és a futtató automatikusan megtalálja.

Lásd még