
# Erweitert

Die Interna. Wenn du Phasis einbettest, kannst du diesen Abschnitt überspringen. Wenn du die Engine änderst, ist jede Seite hier unverzichtbar.

## Seiten

- **[Architektur](https://phasis.inline0.dev/de/docs/advanced/architecture)** – wie aus Quellcode ausführbarer Code wird: Lexer → Parser → AST → Bytecode-Kompilierung → Bytecode-VM mit Tree-Walker-Fallback. Modul-Loader, Realms und die Rolle von `Phasis\Engine` als Realm-Grenze.
- **[Bytecode-VM](https://phasis.inline0.dev/de/docs/advanced/bytecode-vm)** – Opcode-Satz, Dispatch-Schleife, Inline-Caches, der schnelle JsToPhp-Quellcode-Transpilerpfad, die canSkipEnvAlloc-Heuristik für Funktionsformen und der Weg, den Aufrufe über den Bytecode-Pfad oder den Tree-Walker nehmen.
- **[Benchmarks](https://phasis.inline0.dev/de/docs/advanced/benchmarks)** – aktuelle `bench/`-Werte, ihre Interpretation, warum etwa 100× V8 die Obergrenze im stabilen Zustand für Tree-Walker sind und was den Abstand verringern würde.
- **[Tests](https://phasis.inline0.dev/de/docs/advanced/testing)** – das Oracle-Modell. Jede Änderung wird mit drei unabhängigen Oracles überprüft: Node.js (V8 als Referenz für die Spezifikation), test262 und der Byte-Gleichheitssuite für beliebte Libraries.

## Konventionen für Beiträge

- **Fasse die zentrale Engine nur mit gutem Grund an.** Alles unter `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` liegt auf dem kritischen Pfad von test262. Änderungen ohne entsprechende test262-Verifikation führen leicht zu Regressionen. Integrierte Funktionen (`src/BuiltIn/`) sind sicherer, weil die test262-Teilsuiten für jede Funktion Fehler lokal erkennen.
- **Verwende Traits zur Organisation, keine Klassen.** Wenn eine Datei über etwa 2K Zeilen hat, teile sie in Trait-Dateien in einem Unterverzeichnis auf (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` usw.), statt neue Klassen anzulegen – so bleiben `self::`-Nachschlagevorgänge funktionsfähig und die Oberfläche der privaten Methoden API bleibt intakt.
- **Führe `bin/verify-all` vor dem Push lokal aus.** Es führt PHPStan, PHPCS, alle PHPUnit-Suites (unit, oracle, popular, wpt) und die Oracle-Regression aus. CI führt die WPT- und Popular-Suites bei Änderungen an `src/` aus; die vollständige test262-Matrix wird manuell gestartet, also prüfe betroffene test262-Kategorien lokal stichprobenartig.
- **Ergänze für jede Web-API-Erweiterung ein WPT-Fixture.** Lege das `.any.js` aus `tests/Wpt/upstream/<area>/` in `tests/Wpt/fixtures/<category>/` ab; der Runner erkennt es automatisch.

## Siehe auch

- [Kompatibilität](https://phasis.inline0.dev/de/docs/compatibility) – so werden die Oracle-Ausgaben gemessen.
- [CLI-Referenz](https://phasis.inline0.dev/de/docs/cli) – `bin/phasis`, `bin/test262`, `bin/wpt`.
