Avançado
Os componentes internos. Se você estiver incorporando Phasis, pode pular esta seção. Se estiver modificando o mecanismo, todas as páginas aqui são essenciais.
Páginas
- Arquitetura — como o código-fonte se torna execução: lexer → parser → AST → compilação de bytecode → VM de bytecode com fallback para percurso da árvore. Carregador de módulos, realms e o papel de
Phasis\Enginecomo limite do realm. - VM de bytecode — conjunto de opcodes, ciclo de despacho, caches em linha, caminho rápido de transpilação de código-fonte JsToPhp, heurística canSkipEnvAlloc para formas de função e quando as chamadas seguem o caminho de bytecode ou o percurso da árvore.
- Benchmarks — números atuais de
bench/, como interpretá-los, por que ~100× V8 é o limite estável para interpretadores que percorrem a árvore e o que reduziria essa diferença. - Testes — o modelo de oráculo. Cada alteração é verificada com três oráculos independentes: Node.js (V8 como referência normativa), test262 e a suíte de igualdade de bytes de bibliotecas populares.
Convenções para contribuições
- Não altere o mecanismo principal sem um motivo forte. Tudo em
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/faz parte do caminho crítico de test262. Alterar esses componentes sem uma verificação test262 correspondente é uma receita para regressões. Os recursos integrados (src/BuiltIn/) são mais seguros porque as suítes específicas de test262 para cada recurso detectam problemas localmente. - Use traits para organizar, não classes. Quando um arquivo ultrapassar ~2 mil linhas, divida-o em arquivos trait em um diretório irmão (
src/BuiltIn/Temporal/,src/Runtime/Parts/etc.), em vez de criar novas classes — isso mantém as pesquisas deself::funcionando e evita quebrar a superfície de API dos métodos privados. - Execute
bin/verify-alllocalmente antes de enviar as alterações. Ele executa PHPStan, PHPCS, todas as suítes PHPUnit (unitária, de oráculo, de bibliotecas populares e wpt) e a regressão do oráculo. A CI executa as suítes WPT e de bibliotecas populares quando há alterações emsrc/; a matriz test262 completa é iniciada manualmente, então teste localmente as categorias test262 afetadas. - Para cada adição à Web API, adicione um fixture WPT. Coloque o
.any.jsdetests/Wpt/upstream/<area>/emtests/Wpt/fixtures/<category>/e o executor o detectará.
Veja também
- Compatibilidade — como as saídas do oráculo são medidas.
- CLI referência —
bin/phasis,bin/test262,bin/wpt.