Ang Red Hat nagpalambo sa MIR JIT compiler

Sa Red Hat nagpadayon ang kalamboan bag-ong lightweight JIT compiler KANAKO, nga nagsiguro sa pagpatuman sa code nga kaniadto nakabig ngadto sa usa ka intermediate nga representasyon MIR (Medium Internal Representation, nga dili malibog sa laing intermediate nga representasyon KANAKO (mid-level IR), gigamit sa Rust compiler). Ang proyekto nagtumong sa paghatag ug usa ka balangkas alang sa pagpatuman sa paspas ug compact interpreter ug JIT. Ang code sa proyekto gisulat sa C ug giapod-apod sa ubos sa lisensya sa MIT.

Sa kasamtangan nga yugto sa kalamboan, ang mga maghuhubad ngadto sa intermediate nga representasyon sa MIR giandam na C nga pinulongan ug bitcode LLVM (Bitcode), apan sa umaabot kini giplano nga ipatuman ang abilidad sa pagmugna og MIR alang sa WebAssembly, Java bytecode, CIL (Common Intermediate Language), Rust ug C++. Ang proyekto gipalambo sa usa sa JIT engine developers MJIT, gigamit sa Ruby. Una sa tanan, ang JIT base sa MIR giplano nga ipatuman para CRuby ΠΈ MRuby. Sa umaabot, posible usab nga i-port ang GCC aron magamit ang MIR.

Ang Red Hat nagpalambo sa MIR JIT compiler

Ang intermediate nga MIR code mahimong ipresentar sa binary ug text (mabasa) nga porma. Kini nga code mahimong ipatuman sa usa ka tighubad ug machine code mahimong mamugna base niini (x86_64, sa ARM64, PPC64 ug MIPS64 nga mga plano). Posible usab nga himuon ang reverse conversion - gikan sa MIR hangtod sa CIL, Java bytecode, WebAssembly ug C code.

Lakip sa mga bahin sa MIR, higpit nga pag-type, suporta alang sa mga module ug mga gimbuhaton, paghatag sa usa ka hugpong sa mga panudlo alang sa pagkakabig sa tipo, pagtandi, aritmetika ug lohikal nga mga operasyon, pagsabwag, ug uban pa. Ang mga module, nga naglakip sa usa ka set sa mga function nga nakabig sa MIR format, mahimong i-load sa porma sa mga librarya, ug mahimo usab nga mag-load sa external C code.

Ang Red Hat nagpalambo sa MIR JIT compilerAng Red Hat nagpalambo sa MIR JIT compiler

Ang yawe nga bentaha sa pagpatuman sa intermediate code sa JIT imbes nga mag-compile sa lumad nga mga executable nga mga file mao ang abilidad sa pagmugna og mga compact files nga mahimong ipatuman nga walay pagtukod pag-usab sa lain-laing mga hardware architectures (x86, ARM, PPC, MIPS). Alang sa dili suportadong mga arkitektura, adunay usa ka mode sa paghubad, nga sa kaso sa MIR 6-10 ka beses nga mas hinay kaysa JIT.

Mga disbentaha sa kasamtangan nga JIT compiler
Ang GCC ug LLVM giingon nga sobra ka bloated, adunay ubos nga compilation speed, ug lisud ipatuman ang hiniusang pag-optimize alang sa lain-laing mga programming language. Ang mga developer sa MIR misulay sa pagsulbad niini
mga problema ug paghimo og mga tumong:

  • Ang pag-compile sa MIR kinahanglan nga labing menos 100 ka beses nga mas paspas kaysa sa GCC;
  • Ang JIT alang sa pagpatuman sa MIR kinahanglan nga compact kaayo ug naglakip sa gibana-bana nga 15 ka libo nga linya sa code;
  • Ang pagpatuman sa MIR gamit ang JIT kinahanglang dili mosobra sa 30% nga mas hinay kay sa performance sa usa ka executable nga gihugpong gikan sa samang C code sa GCC (uban ang "-O2" optimizations);
  • Ang mga yugto sa pagsugod sa dili pa magsugod ang aktuwal nga pagpatuman kinahanglan nga mokuha ug 100 ka beses nga mas gamay nga oras;
  • Ang representasyon sa MIR para sa JIT kinahanglang 100 ka pilo nga mas gamay kay sa executable nga gihugpong sa GCC.

Sa karon nga porma, ang pagpatuman sa MIR sa daghang mga paagi nag-una sa una nga gitakda nga mga katuyoan: gipakita sa mga pagsulay nga ang paghimo sa compilation sa MIR 2 ka beses nga mas paspas kaysa "GCC -O178", ang pasundayag sa pagpatuman 6% sa luyo sa lumad nga code, ang gidak-on sa code. 144 ka beses nga mas gamay, ang pagpatuman sa MIR nga JIT mao ang 16 ka libo nga linya sa code.

Ang Red Hat nagpalambo sa MIR JIT compiler

Source: opennet.ru

Idugang sa usa ka comment