
# Lisäasetukset

Sisäisiä tietoja. Jos upotat Phasis-ratkaisun, voit ohittaa tämän osion. Jos muokkaat moottoria, jokainen tämän osion sivu on olennainen.

## Sivut

- **[Arkkitehtuuri](https://phasis.inline0.dev/fi/docs/advanced/architecture)** — miten lähdekoodista syntyy suoritus: leksikaalinen analyysi → jäsennin → AST → tavukoodin käännös → tavukoodi-VM ja varalla toimiva puun läpikäyjä. Moduulilataaja, realm-ympäristöt ja kohteen `Phasis\Engine` rooli realm-rajana.
- **[Tavukoodi-VM](https://phasis.inline0.dev/fi/docs/advanced/bytecode-vm)** — käskyjoukko, suorituslooppi, sisäiset välimuistit, JsToPhp-lähdekoodin transpiloiva nopea polku, funktiomuodon canSkipEnvAlloc-heuristiikka sekä se, milloin kutsut käyttävät tavukoodipolkua ja milloin puun läpikäyjää.
- **[Vertailutestit](https://phasis.inline0.dev/fi/docs/advanced/benchmarks)** — nykyiset `bench/`-tulokset, niiden tulkinta, miksi noin 100× V8 on puun läpikäyjien tasaisen suorituskyvyn yläraja ja mikä voisi kuroa eroa umpeen.
- **[Testaus](https://phasis.inline0.dev/fi/docs/advanced/testing)** — vertailumalli. Jokainen muutos varmennetaan kolmea toisistaan riippumatonta vertailukohtaa vasten: Node.js (V8-määrityksen totuudenlähde), test262 ja suositun kirjaston tavutasavertaisuuden testisarja.

## Osallistumiskäytännöt

- **Älä koske moottorin ytimeen ilman painavaa syytä.** Kohteissa `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/` ja `src/Regex/` oleva koodi on test262:n kriittisellä polulla. Niiden muokkaaminen ilman vastaavaa test262-varmennusta johtaa helposti regressioihin. Sisäänrakennetut toiminnot (`src/BuiltIn/`) ovat turvallisempia, koska niiden test262-alitestisarjat havaitsevat rikkoutumiset paikallisesti.
- **Käytä järjestelyyn traitteja, älä luokkia.** Kun tiedosto ylittää noin 2K riviä, jaa se trait-tiedostoihin sisarhakemistossa (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` jne.) uusien luokkien muodostamisen sijaan — näin `self::`-haut toimivat ja yksityisten metodien API-pinta säilyy.
- **Suorita `bin/verify-all` paikallisesti ennen työntämistä.** Se suorittaa PHPStan, PHPCS, jokaisen PHPUnit-testisarjan (yksikkö-, vertailu-, popular- ja wpt-testit) sekä vertailuregression. CI suorittaa WPT- ja popular-testisarjat, kun kohdetta `src/` muutetaan; koko test262-matriisi käynnistetään käsin, joten testaa paikallisesti muutokseen liittyviä test262-luokkia.
- **Lisää jokaista Web API -toimintoa varten WPT-testitiedosto.** Siirrä `.any.js` kohteesta `tests/Wpt/upstream/<area>/` kohteeseen `tests/Wpt/fixtures/<category>/`, niin suorittaja poimii sen mukaan.

## Katso myös

- [Yhteensopivuus](https://phasis.inline0.dev/fi/docs/compatibility) — miten vertailutulokset mitataan.
- [CLI-viite](https://phasis.inline0.dev/fi/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
