
# Papildu informācija

Iekšējā uzbūve. Ja iegulstat Phasis, šo sadaļu varat izlaist. Ja modificējat dzinēju, katra lapa šeit ir būtiska.

## Lapas

- **[Arhitektūra](https://phasis.inline0.dev/lv/docs/advanced/architecture)** — kā avota kods kļūst par izpildi: leksiskais analizators → parsētājs → AST → baitkoda kompilēšana → baitkoda VM ar koka interpretatora rezerves ceļu. Moduļu ielādētājs, vides un `Phasis\Engine` loma kā vides robežai.
- **[Baitkoda VM](https://phasis.inline0.dev/lv/docs/advanced/bytecode-vm)** — opkodu kopa, dispečēšanas cikls, iekļautās kešatmiņas, JsToPhp pirmkoda pārveidotāja ātrais ceļš, funkcijas formas heuristika canSkipEnvAlloc un gadījumi, kad izsaukumi izmanto baitkoda ceļu, nevis koka interpretatoru.
- **[Etalona testi](https://phasis.inline0.dev/lv/docs/advanced/benchmarks)** — pašreizējie `bench/` rādītāji, kā tos interpretēt, kāpēc ~100× V8 ir stabila veiktspējas robeža koka interpretatoriem un kas palīdzētu samazināt atšķirību.
- **[Testēšana](https://phasis.inline0.dev/lv/docs/advanced/testing)** — etalonprogrammas modelis. Katra izmaiņa tiek pārbaudīta, salīdzinot ar trim neatkarīgām etalonprogrammām: Node.js (V8 specifikācijas patiesības avots), test262 un populāro bibliotēku baitu vienādības testu kopu.

## Ieteikumi ieguldījumam projektā

- **Nepārveidojiet dzinēja kodolu bez nopietna iemesla.** Viss, kas atrodas `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/`, ir iekļauts test262 kritiskajā ceļā. Tā pārveidošana bez attiecīgas test262 pārbaudes var izraisīt regresijas. Iebūvētās funkcijas (`src/BuiltIn/`) ir drošākas, jo katras iebūvētās funkcijas test262 apakškopas palīdz lokāli atklāt bojājumus.
- **Kārtošanai izmantojiet trait, nevis klases.** Ja fails pārsniedz aptuveni 2K rindu, sadaliet to trait failos blakus esošajā direktorijā (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` u.c.), nevis veidojiet jaunas klases — tā `self::` uzmeklēšana turpina darboties un netiek pārtraukta privāto metožu API saskarne.
- **Pirms koda nosūtīšanas lokāli palaidiet `bin/verify-all`.** Tā izpilda CI noteikto kvalitātes pārbaudi: PHPStan, PHPCS, visas PHPUnit testu kopas (unit, oracle, popular, wpt) un etalonprogrammas regresijas testu. CI palaiž WPT un populāro bibliotēku testu kopas, mainot `src/`; pilno test262 matricu palaiž manuāli, tāpēc lokāli pārbaudiet ietekmētās test262 kategorijas.
- **Katram Web API papildinājumam pievienojiet WPT testa paraugu.** Ievietojiet `.any.js` no `tests/Wpt/upstream/<area>/` mapē `tests/Wpt/fixtures/<category>/`, un izpildītājs to automātiski atradīs.

## Skatiet arī

- [Saderība](https://phasis.inline0.dev/lv/docs/compatibility) — kā tiek mērītas etalonprogrammas izvades.
- [CLI atsauce](https://phasis.inline0.dev/lv/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
