Red Hat desarrolla el compilador MIR JIT

En sombrero rojo desarrollo en progreso nuevo compilador JIT ligero MIR, que asegura la ejecución de código que ha sido previamente convertido a una representación intermedia MIR (Representación Interna Media, no confundir con otra representación intermedia MIR (IR de nivel medio), utilizado en el compilador Rust). El proyecto tiene como objetivo proporcionar un marco para implementar intérpretes y JIT rápidos y compactos. El código del proyecto está escrito en C y distribuido por bajo la licencia del MIT.

En la etapa actual de desarrollo, los traductores de la representación intermedia de MIR están preparados para lenguaje c y código de bits LLVM (Bitcode), pero en el futuro está previsto implementar la capacidad de generar MIR para WebAssembly, Java bytecode, CIL (Lenguaje Intermedio Común), Rust y C++. El proyecto está siendo desarrollado por uno de los desarrolladores del motor JIT. mjit, usado en Ruby. En primer lugar, está previsto implementar JIT basado en MIR para CRubí и mruby. En el futuro, también será posible portar GCC para utilizar MIR.

Red Hat desarrolla el compilador MIR JIT

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.

Red Hat desarrolla el compilador MIR JITRed Hat desarrolla el compilador MIR JIT

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.

Red Hat desarrolla el compilador MIR JIT

Fuente: opennet.ru

Añadir un comentario