Red Hat utvecklar MIR JIT-kompilatorn

På Red Hat utveckling pågår ny lätt JIT-kompilator MIR, som säkerställer exekvering av kod som tidigare har konverterats till en mellanrepresentation MIR (Medium Internal Representation, inte att förväxla med en annan mellanrepresentation MIR (mellannivå IR), används i Rust-kompilatorn). Projektet syftar till att tillhandahålla ett ramverk för implementering av snabba och kompakta tolkar och JIT. Projektkoden är skriven i C och levererad av under MIT-licensen.

I det nuvarande utvecklingsstadiet är översättare till mellanrepresentationen av MIR förberedda för C språk och bitkod LLVM (Bitcode), men i framtiden är det planerat att implementera möjligheten att generera MIR för WebAssembly, Java bytecode, CIL (Common Intermediate Language), Rust och C++. Projektet utvecklas av en av JIT-motorutvecklarna MJIT, används i Ruby. Först och främst är JIT baserad på MIR planerad att implementeras för Cruby и MRuby. I framtiden är det även möjligt att porta GCC för att använda MIR.

Red Hat utvecklar MIR JIT-kompilatorn

Den mellanliggande MIR-koden kan presenteras i binär och text (läsbar) form. Denna kod kan exekveras i en tolk och maskinkod kan genereras baserat på den (x86_64, i ARM64-, PPC64- och MIPS64-planer). Det är också möjligt att utföra omvänd konvertering - från MIR till CIL, Java bytecode, WebAssembly och C-kod.

Bland funktionerna i MIR utmärker sig strikt typning, stöd för moduler och funktioner, tillhandahållande av en uppsättning instruktioner för typkonvertering, jämförelse, aritmetiska och logiska operationer, förgrening etc. Moduler, som inkluderar en uppsättning funktioner konverterade till MIR-formatet, kan laddas i form av bibliotek och kan även ladda extern C-kod.

Red Hat utvecklar MIR JIT-kompilatornRed Hat utvecklar MIR JIT-kompilatorn

Den viktigaste fördelen med att köra mellankod i JIT istället för att kompilera till inbyggda körbara filer är möjligheten att generera kompakta filer som kan köras utan att bygga om på olika hårdvaruarkitekturer (x86, ARM, PPC, MIPS). För arkitekturer som inte stöds finns ett tolkningsläge tillgängligt, som i fallet med MIR är 6-10 gånger långsammare än JIT.

Nackdelar med befintliga JIT-kompilatorer
GCC och LLVM sägs vara alltför uppsvällda, ha låg kompileringshastighet och är svåra att implementera kombinerade optimeringar för olika programmeringsspråk. MIR-utvecklare försökte lösa dessa
problem och sätt upp mål:

  • Sammanställning i MIR bör vara minst 100 gånger snabbare än i GCC;
  • JIT för MIR-körning måste vara mycket kompakt och innehålla cirka 15 tusen rader kod;
  • Att köra MIR med JIT bör inte vara mer än 30 % långsammare än prestandan för en körbar kompilerad från samma C-kod i GCC (med "-O2"-optimeringar);
  • Initieringsstegen innan den faktiska exekveringen börjar bör ta 100 gånger kortare tid;
  • MIR-representationen för JIT måste vara 100 gånger mindre än den körbara filen som kompileras i GCC.

I sin nuvarande form ligger MIR-implementeringen på många sätt före de initialt uppsatta målen: tester har visat att kompileringsprestandan i MIR är 2 gånger snabbare än "GCC-O178", exekveringsprestandan ligger 6% bakom inbyggd kod, kodstorleken är 144 gånger mindre, MIR-implementeringen JIT är 16 tusen rader kod.

Red Hat utvecklar MIR JIT-kompilatorn

Källa: opennet.ru

Lägg en kommentar