Red Hat arendab MIR JIT kompilaatorit

Red Hatis arendus käimas uus kerge JIT-kompilaator MINA, mis tagab koodi täitmise, mis on eelnevalt teisendatud vahepealseks esituseks MIR (Medium Internal Representation, mida ei tohi segi ajada mõne muu vaheesitlusega MINA (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 jaotatud MIT litsentsi alusel.

Praeguses arendusjärgus valmistatakse ette tõlkijaid MIR-i vaheesitusse C keel ja bitkood LLVM (Bitcode), kuid tulevikus on plaanis juurutada MIR genereerimise võimalus WebAssembly jaoks, Java baitkood, CIL (Common Intermediate Language), Rust ja C++. Projekti arendab üks JIT-i mootorite arendajatest MJIT, kasutatud Ruby. Esiteks on plaanis juurutada MIR-il põhinev JIT CRuby и MRuby. Tulevikus on võimalik ka GCC-d MIR-i kasutamiseks portida.

Red Hat arendab MIR JIT kompilaatorit

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.

Red Hat arendab MIR JIT kompilaatoritRed Hat arendab MIR JIT kompilaatorit

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.

Red Hat arendab MIR JIT kompilaatorit

Allikas: opennet.ru

Lisa kommentaar