Este artículo explica cómo implementar un compilador JIT (Just-In-Time) capaz de generar código ensamblador en aproximadamente 5 microsegundos, un tiempo de compilación muy inferior al de alternativas como LLVM o la generación de C/C++. El autor, desarrollador de la base de datos pgrust, relata que la asistencia de herramientas de inteligencia artificial ha facilitado enormemente la escritura directa de ensamblador ARM64, una tarea que antes se consideraba un arte reservado a expertos.
El texto utiliza como ejemplo la construcción de un motor de expresiones regulares minimalista que solo admite literales y repeticiones (operador ). Primero se presenta un intérprete en Rust de menos de 20 líneas y se compara su rendimiento con una versión escrita a mano para la expresión b(an), comprobando que la versión manual es entre 10 y 20 veces más rápida que el intérprete. A continuación se describe cómo cerrar esa brecha mediante JIT.
La técnica empleada se denomina copy-and-patch: se parte de plantillas de ensamblador llamadas stencils para cada operación y se ajustan ligeramente según los parámetros concretos en tiempo de ejecución. El artículo detalla paso a paso el código ARM64 generado para macOS, incluyendo el prólogo, la comprobación del carácter 'b' y el bloque de repetición con backtracking mediante pila. Finalmente, el código generado se copia a memoria ejecutable para que Rust pueda invocarlo como una función ordinaria, logrando un rendimiento comparable al de la versión escrita a mano.
La técnica resulta especialmente útil para sistemas de tiempo de ejecución, intérpretes de lenguajes y herramientas que procesan datos cuyo esquema solo se conoce en ejecución, como bases de datos y motores de consulta SQL.
