
# Lanjutan

Bagian internal. Jika Anda menyematkan Phasis, Anda dapat melewati bagian ini. Jika Anda memodifikasi engine, setiap halaman di sini sangat penting.

## Halaman

- **[Arsitektur](https://phasis.inline0.dev/id/docs/advanced/architecture)** — bagaimana sumber menjadi eksekusi: lexer → parser → AST → kompilasi bytecode → VM bytecode dengan fallback tree-walker. Pemuat modul, realm, peran `Phasis\Engine` sebagai batas realm.
- **[VM Bytecode](https://phasis.inline0.dev/id/docs/advanced/bytecode-vm)** — kumpulan opcode, loop dispatch, cache inline, jalur cepat transpiler sumber JsToPhp, heuristik function-shape canSkipEnvAlloc, kapan pemanggilan menggunakan jalur bytecode dibanding tree-walker.
- **[Tolok Ukur](https://phasis.inline0.dev/id/docs/advanced/benchmarks)** — angka `bench/` terkini, cara menafsirkannya, alasan ~100× V8 menjadi batas steady-state bagi tree-walker, dan hal yang dapat memperkecil kesenjangan.
- **[Pengujian](https://phasis.inline0.dev/id/docs/advanced/testing)** — model oracle. Setiap perubahan diverifikasi terhadap tiga oracle independen: Node.js (acuan kebenaran spesifikasi V8), test262, dan rangkaian pengujian kesamaan byte pustaka populer.

## Pedoman kontribusi

- **Jangan sentuh engine inti tanpa alasan kuat.** Apa pun yang berada di bawah `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` termasuk jalur kritis test262. Menyentuhnya tanpa verifikasi test262 yang sesuai dapat menyebabkan regresi. Built-in (`src/BuiltIn/`) lebih aman karena subrangkaian pengujian test262 untuk setiap built-in dapat mendeteksi kerusakan secara lokal.
- **Gunakan trait untuk pengorganisasian, bukan kelas.** Jika sebuah file melebihi ~2K baris, pisahkan menjadi file trait di direktori setara (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/`, dan seterusnya), alih-alih membuat kelas baru — ini menjaga agar pencarian `self::` tetap berfungsi dan menghindari kerusakan pada permukaan API metode privat.
- **Jalankan `bin/verify-all` secara lokal sebelum melakukan push.** Perintah ini menjalankan PHPStan, PHPCS, setiap rangkaian pengujian PHPUnit (unit, oracle, popular, wpt), serta regresi oracle. CI menjalankan rangkaian WPT dan popular saat ada perubahan pada `src/`; matriks test262 lengkap dijalankan secara manual, jadi lakukan sampling kategori test262 yang terdampak secara lokal.
- **Untuk setiap penambahan Web API, tambahkan fixture WPT.** Letakkan `.any.js` dari `tests/Wpt/upstream/<area>/` ke `tests/Wpt/fixtures/<category>/` dan runner akan mengambilnya.

## Lihat juga

- [Kompatibilitas](https://phasis.inline0.dev/id/docs/compatibility) — cara mengukur keluaran oracle.
- [CLI referensi](https://phasis.inline0.dev/id/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
