He escrito una aplicación Brainfuck (C++) que funciona de esta manera:Hacer un compilador JIT
- Leer archivo brainfuck entrada
- hacer optimizaciones triviales brainfuck
- Convertir a código de máquina para la máquina virtual
- ejecutar este código de máquina en la VM
esto es bastante rápido, pero el cuello de botella se encuentra ahora en la máquina virtual. Está escrito en C++ y lee un token, ejecuta una acción (que no son muchos en absoluto, si conoces Brainfuck) y así sucesivamente.
Lo que quiero hacer es quitar la VM y generar código de máquina nativo sobre la marcha (tan básicamente, un compilador JIT). Esto puede ser fácilmente una aceleración de 20x.
Esto significa que el paso 3 se reemplaza por un compilador JIT y el paso 4 con la ejecución del código máquina generado.
no sé realmente por dónde empezar, así que tengo un par de preguntas:
- ¿Cómo funciona esto, ¿cómo el código de máquina generado se ejecutan?
- ¿Hay alguna biblioteca C++ para generar código máquina nativo?
+1 y aceptado para el único que explica cómo se llama el código de máquina. – orlp