Išplėstinė dalis
Vidinė sandara. Jei Phasis įterpiate į savo programą, šį skyrių galite praleisti. Jei keičiate variklį, kiekvienas čia esantis puslapis yra būtinas.
Puslapiai
- Architektūra — kaip šaltinio kodas virsta vykdymu: leksinė analizė → analizatorius → AST → baitkodo kompiliavimas → baitkodo VM su atsarginiu medžio vaikščiojimo interpretatoriumi. Modulių įkėliklis, sritys,
Phasis\Enginevaidmuo kaip srities riba. - Baitkodo VM — opkodų rinkinys, vykdymo ciklas, tiesioginės talpyklos, JsToPhp šaltinio transpiliatoriaus spartusis kelias, funkcijos formos euristika canSkipEnvAlloc ir tai, kada iškvietimai vykdomi baitkodo keliu, o kada — medžio vaikščiojimo interpretatoriumi.
- Našumo bandymai — dabartiniai
bench/skaičiai, kaip juos interpretuoti, kodėl ~100× V8 yra pastovi medžio vaikščiojimo interpretatorių riba ir kas padėtų ją peržengti. - Testavimas — etaloninių rezultatų modelis. Kiekvienas pakeitimas tikrinamas pagal tris nepriklausomus etalonus: Node.js (V8 specifikacijos etaloną), test262 ir populiarių bibliotekų baitų lygybės testų rinkinį.
Prisidėjimo prie projekto taisyklės
- Nelieskite pagrindinio variklio be rimtos priežasties. Viskas, kas yra
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/, yra test262 kritiniame vykdymo kelyje. Jį keisti neatlikus atitinkamo test262 patikrinimo — tiesus kelias į regresijas. Integruotos funkcijos yra saugesnės, nes kiekvienos jų test262 testų poaibiai lokaliai aptinkasrc/BuiltIn/gedimus. - Organizuokite kodą naudodami trait'us, o ne klases. Kai failas viršija ~2K eilučių, suskaidykite jį į trait failus gretimame kataloge (
src/BuiltIn/Temporal/,src/Runtime/Parts/ir kt.), užuot kūrę naujas klases — taip veikiaself::paieška ir nepažeidžiama privačių metodų API sąsaja. - Prieš siųsdami pakeitimus paleiskite
bin/verify-alllokaliai. Jis paleidžia PHPStan, PHPCS, visus PHPUnit rinkinius (unit, oracle, popular, wpt) ir etalonų regresijos testą. CI paleidžia WPT ir populiarių bibliotekų rinkinius, kai pakeičiamasrc/; visą test262 matricą reikia paleisti rankiniu būdu, todėl lokaliai išbandykite paveiktas test262 kategorijas. - Prie kiekvienos Web API naujos funkcijos pridėkite WPT fikstūrą. Įdėkite
.any.jsištests/Wpt/upstream/<area>/įtests/Wpt/fixtures/<category>/, ir vykdyklė ją aptiks.
Taip pat žr.
- Suderinamumas — kaip matuojami etaloniniai rezultatai.
- CLI nuoroda —
bin/phasis,bin/test262,bin/wpt.