Red Hat развівае JIT-кампілятар MIR

У кампаніі Red Hat вядзецца распрацоўка новага легкаважнага JIT-кампілятара MIR, які забяспечвае выкананне кода, папярэдне пераўтворанага ў прамежкавае прадстаўленне MIR (Medium Internal Representation, не блытаць з іншым прамежкавым прадстаўленнем MIR (mid-level IR), ужывальным у кампілятары Rust). Праект накіраваны на прадастаўленне асновы для рэалізацыі хуткіх і кампактных інтэрпрэтатараў і JIT. Код праекта напісаны на мове Сі і распаўсюджваецца пад ліцэнзіяй MIT.

На бягучай стадыі распрацоўкі транслятары ў прамежкавае прадстаўленне MIR падрыхтаваны для мовы Сі і біткода LLVM (Bitcode), але ў будучыні плануецца рэалізаваць магчымасць генерацыі MIR для WebAssembly, байткода Java, CIL (Common Intermediate Language), Rust і C++. Праект развіваецца адным з распрацоўшчыкаў JIT-рухавічка MJIT, Які выкарыстоўваецца ў Ruby. У першую чаргу JIT на базе MIR плануецца рэалізаваць для CRuby и MRuby. У будучыні таксама не выключаецца магчымасць партавання GCC на выкарыстанне MIR.

Red Hat развівае JIT-кампілятар MIR

Прамежкавы код MIR можа быць прадстаўлены ў бінарным і тэкставым (чытэльным) выглядзе. Дадзены код можна будзе выканаць у інтэрпрэтатары, згенераваць на яго аснове машынны код (x86_64, у планах ARM64, PPC64 і MIPS64). Магчыма і выкананне зваротнага пераўтварэння - з MIR у CIL, байткод Java, WebAssembly і код на мове Сі.

З асаблівасцяў MIR вылучацца строгая тыпізацыя, падтрымка модуляў і функцый, прадастаўленне набору інструкцый для пераўтварэння тыпаў, параўнання, арыфметычных і лагічных аперацый, галінавання і да т.п. Модулі, якія ўключаюць набор функцый, ператвораных у фармат MIR, могуць загружацца ў форме бібліятэк, а таксама загружаць вонкавы код на мове Сі.

Red Hat развівае JIT-кампілятар MIRRed Hat развівае JIT-кампілятар 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 тысяч радкоў кода.

Red Hat развівае JIT-кампілятар MIR

Крыніца: opennet.ru

Дадаць каментар