
# Pokročilé

Interní fungování. Pokud Phasis vkládáte do jiné aplikace, můžete tuto sekci přeskočit. Pokud engine upravujete, každá stránka zde je zásadní.

## Stránky

- **[Architektura](https://phasis.inline0.dev/cs/docs/advanced/architecture)** — jak se zdrojový kód mění ve vykonávání: lexer → parser → AST → kompilace bajtového kódu → VM pro bajtový kód se záložním průchodem stromem. Načítání modulů, realmů a role `Phasis\Engine` jako hranice realmu.
- **[VM pro bajtový kód](https://phasis.inline0.dev/cs/docs/advanced/bytecode-vm)** — sada opkódů, smyčka zpracování, inline cache, rychlá cesta transpilátoru zdrojového kódu JsToPhp, heuristika canSkipEnvAlloc pro tvar funkce a kdy volání používají cestu bajtového kódu oproti průchodu stromem.
- **[Srovnávací testy](https://phasis.inline0.dev/cs/docs/advanced/benchmarks)** — aktuální výsledky `bench/`, jejich výklad, proč je přibližně 100× V8 ustáleným limitem průchodu stromem a co by rozdíl zmenšilo.
- **[Testování](https://phasis.inline0.dev/cs/docs/advanced/testing)** — model referenční implementace. Každá změna se ověřuje vůči třem nezávislým referenčním zdrojům: Node.js (specifikace V8 jako zdroj pravdy), test262 a testovací sadě ověřující shodu bajtů oblíbených knihoven.

## Zásady přispívání

- **Bez silného důvodu nezasahujte do jádra enginu.** Vše pod `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` leží na kritické cestě test262. Úpravy bez odpovídajícího ověření test262 snadno způsobí regresi. Vestavěné funkce (`src/BuiltIn/`) jsou bezpečnější, protože podskupiny testů test262 pro každou vestavěnou funkci zachytí problémy přímo.
- **K organizaci používejte traity, ne třídy.** Když soubor přesáhne přibližně 2 tisíce řádků, rozdělte jej do souborů s traity v sousedním adresáři (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` atd.), místo abyste vytvářeli nové třídy — zachováte tak funkčnost vyhledávání `self::` a nenarušíte rozhraní API privátních metod.
- **Před odesláním změn spusťte lokálně `bin/verify-all`.** Spouští PHPStan, PHPCS, všechny sady PHPUnit (unit, oracle, popular, wpt) a regresní test referenční implementace. CI spouští sady WPT a popular při změnách v `src/`; úplná matice test262 se spouští ručně, proto lokálně vyberte dotčené kategorie test262.
- **Ke každému doplnění Web API přidejte přípravek WPT.** Vložte `.any.js` z `tests/Wpt/upstream/<area>/` do `tests/Wpt/fixtures/<category>/` a runner jej automaticky zahrne.

## Viz také

- [Kompatibilita](https://phasis.inline0.dev/cs/docs/compatibility) — jak se měří výstupy referenční implementace.
- [Reference CLI](https://phasis.inline0.dev/cs/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
