У компанії Red Hat
На поточній стадії розробки транслятори у проміжне подання MIR підготовлені для
Проміжний код MIR може бути представлений у бінарному та текстовому (читаному) вигляді. Цей код можна буде виконати в інтерпретаторі, згенерувати на його основі машинний код (x86_64, у планах ARM64, PPC64 та MIPS64). Можливе і виконання зворотного перетворення - з MIR в CIL, байткод Java, WebAssembly і код мовою Сі.
З особливостей MIR виділяться строга типізація, підтримка модулів та функцій, надання набору інструкцій для перетворення типів, порівняння, арифметичних та логічних операцій, розгалуження тощо. Модулі, що включають набір функцій, перетворених у формат MIR, можуть завантажуватись у формі бібліотек, а також завантажувати зовнішній код мовою Сі.
Ключовим достоїнством виконання проміжного коду в JIT замість компіляції в нативні файли, що виконуються, є можливість формування компактних файлів, які можуть виконуватися без перескладання на різних апаратних архітектурах (x86, ARM, PPC, MIPS). Для непідтримуваних архітектур доступний режим інтерпретації, який у разі MIR працює у 6-10 разів повільніше за JIT.
З недоліків існуючих JIT-компіляторів
GCC і LLVM називається їх надмірна роздутість, низька швидкість компіляції та труднощі реалізації комбінованих оптимізації для різних мов програмування. Розробники MIR спробували вирішити ці
проблеми і поставили собі мети:
- Компіляція в MIR повинна здійснюватися як мінімум у 100 разів швидше, ніж у GCC;
- JIT для виконання MIR має бути дуже компактним та включати приблизно 15 тисяч рядків коду;
- Виконання MIR з використанням JIT має бути не більше ніж на 30% повільніше, ніж продуктивність виконуваного файлу, зібраного на основі того ж Сі-коду GCC (з оптимізаціями -O2);
- Стадії ініціалізації до початку фактичного виконання повинні займати у 100 разів менше часу;
- MIR-подання для JIT має бути в 100 разів менше зібраного в GCC виконуваного файлу.
У поточному вигляді реалізація MIR багато в чому випереджає спочатку поставлені цілі: проведені тести показали, що продуктивність компіляції в MIR швидше «GCC-O2» в 178 разів, продуктивність виконання відстає від нативного коду на 6%, розмір коду менше в 144 рази, JIT складає 16 тисяч рядків коду.
Джерело: opennet.ru