Papildu informācija
Iekšējā uzbūve. Ja iegulstat Phasis, šo sadaļu varat izlaist. Ja modificējat dzinēju, katra lapa šeit ir būtiska.
Lapas
- Arhitektūra — kā avota kods kļūst par izpildi: leksiskais analizators → parsētājs → AST → baitkoda kompilēšana → baitkoda VM ar koka interpretatora rezerves ceļu. Moduļu ielādētājs, vides un
Phasis\Engineloma kā vides robežai. - Baitkoda VM — opkodu kopa, dispečēšanas cikls, iekļautās kešatmiņas, JsToPhp pirmkoda pārveidotāja ātrais ceļš, funkcijas formas heuristika canSkipEnvAlloc un gadījumi, kad izsaukumi izmanto baitkoda ceļu, nevis koka interpretatoru.
- Etalona testi — pašreizējie
bench/rādītāji, kā tos interpretēt, kāpēc ~100× V8 ir stabila veiktspējas robeža koka interpretatoriem un kas palīdzētu samazināt atšķirību. - Testēšana — etalonprogrammas modelis. Katra izmaiņa tiek pārbaudīta, salīdzinot ar trim neatkarīgām etalonprogrammām: Node.js (V8 specifikācijas patiesības avots), test262 un populāro bibliotēku baitu vienādības testu kopu.
Ieteikumi ieguldījumam projektā
- Nepārveidojiet dzinēja kodolu bez nopietna iemesla. Viss, kas atrodas
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/, ir iekļauts test262 kritiskajā ceļā. Tā pārveidošana bez attiecīgas test262 pārbaudes var izraisīt regresijas. Iebūvētās funkcijas (src/BuiltIn/) ir drošākas, jo katras iebūvētās funkcijas test262 apakškopas palīdz lokāli atklāt bojājumus. - Kārtošanai izmantojiet trait, nevis klases. Ja fails pārsniedz aptuveni 2K rindu, sadaliet to trait failos blakus esošajā direktorijā (
src/BuiltIn/Temporal/,src/Runtime/Parts/u.c.), nevis veidojiet jaunas klases — tāself::uzmeklēšana turpina darboties un netiek pārtraukta privāto metožu API saskarne. - Pirms koda nosūtīšanas lokāli palaidiet
bin/verify-all. Tā izpilda CI noteikto kvalitātes pārbaudi: PHPStan, PHPCS, visas PHPUnit testu kopas (unit, oracle, popular, wpt) un etalonprogrammas regresijas testu. CI palaiž WPT un populāro bibliotēku testu kopas, mainotsrc/; pilno test262 matricu palaiž manuāli, tāpēc lokāli pārbaudiet ietekmētās test262 kategorijas. - Katram Web API papildinājumam pievienojiet WPT testa paraugu. Ievietojiet
.any.jsnotests/Wpt/upstream/<area>/mapētests/Wpt/fixtures/<category>/, un izpildītājs to automātiski atradīs.
Skatiet arī
- Saderība — kā tiek mērītas etalonprogrammas izvades.
- CLI atsauce —
bin/phasis,bin/test262,bin/wpt.