A Red Hatnél
A fejlesztés jelenlegi szakaszában a fordítók a MIR köztes reprezentációjához készülnek
A közbenső MIR kód bináris és szöveges (olvasható) formában is bemutatható. Ez a kód értelmezőben végrehajtható és ez alapján gépi kód generálható (x86_64, ARM64, PPC64 és MIPS64 tervekben). Lehetőség van a fordított konverzió végrehajtására is - MIR-ről CIL-re, Java bájtkódra, WebAssembly-re és C kódra.
A MIR szolgáltatásai közül kiemelkedik a szigorú gépelés, a modulok és funkciók támogatása, a típusátalakító utasításkészlet biztosítása, az összehasonlítás, az aritmetikai és logikai műveletek, elágazások stb. A MIR formátumba konvertált függvénykészletet tartalmazó modulok könyvtárak formájában tölthetők be, és külső C kód is betölthető.
A köztes kód JIT-ben történő végrehajtásának fő előnye a natív végrehajtható fájlokba való fordítás helyett az a képesség, hogy kompakt fájlok generálhatók, amelyek különböző hardverarchitektúrákon (x86, ARM, PPC, MIPS) történő újraépítés nélkül is végrehajthatók. A nem támogatott architektúrákhoz értelmezési mód áll rendelkezésre, amely MIR esetén 6-10-szer lassabb, mint a JIT.
A meglévő JIT fordítók hátrányai
A GCC és az LLVM állítólag túlságosan felfuvalkodott, alacsony a fordítási sebességük, és nehéz megvalósítani a kombinált optimalizálást a különböző programozási nyelvekhez. A MIR fejlesztői megpróbálták ezeket megoldani
problémák és kitűzött célok:
- A MIR-ben történő fordításnak legalább 100-szor gyorsabbnak kell lennie, mint a GCC-ben;
- A MIR végrehajtásához szükséges JIT-nek nagyon kompaktnak kell lennie, és körülbelül 15 ezer sornyi kódot kell tartalmaznia;
- A MIR végrehajtása JIT használatával legfeljebb 30%-kal lehet lassabb, mint a GCC-ben azonos C-kódból fordított végrehajtható állomány teljesítménye ("-O2" optimalizálással);
- Az inicializálási szakaszok a tényleges végrehajtás megkezdése előtt 100-szor kevesebb időt vesznek igénybe;
- A JIT MIR reprezentációjának 100-szor kisebbnek kell lennie, mint a GCC-ben lefordított végrehajtható fájl.
Jelenlegi formájában a MIR megvalósítás sok tekintetben megelőzi az eredetileg kitűzött célokat: a tesztek kimutatták, hogy a fordítási teljesítmény a MIR-ben 2-szor gyorsabb, mint a „GCC -O178”, a végrehajtási teljesítmény 6%-kal elmarad a natív kódtól, a kód mérete 144-szer kisebb, a MIR implementáció JIT 16 ezer sornyi kód.
Forrás: opennet.ru