Lanjutan
Bagian internal. Jika Anda menyematkan Phasis, Anda dapat melewati bagian ini. Jika Anda memodifikasi engine, setiap halaman di sini sangat penting.
Halaman
- Arsitektur — bagaimana sumber menjadi eksekusi: lexer → parser → AST → kompilasi bytecode → VM bytecode dengan fallback tree-walker. Pemuat modul, realm, peran
Phasis\Enginesebagai batas realm. - VM Bytecode — 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 — angka
bench/terkini, cara menafsirkannya, alasan ~100× V8 menjadi batas steady-state bagi tree-walker, dan hal yang dapat memperkecil kesenjangan. - Pengujian — 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 pencarianself::tetap berfungsi dan menghindari kerusakan pada permukaan API metode privat. - Jalankan
bin/verify-allsecara 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 padasrc/; 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.jsdaritests/Wpt/upstream/<area>/ketests/Wpt/fixtures/<category>/dan runner akan mengambilnya.
Lihat juga
- Kompatibilitas — cara mengukur keluaran oracle.
- CLI referensi —
bin/phasis,bin/test262,bin/wpt.