Saltar al contenido

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\Engine como 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 de self:: y se evita romper la superficie de API de métodos privados.
  • Ejecute bin/verify-all localmente 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 en src/; 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.js de tests/Wpt/upstream/<area>/ en tests/Wpt/fixtures/<category>/ y el ejecutor la detectará.

Véase también