Red Hat-те
Қазіргі даму кезеңінде MIR аралық өкілдігіне аудармашылар дайындалуда
Аралық MIR коды екілік және мәтіндік (оқылатын) түрінде ұсынылуы мүмкін. Бұл кодты интерпретаторда орындауға және оның негізінде машина кодын жасауға болады (x86_64, ARM64, PPC64 және MIPS64 жоспарларында). Сондай-ақ кері түрлендіруді орындауға болады - MIR-ден CIL-ге, Java байт кодына, WebAssembly және C кодына.
MIR ерекшеліктерінің ішінде қатаң теру, модульдер мен функцияларды қолдау, типті түрлендіру, салыстыру, арифметикалық және логикалық операцияларды орындау, тармақтау үшін нұсқаулар жинағын қамтамасыз ету және т.б. MIR пішіміне түрлендірілген функциялар жиынтығын қамтитын модульдерді кітапханалар түрінде жүктеуге болады, сонымен қатар сыртқы C кодын жүктеуге болады.
JIT жүйесінде аралық кодты жергілікті орындалатын файлдарға құрастырудың орнына орындаудың басты артықшылығы әртүрлі аппараттық архитектураларда (x86, ARM, PPC, MIPS) қайта құрусыз орындалатын ықшам файлдарды жасау мүмкіндігі болып табылады. Қолдау көрсетілмейтін архитектуралар үшін MIR жағдайында JIT-тен 6-10 есе баяу болатын интерпретация режимі қол жетімді.
Қолданыстағы JIT компиляторларының кемшіліктері
GCC және LLVM шамадан тыс толтырылған, құрастыру жылдамдығы төмен және әртүрлі бағдарламалау тілдері үшін біріктірілген оңтайландыруды жүзеге асыру қиын деп айтылады. MIR әзірлеушілері оларды шешуге тырысты
мәселелер мен алға қойылған мақсаттар:
- MIR-де құрастыру GCC-ге қарағанда кем дегенде 100 есе жылдам болуы керек;
- MIR орындауға арналған JIT өте ықшам болуы және шамамен 15 мың код жолын қамтуы керек;
- JIT көмегімен MIR орындау GCC-дегі бірдей C кодынан құрастырылған орындалатын файлдың өнімділігінен («-O30» оңтайландыруларымен) 2%-дан баяу болмауы керек;
- Нақты орындау басталғанға дейінгі инициализация кезеңдері 100 есе аз уақыт алуы керек;
- JIT үшін MIR көрінісі GCC-те құрастырылған орындалатын файлдан 100 есе аз болуы керек.
Қазіргі пішінде MIR енгізу көптеген жолдармен бастапқы қойылған мақсаттардан алда: сынақтар MIR-де компиляция өнімділігі «GCC -O2-ге қарағанда 178 есе жылдамырақ», орындау өнімділігі жергілікті кодтан 6% артта екенін көрсетті, код өлшемі 144 есе аз, MIR енгізу JIT 16 мың жол кодты құрайды.
Ақпарат көзі: opennet.ru