Geavanceerd
De interne werking. Als u Phasis insluit, kunt u dit gedeelte overslaan. Als u de engine aanpast, is elke pagina hier essentieel.
Pagina's
- Architectuur — hoe broncode uitvoering wordt: lexer → parser → AST → bytecodecompilatie → bytecode-VM met tree-walker-terugval. Modulelader, realms en de rol van
Phasis\Engineals grens van de realm. - Bytecode-VM — opcode-set, dispatchlus, inline caches, het snelle brontranspilatiepad van JsToPhp, de heuristiek canSkipEnvAlloc voor functie-vormen en wanneer aanroepen het bytecodepad of de tree-walker volgen.
- Benchmarks — huidige
bench/-cijfers, hoe u die interpreteert, waarom ~100× V8 het plafond in steady state is voor tree-walkers en hoe het verschil kleiner kan worden. - Testen — het oracle-model. Elke wijziging wordt gecontroleerd aan de hand van drie onafhankelijke oracles: Node.js (de feitelijke specificatie van V8), test262 en de suite die bytegelijkheid met populaire bibliotheken controleert.
Afspraken voor bijdragen
- Raak de core-engine alleen aan als daar een sterke reden voor is. Alles onder
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/ligt op het kritieke test262-pad. Dit aanraken zonder bijbehorende test262-verificatie leidt geheid tot regressies. Ingebouwde functies (src/BuiltIn/) zijn veiliger, omdat de test262-subsets voor elke ingebouwde functie problemen lokaal opsporen. - Gebruik traits voor de organisatie, geen classes. Als een bestand meer dan ongeveer 2K regels bevat, splits het dan op in trait-bestanden onder een aangrenzende map (
src/BuiltIn/Temporal/,src/Runtime/Parts/, enz.) in plaats van nieuwe classes te maken. Zo blijvenself::-zoekopdrachten werken en wordt voorkomen dat het oppervlak van privé-methoden API wordt doorbroken. - Voer
bin/verify-alllokaal uit voordat je pusht. Het voert PHPStan, PHPCS, elke PHPUnit-suite (unit, oracle, popular, wpt) en de oracle-regressietest uit. CI voert bij wijzigingen insrc/de WPT- en popular-suites uit; de volledige matrix van test262 wordt handmatig gestart. Test daarom lokaal de categorieën van test262 die door de wijziging zijn geraakt. - Voeg voor elke toevoeging aan het Web API een WPT-fixture toe. Plaats de
.any.jsuittests/Wpt/upstream/<area>/intests/Wpt/fixtures/<category>/; de runner pikt die dan op.
Zie ook
- Compatibiliteit — hoe de oracle-uitvoer wordt gemeten.
- CLI-referentie —
bin/phasis,bin/test262,bin/wpt.