Na Red Hat
No atual estágio de desenvolvimento, os tradutores para a representação intermediária do MIR estão preparados para
O código MIR intermediário pode ser apresentado em formato binário e de texto (legível). Este código pode ser executado em um interpretador e código de máquina pode ser gerado a partir dele (x86_64, nos planos ARM64, PPC64 e MIPS64). Também é possível realizar a conversão reversa - de MIR para CIL, bytecode Java, WebAssembly e código C.
Dentre as funcionalidades do MIR destacam-se digitação rigorosa, suporte a módulos e funções, disponibilização de conjunto de instruções para conversão de tipos, comparação, operações aritméticas e lógicas, ramificação, etc. Os módulos, que incluem um conjunto de funções convertidas para o formato MIR, podem ser carregados na forma de bibliotecas e também podem carregar código C externo.
A principal vantagem de executar código intermediário em JIT em vez de compilar em arquivos executáveis nativos é a capacidade de gerar arquivos compactos que podem ser executados sem reconstrução em diferentes arquiteturas de hardware (x86, ARM, PPC, MIPS). Para arquiteturas não suportadas, está disponível um modo de interpretação, que no caso do MIR é 6 a 10 vezes mais lento que o JIT.
Desvantagens dos compiladores JIT existentes
Diz-se que GCC e LLVM são excessivamente inchados, têm baixa velocidade de compilação e são difíceis de implementar otimizações combinadas para diferentes linguagens de programação. Os desenvolvedores do MIR tentaram resolver estes
problemas e definir metas:
- A compilação no MIR deve ser pelo menos 100 vezes mais rápida que no GCC;
- O JIT para execução do MIR deve ser bem compacto e incluir aproximadamente 15 mil linhas de código;
- A execução do MIR usando JIT não deve ser mais que 30% mais lenta que o desempenho de um executável compilado a partir do mesmo código C no GCC (com otimizações "-O2");
- Os estágios de inicialização antes do início da execução real devem levar 100 vezes menos tempo;
- A representação MIR para JIT deve ser 100 vezes menor que o executável compilado no GCC.
Em sua forma atual, a implementação do MIR está em muitos aspectos à frente dos objetivos inicialmente definidos: testes mostraram que o desempenho de compilação no MIR é 2 vezes mais rápido que o “GCC -O178”, o desempenho de execução está 6% atrás do código nativo, o tamanho do código é 144 vezes menor, o JIT de implementação do MIR é de 16 mil linhas de código.
Fonte: opennet.ru