Red Hatis uus kerge JIT-kompilaator , mis tagab koodi tÀitmise, mis on eelnevalt teisendatud vahepealseks esituseks MIR (Medium Internal Representation, mida ei tohi segi ajada mÔne muu vaheesitlusega (kesktaseme IR), kasutatakse Rusti kompilaatoris). Projekti eesmÀrk on luua raamistik kiirete ja kompaktsete tÔlkide ja JITi rakendamiseks. Projekti kood on kirjutatud C ja MIT litsentsi alusel.
Praeguses arendusjĂ€rgus valmistatakse ette tĂ”lkijaid MIR-i vaheesitusse ja bitkood (Bitcode), kuid tulevikus on plaanis juurutada MIR genereerimise vĂ”imalus WebAssembly jaoks, Java baitkood, (Common Intermediate Language), Rust ja C++. Projekti arendab ĂŒks JIT-i mootorite arendajatest , kasutatud Ruby. Esiteks on plaanis juurutada MIR-il pĂ”hinev JIT Đž . Tulevikus on vĂ”imalik ka GCC-d MIR-i kasutamiseks portida.
Vahepealset MIR-koodi saab esitada binaarsel ja tekstilisel (loetaval) kujul. Seda koodi saab kÀivitada interpretaatoris ja selle pÔhjal genereerida masinkoodi (x86_64, ARM64, PPC64 ja MIPS64 plaanides). Samuti on vÔimalik teostada pöördkonverteerimist - MIR-ist CIL-i, Java baitkoodi, WebAssembly ja C-koodi.
MIR-i omadustest torkavad silma range tippimine, moodulite ja funktsioonide tugi, juhiste komplekti pakkumine tĂŒĂŒbi teisendamiseks, vĂ”rdluseks, aritmeetilisteks ja loogilisteks operatsioonideks, hargnemiseks jne. Moodulid, mis sisaldavad MIR-vormingusse teisendatud funktsioonide komplekti, saab laadida teekide kujul, samuti saab laadida vĂ€list C-koodi.
JIT-is vahepealse koodi kĂ€ivitamise peamine eelis natiivseteks tĂ€itmisfailideks kompileerimise asemel on vĂ”imalus genereerida kompaktseid faile, mida saab kĂ€ivitada ilma erinevate riistvaraarhitektuuride (x86, ARM, PPC, MIPS) ĂŒmberehitamiseta. Toetamata arhitektuuride jaoks on saadaval tĂ”lgendusreĆŸiim, mis on MIR-i puhul 6-10 korda aeglasem kui JIT.
Olemasolevate JIT-kompilaatorite puudused
VĂ€idetavalt on GCC ja LLVM liiga ĂŒlespuhutud, neil on vĂ€ike kompileerimiskiirus ja neid on keeruline erinevate programmeerimiskeelte kombineeritud optimeerimiseks rakendada. MIR-i arendajad pĂŒĂŒdsid neid lahendada
probleemid ja seatud eesmÀrgid:
- MIR-is koostamine peaks olema vÀhemalt 100 korda kiirem kui GCC-s;
- MIR-i tÀitmise JIT peab olema vÀga kompaktne ja sisaldama ligikaudu 15 tuhat koodirida;
- MIR-i kÀivitamine JIT-i abil ei tohiks olla rohkem kui 30% aeglasem kui GCC-s samast C-koodist kompileeritud kÀivitatava faili jÔudlus ("-O2" optimeerimisega);
- Initsialiseerimisetapid enne tegeliku tÀitmise algust peaksid vÔtma 100 korda vÀhem aega;
- JIT-i MIR-i esitus peab olema 100 korda vÀiksem kui GCC-s kompileeritud kÀivitatav fail.
Praegusel kujul on MIR-i juurutamine paljuski ees algselt seatud eesmĂ€rkidest: testid on nĂ€idanud, et kompileerimise jĂ”udlus MIR-is on 2 korda kiirem kui âGCC -O178â, tĂ€itmisjĂ”udlus jÀÀb natiivsest koodist 6% maha, koodi suurus. on 144 korda vĂ€iksem, on MIR-i juurutamise JIT 16 tuhat koodirida.
Allikas: opennet.ru
