Pokročilé
Interní fungování. Pokud Phasis vkládáte do jiné aplikace, můžete tuto sekci přeskočit. Pokud engine upravujete, každá stránka zde je zásadní.
Stránky
- Architektura — jak se zdrojový kód mění ve vykonávání: lexer → parser → AST → kompilace bajtového kódu → VM pro bajtový kód se záložním průchodem stromem. Načítání modulů, realmů a role
Phasis\Enginejako hranice realmu. - VM pro bajtový kód — sada opkódů, smyčka zpracování, inline cache, rychlá cesta transpilátoru zdrojového kódu JsToPhp, heuristika canSkipEnvAlloc pro tvar funkce a kdy volání používají cestu bajtového kódu oproti průchodu stromem.
- Srovnávací testy — aktuální výsledky
bench/, jejich výklad, proč je přibližně 100× V8 ustáleným limitem průchodu stromem a co by rozdíl zmenšilo. - Testování — model referenční implementace. Každá změna se ověřuje vůči třem nezávislým referenčním zdrojům: Node.js (specifikace V8 jako zdroj pravdy), test262 a testovací sadě ověřující shodu bajtů oblíbených knihoven.
Zásady přispívání
- Bez silného důvodu nezasahujte do jádra enginu. Vše pod
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/leží na kritické cestě test262. Úpravy bez odpovídajícího ověření test262 snadno způsobí regresi. Vestavěné funkce (src/BuiltIn/) jsou bezpečnější, protože podskupiny testů test262 pro každou vestavěnou funkci zachytí problémy přímo. - K organizaci používejte traity, ne třídy. Když soubor přesáhne přibližně 2 tisíce řádků, rozdělte jej do souborů s traity v sousedním adresáři (
src/BuiltIn/Temporal/,src/Runtime/Parts/atd.), místo abyste vytvářeli nové třídy — zachováte tak funkčnost vyhledáváníself::a nenarušíte rozhraní API privátních metod. - Před odesláním změn spusťte lokálně
bin/verify-all. Spouští PHPStan, PHPCS, všechny sady PHPUnit (unit, oracle, popular, wpt) a regresní test referenční implementace. CI spouští sady WPT a popular při změnách vsrc/; úplná matice test262 se spouští ručně, proto lokálně vyberte dotčené kategorie test262. - Ke každému doplnění Web API přidejte přípravek WPT. Vložte
.any.jsztests/Wpt/upstream/<area>/dotests/Wpt/fixtures/<category>/a runner jej automaticky zahrne.
Viz také
- Kompatibilita — jak se měří výstupy referenční implementace.
- Reference CLI —
bin/phasis,bin/test262,bin/wpt.