Liigu sisu juurde

Täpsem teave

Sisemised üksikasjad. Kui manustate Phasis, võite selle jaotise vahele jätta. Kui muudate mootorit, on kõik siinsed lehed olulised.

Lehed

  • Arhitektuur — kuidas lähtekoodist saab täitmine: leksikaalne analüüs → parser → AST → baidikoodi kompileerimine → baidikoodi virtuaalmasin koos puupõhise interpretaatori varuteega. Moodulilaadija, käituskeskkonnad ja Phasis\Engine roll käituskeskkonna piirina.
  • Baidikoodi virtuaalmasin — opkoodide hulk, väljakutsesilmus, inline-vahemälud, JsToPhpi lähtekoodi transpileerimise kiirtee, funktsiooni kuju heuristik canSkipEnvAlloc ning millal liiguvad kutsed baidikoodi teed ja millal puupõhisesse interpretaatorisse.
  • Võrdlustestid — praegused bench/ näitajad, nende tõlgendamine, miks ~100× V8 on puupõhiste interpretaatorite püsiv jõudluspiir ja kuidas vahet vähendada.
  • Testimine — võrdlusmudel. Iga muudatust kontrollitakse kolme sõltumatu võrdlusallikaga: Node.js (V8 spetsifikatsiooni tõeväärtus), test262 ja populaarsete teekide baiditäpsuse komplekt.

Kaastöö tegemise tavad

  • Ära muuda mootori tuuma ilma mõjuva põhjuseta. Kõik asukohas src/Runtime/, src/Bytecode/, src/Lexer/, src/Parser/, src/Regex/ kuulub test262 kriitilisele rajale. Selle muutmine ilma vastava test262 kontrollita toob tõenäoliselt kaasa regressioone. Sisseehitatud funktsioonid (src/BuiltIn/) on ohutumad, sest iga funktsiooni test262 alamkomplekt tuvastab rikked kohapeal.
  • Kasuta korraldamiseks trait'e, mitte klasse. Kui fail ületab umbes 2K rida, jaga see kõrvalkataloogi trait-failideks (src/BuiltIn/Temporal/, src/Runtime/Parts/ jne), selle asemel et luua uusi klasse — nii töötavad self:: otsingud edasi ja privaatmeetodi API liides ei katke.
  • Käivita bin/verify-all enne koodi üleslaadimist lokaalselt. See käivitab PHPStan, PHPCS, kõik PHPUnit komplektid (unit, oracle, popular, wpt) ja võrdlusregressiooni. CI käivitab WPT ja popular-komplektid muudatuste korral asukohas src/; täielik test262 maatriks käivitatakse käsitsi, seega vali mõjutatud test262 kategooriad ja käivita need lokaalselt.
  • Iga Web API lisamise jaoks lisa WPT testjuht. Tõsta .any.js asukohast tests/Wpt/upstream/<area>/ asukohta tests/Wpt/fixtures/<category>/ ning käitaja leiab selle automaatselt.

Vt ka

  • Ühilduvus — kuidas võrdlusväljundeid mõõdetakse.
  • CLI viide — bin/phasis, bin/test262, bin/wpt.