En sombrero rojo
En la etapa actual de desarrollo, los traductores de la representación intermedia de MIR están preparados para
El código MIR intermedio se puede presentar en forma binaria y de texto (legible). Este código se puede ejecutar en un intérprete y generar código máquina en base a él (x86_64, en planes ARM64, PPC64 y MIPS64). También es posible realizar la conversión inversa: de MIR a CIL, código de bytes Java, WebAssembly y código C.
Entre las características de MIR destacan la tipificación estricta, soporte para módulos y funciones, provisión de un conjunto de instrucciones para conversión de tipos, comparación, operaciones aritméticas y lógicas, bifurcaciones, etc. Los módulos, que incluyen un conjunto de funciones convertidas al formato MIR, se pueden cargar en forma de bibliotecas y también pueden cargar código C externo.
La ventaja clave de ejecutar código intermedio en JIT en lugar de compilarlo en archivos ejecutables nativos es la capacidad de generar archivos compactos que se pueden ejecutar sin reconstruir en diferentes arquitecturas de hardware (x86, ARM, PPC, MIPS). Para arquitecturas no compatibles, está disponible un modo de interpretación, que en el caso de MIR es entre 6 y 10 veces más lento que JIT.
Desventajas de los compiladores JIT existentes
Se dice que GCC y LLVM están demasiado inflados, tienen baja velocidad de compilación y son difíciles de implementar optimizaciones combinadas para diferentes lenguajes de programación. Los desarrolladores de MIR intentaron resolver estos
problemas y establecer metas:
- La compilación en MIR debería ser al menos 100 veces más rápida que en GCC;
- El JIT para ejecución MIR debe ser muy compacto e incluir aproximadamente 15 mil líneas de código;
- La ejecución de MIR usando JIT no debe ser más de un 30 % más lenta que el rendimiento de un ejecutable compilado a partir del mismo código C en GCC (con optimizaciones "-O2");
- Las etapas de inicialización antes de que comience la ejecución real deberían llevar 100 veces menos tiempo;
- La representación MIR para JIT debe ser 100 veces más pequeña que el ejecutable compilado en GCC.
En su forma actual, la implementación de MIR está en muchos aspectos por delante de los objetivos inicialmente establecidos: las pruebas han demostrado que el rendimiento de compilación en MIR es 2 veces más rápido que "GCC -O178", el rendimiento de ejecución está un 6% por detrás del código nativo, el tamaño del código es 144 veces más pequeño, la implementación JIT de MIR tiene 16 mil líneas de código.
Fuente: opennet.ru