
# 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](https://phasis.inline0.dev/hu/docs/advanced/architecture)** — 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](https://phasis.inline0.dev/hu/docs/advanced/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](https://phasis.inline0.dev/hu/docs/advanced/benchmarks)** — 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](https://phasis.inline0.dev/hu/docs/advanced/testing)** — 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

- [Kompatibilitás](https://phasis.inline0.dev/hu/docs/compatibility) — hogyan mérjük az oracle kimeneteit.
- [CLI referencia](https://phasis.inline0.dev/hu/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
