Avanzado
Los detalles internos. Si va a integrar Phasis, puede saltarse esta sección. Si va a modificar el motor, todas las páginas de aquí son fundamentales.
Páginas
- Arquitectura — cómo el código fuente se convierte en ejecución: lexer → analizador sintáctico → AST → compilación de bytecode → VM de bytecode con recorrido del árbol como alternativa. Cargador de módulos, realms y el papel de
Phasis\Enginecomo límite del realm. - VM de bytecode — conjunto de opcodes, bucle de despacho, cachés en línea, ruta rápida de transpilación de código fuente JsToPhp, heurística canSkipEnvAlloc de forma de función y cuándo las llamadas siguen la ruta de bytecode o el recorrido del árbol.
- Pruebas de rendimiento — resultados actuales de
bench/, cómo interpretarlos, por qué ~100× V8 es el límite estable para los recorridos del árbol y qué permitiría reducir la diferencia. - Pruebas — el modelo de oráculo. Cada cambio se verifica con tres oráculos independientes: Node.js (referencia normativa de V8), test262 y la suite de igualdad de bytes de bibliotecas populares.
Convenciones para contribuir
- No modifique el motor central sin un motivo de peso. Todo lo que está bajo
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/forma parte de la ruta crítica de test262. Modificarlo sin la verificación correspondiente de test262 es una receta para introducir regresiones. Las funciones integradas (src/BuiltIn/) son más seguras porque las subsuites de test262 para cada función integrada detectan localmente los fallos. - Use traits para organizar el código, no clases. Cuando un archivo supere unas 2K líneas, divídalo en archivos trait dentro de un directorio hermano (
src/BuiltIn/Temporal/,src/Runtime/Parts/, etc.) en lugar de crear nuevas clases; así se mantienen las búsquedas deself::y se evita romper la superficie de API de métodos privados. - Ejecute
bin/verify-alllocalmente antes de enviar cambios. Ejecuta PHPStan, PHPCS, todas las suites de PHPUnit (unitarias, oracle, popular y wpt) y la regresión del oráculo. CI ejecuta las suites WPT y popular cuando hay cambios ensrc/; la matriz completa de test262 se inicia manualmente, así que pruebe localmente las categorías de test262 afectadas. - Añada una fixture WPT por cada incorporación a Web API. Coloque la
.any.jsdetests/Wpt/upstream/<area>/entests/Wpt/fixtures/<category>/y el ejecutor la detectará.
Véase también
- Compatibilidad — cómo se miden los resultados del oráculo.
- Referencia de CLI —
bin/phasis,bin/test262,bin/wpt.