
# Avanceret

Internt stof. Hvis du indlejrer Phasis, kan du springe dette afsnit over. Hvis du ændrer motoren, er alle sider her afgørende.

## Sider

- **[Arkitektur](https://phasis.inline0.dev/da/docs/advanced/architecture)** — sådan bliver kildekode til eksekvering: lexer → parser → AST → bytekodekompilering → bytekode-VM med tree-walker-fallback. Modulloadefunktion, realms og `Phasis\Engine`'s rolle som realm-grænse.
- **[Bytekode-VM](https://phasis.inline0.dev/da/docs/advanced/bytecode-vm)** — opkodesæt, dispatch-løkke, inline-caches, JsToPhp-kildekodetranspileringens hurtige sti, heuristikken canSkipEnvAlloc for funktionsform, og hvornår kald følger bytekodestien kontra tree-walkeren.
- **[Benchmarks](https://phasis.inline0.dev/da/docs/advanced/benchmarks)** — aktuelle `bench/`-tal, hvordan de skal fortolkes, hvorfor ~100× V8 er den stabile øvre grænse for tree-walkere, og hvad der kan mindske forskellen.
- **[Testning](https://phasis.inline0.dev/da/docs/advanced/testing)** — oracle-modellen. Hver ændring verificeres mod tre uafhængige orakler: Node.js (V8-specifikationens facit), test262 og testsuiten for byte-identitet i populære biblioteker.

## Konventioner for bidrag

- **Rør ikke ved motorens kerne uden en god grund.** Alt under `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` ligger på test262's kritiske sti. Ændres det uden en tilsvarende test262-verifikation, kan det føre til regressioner. Indbyggede funktioner (`src/BuiltIn/`) er sikrere, fordi test262's undertests for hver enkelt indbygget funktion fanger fejl lokalt.
- **Brug traits til organisering, ikke klasser.** Når en fil overstiger ~2K linjer, skal den opdeles i trait-filer i en søstermappe (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` osv.) i stedet for at oprette nye klasser — det holder `self::`-opslagene i gang og undgår at bryde overfladen for private metoder API.
- **Kør `bin/verify-all` lokalt før push.** Den kører PHPStan, PHPCS, alle PHPUnit-suiter (unit, oracle, popular, wpt) og oracle-regressionstesten. CI kører WPT- og popular-suiterne ved ændringer i `src/`; den fulde test262-matrix startes manuelt, så kør lokalt test262-kategorier, der påvirkes.
- **Tilføj en WPT-fixture for hver tilføjelse af Web API.** Læg `.any.js` fra `tests/Wpt/upstream/<area>/` i `tests/Wpt/fixtures/<category>/`, så finder runneren den.

## Se også

- [Kompatibilitet](https://phasis.inline0.dev/da/docs/compatibility) — sådan måles oracle-resultaterne.
- [CLI-reference](https://phasis.inline0.dev/da/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
