Pāriet uz saturu

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\Engine loma 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, mainot src/; 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.js no tests/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.