Avanzate
Internals. Se incorporate Phasis, potete saltare questa sezione. Se modificate l’engine, ogni pagina qui è fondamentale.
Pagine
- Architettura — come il sorgente diventa esecuzione: lexer → parser → AST → compilazione bytecode → VM bytecode con fallback al tree-walker. Caricatore di moduli, realms, ruolo di
Phasis\Enginecome confine del realm. - VM bytecode — set di opcode, ciclo di dispatch, cache inline, percorso rapido del transpiler di sorgenti JsToPhp, euristica canSkipEnvAlloc basata sulla forma della funzione, casi in cui le chiamate seguono il percorso bytecode o il tree-walker.
- Benchmark — dati
bench/attuali, come interpretarli, perché ~100× V8 è il limite a regime dei tree-walker e cosa ridurrebbe il divario. - Test — il modello oracle. Ogni modifica viene verificata rispetto a tre oracle indipendenti: Node.js (verità di riferimento della specifica V8), test262 e la suite di confronto byte per byte delle librerie più diffuse.
Convenzioni per contribuire
- Non modificate l’engine principale senza un valido motivo. Tutto ciò che si trova sotto
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/è sul percorso critico di test262. Modificarlo senza la corrispondente verifica test262 è un modo sicuro per introdurre regressioni. Le funzioni integrate (src/BuiltIn/) sono più sicure perché le sotto-suite test262 per ciascuna intercettano localmente eventuali problemi. - Usate i trait per organizzare il codice, non le classi. Quando un file supera circa 2K righe, suddividetelo in file trait in una directory sorella (
src/BuiltIn/Temporal/,src/Runtime/Parts/ecc.) invece di creare nuove classi: cosìself::continua a funzionare e si evita di modificare la superficie API dei metodi privati. - Eseguite
bin/verify-alllocalmente prima del push. Esegue PHPStan, PHPCS, tutte le suite PHPUnit (unit, oracle, popular, wpt) e la regressione oracle. La CI esegue le suite WPT e popular quando cambianosrc/; la matrice test262 completa viene avviata manualmente, quindi eseguite localmente un campione delle categorie test262 interessate. - Per ogni aggiunta alla specifica Web API, aggiungete un fixture WPT. Copiate il file
.any.jsdatests/Wpt/upstream/<area>/intests/Wpt/fixtures/<category>/: il runner lo rileverà automaticamente.
Vedi anche
- Compatibilità — come vengono misurati i risultati dell’oracle.
- CLI reference —
bin/phasis,bin/test262,bin/wpt.