På Red Hat
I det nuvarande utvecklingsstadiet är översättare till mellanrepresentationen av MIR förberedda för
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.
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.
Källa: opennet.ru