У кампаніі Red Hat
На бягучай стадыі распрацоўкі транслятары ў прамежкавае прадстаўленне MIR падрыхтаваны для
Прамежкавы код MIR можа быць прадстаўлены ў бінарным і тэкставым (чытэльным) выглядзе. Дадзены код можна будзе выканаць у інтэрпрэтатары, згенераваць на яго аснове машынны код (x86_64, у планах ARM64, PPC64 і MIPS64). Магчыма і выкананне зваротнага пераўтварэння - з MIR у CIL, байткод Java, WebAssembly і код на мове Сі.
З асаблівасцяў MIR вылучацца строгая тыпізацыя, падтрымка модуляў і функцый, прадастаўленне набору інструкцый для пераўтварэння тыпаў, параўнання, арыфметычных і лагічных аперацый, галінавання і да т.п. Модулі, якія ўключаюць набор функцый, ператвораных у фармат MIR, могуць загружацца ў форме бібліятэк, а таксама загружаць вонкавы код на мове Сі.
Ключавой добрай якасцю выканання прамежкавага кода ў JIT замест кампіляцыі ў натыўныя выкананыя файлы, з'яўляецца магчымасць фармавання кампактных файлаў, якія могуць выконвацца без перазборкі на розных апаратных архітэктурах (x86, ARM, PPC, MIPS). Для непадтрымліваемых архітэктур даступны рэжым інтэрпрэтацыі, які ў выпадку MIR працуе ў 6-10 разоў павольней JIT.
З недахопаў існуючых JIT-кампілятараў
GCC і LLVM называецца іх залішняя разадзьмутасць, нізкая хуткасць кампіляцыі і цяжкасць рэалізацыі камбінаваных аптымізацый для розных моў праграмавання. Распрацоўнікі MIR паспрабавалі вырашыць гэтыя
праблемы і паставілі перад сабой мэты:
- Кампіляцыя ў MIR павінна ажыццяўляцца як мінімум у 100 разоў хутчэй, чым у GCC;
- JIT для выканання MIR павінен быць вельмі кампактным і ўключаць прыкладна 15 тысяч радкоў кода;
- Выкананне MIR з выкарыстаннем JIT павінна быць не больш за на 30% павольней, чым прадукцыйнасць выкананага файла, сабранага на аснове таго ж Сі-кода ў GCC (з аптымізацыямі «-O2»);
- Стадыі ініцыялізацыі да пачатку фактычнага выканання павінны займаць у 100 разоў менш часу;
- MIR-прадстаўленне для JIT павінны быць у 100 разоў менш сабранага ў GCC выкананага файла.
У бягучым выглядзе рэалізацыя MIR шмат у чым апярэджвае першапачаткова пастаўленыя мэты: праведзеныя тэсты паказалі, што прадукцыйнасць кампіляцыі ў MIR хутчэй "GCC -O2" у 178 разоў, прадукцыйнасць выканання адстае ад натыўнага кода на 6%, памер кода менш у 144 разы, JIT складае 16 тысяч радкоў кода.
Крыніца: opennet.ru