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 Ρ€Π°Π·Π°, рСализация MIR JIT составляСт 16 тысяч строк ΠΊΠΎΠ΄Π°.

Red Hat Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ JIT-компилятор MIR

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru