Lewati ke konten

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\Engine sebagai 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 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