Red Hat vyvíjí kompilátor MIR JIT

Ve společnosti Red Hat vývoj probíhá nový odlehčený JIT kompilátor MIR, která zajišťuje provedení kódu, který byl dříve převeden na prostřední reprezentaci MIR (Medium Internal Representation, nezaměňovat s jinou prostřední reprezentací MIR (mid-level IR), používaný v kompilátoru Rust). Cílem projektu je poskytnout rámec pro implementaci rychlých a kompaktních tlumočníků a JIT. Kód projektu je napsán v jazyce C a distribuovány pod licencí MIT.

V současné fázi vývoje jsou připraveni překladatelé do střední reprezentace MIR jazyk C a bitový kód LLVM (Bitcode), ale v budoucnu se plánuje implementace schopnosti generovat MIR pro WebAssembly, Java bytecode, CIL (Common Intermediate Language), Rust a C++. Projekt vyvíjí jeden z vývojářů JIT engine MJIT, používaný v Ruby. Nejprve se plánuje implementace JIT na bázi MIR CRuby и MRuby. V budoucnu je také možné portovat GCC pro použití MIR.

Red Hat vyvíjí kompilátor MIR JIT

Mezilehlý MIR kód může být prezentován v binární a textové (čitelné) formě. Tento kód lze spustit v interpretu a na jeho základě lze generovat strojový kód (x86_64, v plánech ARM64, PPC64 a MIPS64). Je také možné provést zpětnou konverzi - z MIR na CIL, Java bytecode, WebAssembly a C kód.

Mezi vlastnostmi MIR vyniká striktní psaní, podpora modulů a funkcí, poskytování sady instrukcí pro převod typů, porovnávání, aritmetické a logické operace, větvení atd. Moduly, které obsahují sadu funkcí převedených do formátu MIR, lze načítat ve formě knihoven a mohou také načítat externí C kód.

Red Hat vyvíjí kompilátor MIR JITRed Hat vyvíjí kompilátor MIR JIT

Klíčovou výhodou spouštění přechodného kódu v JIT namísto kompilace do nativních spustitelných souborů je schopnost generovat kompaktní soubory, které lze spouštět bez přestavby na různých hardwarových architekturách (x86, ARM, PPC, MIPS). Pro nepodporované architektury je k dispozici interpretační režim, který je v případě MIR 6-10x pomalejší než JIT.

Nevýhody stávajících JIT kompilátorů
Říká se, že GCC a LLVM jsou příliš nabubřelé, mají nízkou rychlost kompilace a je obtížné implementovat kombinované optimalizace pro různé programovací jazyky. Vývojáři MIR se je pokusili vyřešit
problémy a stanovené cíle:

  • Kompilace v MIR by měla být alespoň 100krát rychlejší než v GCC;
  • JIT pro provádění MIR musí být velmi kompaktní a obsahovat přibližně 15 tisíc řádků kódu;
  • Provádění MIR pomocí JIT by nemělo být o více než 30 % pomalejší než výkon spustitelného souboru zkompilovaného ze stejného kódu C v GCC (s optimalizacemi "-O2");
  • Fáze inicializace před zahájením skutečného provádění by měly trvat 100krát méně času;
  • Reprezentace MIR pro JIT musí být 100krát menší než spustitelný soubor zkompilovaný v GCC.

Ve své současné podobě je implementace MIR v mnoha ohledech před původně stanovenými cíli: testy ukázaly, že výkon kompilace v MIR je 2krát rychlejší než „GCC -O178“, výkon provádění je o 6 % nižší než nativní kód, velikost kódu je 144krát menší, implementace MIR JIT má 16 tisíc řádků kódu.

Red Hat vyvíjí kompilátor MIR JIT

Zdroj: opennet.ru

Přidat komentář