U Red Hatu
U trenutnoj fazi razvoja pripremljeni su prevodioci za srednje predstavljanje MIR-a
Srednji MIR kod se može predstaviti u binarnom i tekstualnom (čitljivom) obliku. Ovaj kod se može izvršiti u interpretatoru i na osnovu njega se može generisati mašinski kod (x86_64, u ARM64, PPC64 i MIPS64 planovima). Također je moguće izvršiti obrnutu konverziju - iz MIR u CIL, Java bytecode, WebAssembly i C kod.
Među karakteristikama MIR-a ističu se strogo kucanje, podrška za module i funkcije, pružanje seta instrukcija za konverziju tipa, poređenje, aritmetičke i logičke operacije, grananje itd. Moduli, koji uključuju skup funkcija konvertovanih u MIR format, mogu se učitavati u obliku biblioteka, a mogu i eksterni C kod.
Ključna prednost izvršavanja međukoda u JIT-u umjesto kompajliranja u izvorne izvršne datoteke je mogućnost generiranja kompaktnih datoteka koje se mogu izvršiti bez ponovne izgradnje na različitim hardverskim arhitekturama (x86, ARM, PPC, MIPS). Za nepodržane arhitekture, dostupan je način interpretacije, koji je u slučaju MIR-a 6-10 puta sporiji od JIT-a.
Nedostaci postojećih JIT kompajlera
GCC i LLVM se nazivaju pretjerano napuhanost, mala brzina kompilacije i poteškoće u implementaciji kombinovanih optimizacija za različite programske jezike. MIR programeri su pokušali riješiti ove probleme
problemi i postavljeni ciljevi:
- Kompilacija u MIR bi trebala biti najmanje 100 puta brža nego u GCC;
- JIT za izvršenje MIR-a mora biti veoma kompaktan i uključivati približno 15 hiljada linija koda;
- Izvršavanje MIR-a pomoću JIT-a ne bi trebalo da bude više od 30% sporije od performansi izvršne datoteke kompajlirane iz istog C koda u GCC-u (sa "-O2" optimizacijama);
- Faze inicijalizacije prije početka stvarnog izvršenja trebale bi trajati 100 puta manje vremena;
- MIR reprezentacija za JIT mora biti 100 puta manja od izvršne kompajlirane u GCC-u.
U svom trenutnom obliku, implementacija MIR-a je na mnogo načina ispred prvobitno postavljenih ciljeva: testovi su pokazali da su performanse kompilacije u MIR-u 2 puta brže od “GCC-O178”, performanse izvršenja zaostaju za 6% za izvornim kodom, veličina koda je 144 puta manji, MIR implementacija JIT je 16 hiljada linija koda.
izvor: opennet.ru