
# Geavanceerd

De interne werking. Als u Phasis insluit, kunt u dit gedeelte overslaan. Als u de engine aanpast, is elke pagina hier essentieel.

## Pagina's

- **[Architectuur](https://phasis.inline0.dev/nl/docs/advanced/architecture)** — hoe broncode uitvoering wordt: lexer → parser → AST → bytecodecompilatie → bytecode-VM met tree-walker-terugval. Modulelader, realms en de rol van `Phasis\Engine` als grens van de realm.
- **[Bytecode-VM](https://phasis.inline0.dev/nl/docs/advanced/bytecode-vm)** — opcode-set, dispatchlus, inline caches, het snelle brontranspilatiepad van JsToPhp, de heuristiek canSkipEnvAlloc voor functie-vormen en wanneer aanroepen het bytecodepad of de tree-walker volgen.
- **[Benchmarks](https://phasis.inline0.dev/nl/docs/advanced/benchmarks)** — huidige `bench/`-cijfers, hoe u die interpreteert, waarom ~100× V8 het plafond in steady state is voor tree-walkers en hoe het verschil kleiner kan worden.
- **[Testen](https://phasis.inline0.dev/nl/docs/advanced/testing)** — het oracle-model. Elke wijziging wordt gecontroleerd aan de hand van drie onafhankelijke oracles: Node.js (de feitelijke specificatie van V8), test262 en de suite die bytegelijkheid met populaire bibliotheken controleert.

## Afspraken voor bijdragen

- **Raak de core-engine alleen aan als daar een sterke reden voor is.** Alles onder `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` ligt op het kritieke test262-pad. Dit aanraken zonder bijbehorende test262-verificatie leidt geheid tot regressies. Ingebouwde functies (`src/BuiltIn/`) zijn veiliger, omdat de test262-subsets voor elke ingebouwde functie problemen lokaal opsporen.
- **Gebruik traits voor de organisatie, geen classes.** Als een bestand meer dan ongeveer 2K regels bevat, splits het dan op in trait-bestanden onder een aangrenzende map (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/`, enz.) in plaats van nieuwe classes te maken. Zo blijven `self::`-zoekopdrachten werken en wordt voorkomen dat het oppervlak van privé-methoden API wordt doorbroken.
- **Voer `bin/verify-all` lokaal uit voordat je pusht.** Het voert PHPStan, PHPCS, elke PHPUnit-suite (unit, oracle, popular, wpt) en de oracle-regressietest uit. CI voert bij wijzigingen in `src/` de WPT- en popular-suites uit; de volledige matrix van test262 wordt handmatig gestart. Test daarom lokaal de categorieën van test262 die door de wijziging zijn geraakt.
- **Voeg voor elke toevoeging aan het Web API een WPT-fixture toe.** Plaats de `.any.js` uit `tests/Wpt/upstream/<area>/` in `tests/Wpt/fixtures/<category>/`; de runner pikt die dan op.

## Zie ook

- [Compatibiliteit](https://phasis.inline0.dev/nl/docs/compatibility) — hoe de oracle-uitvoer wordt gemeten.
- [CLI-referentie](https://phasis.inline0.dev/nl/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
