
# Avansat

Detalii interne. Dacă integrați Phasis, puteți sări peste această secțiune. Dacă modificați motorul, fiecare pagină de aici este esențială.

## Pagini

- **[Arhitectură](https://phasis.inline0.dev/ro/docs/advanced/architecture)** — cum devine sursa execuție: lexer → parser → AST → compilare bytecode → VM de bytecode cu fallback la parcurgătorul arborescent. Încărcătorul de module, realm-urile, rolul lui `Phasis\Engine` ca limită a realm-ului.
- **[VM de bytecode](https://phasis.inline0.dev/ro/docs/advanced/bytecode-vm)** — setul de opcoduri, bucla de dispatch, cache-urile inline, calea rapidă de transp ilare a sursei JsToPhp, euristica canSkipEnvAlloc pentru formele funcțiilor, când apelurile folosesc calea de bytecode și când parcurgătorul arborescent.
- **[Benchmark-uri](https://phasis.inline0.dev/ro/docs/advanced/benchmarks)** — valorile curente `bench/`, cum să le interpretați, de ce ~100× V8 este plafonul în regim stabil pentru parcurgătoarele arborescente și ce ar reduce diferența.
- **[Testare](https://phasis.inline0.dev/ro/docs/advanced/testing)** — modelul oracle. Fiecare modificare este verificată față de trei surse independente de referință: Node.js (adevărul de referință al specificației V8), test262 și suita de egalitate octet cu octet pentru biblioteci populare.

## Convenții pentru contribuții

- **Nu modificați motorul de bază fără un motiv întemeiat.** Tot ce se află sub `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` face parte din calea critică test262. Modificarea acestuia fără o verificare corespunzătoare test262 duce aproape sigur la regresii. Funcționalitățile încorporate (`src/BuiltIn/`) sunt mai sigure, deoarece sub-suiturile test262 pentru fiecare funcționalitate încorporată detectează local problemele.
- **Folosiți trait-uri pentru organizare, nu clase.** Când un fișier depășește aproximativ 2K de linii, împărțiți-l în fișiere trait într-un director alăturat (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` etc.), în loc să creați clase noi — astfel, căutările `self::` continuă să funcționeze și evitați să afectați suprafața metodelor private API.
- **Rulați `bin/verify-all` local înainte de a trimite modificările.** Acesta rulează PHPStan, PHPCS, fiecare suită PHPUnit (unit, oracle, popular, wpt) și testul de regresie oracle. CI rulează suitele WPT și popular la modificări aduse `src/`; matricea completă test262 este pornită manual, așa că testați local categoriile test262 afectate.
- **Adăugați un fixture WPT pentru fiecare element Web API nou.** Puneți `.any.js` din `tests/Wpt/upstream/<area>/` în `tests/Wpt/fixtures/<category>/`, iar runnerul îl va prelua.

## Consultați și

- [Compatibilitate](https://phasis.inline0.dev/ro/docs/compatibility) — cum sunt măsurate rezultatele oracle.
- [ReferințăCLI ](https://phasis.inline0.dev/ro/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
