Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Red Hat Π½ΠΎΠ² Π»Π΅ΠΊ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ , ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ MIR (Medium Internal Representation, Π΄Π° Π½Π΅ ΡΠ΅ Π±ΡΡΠΊΠ° Ρ Π΄ΡΡΠ³ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ (mid-level IR), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Rust). ΠΡΠΎΠ΅ΠΊΡΡΡ Π΅ Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΡΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π° Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π±ΡΡΠ·ΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΈ ΠΈ JIT. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΅Π·ΠΈΠΊΠ° C ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· MIT.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠΈΡΠ΅ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ MIR ΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ Π·Π° ΠΈ Π±ΠΈΡΠΊΠΎΠ΄ (Bitcode), Π½ΠΎ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° MIR Π·Π° WebAssembly, Π±Π°ΠΉΡΠΊΠΎΠ΄ Π½Π° Java, (Common Intermediate Language), Rust ΠΈ C++. ΠΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° JIT Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ , ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² Ruby. ΠΠ°ΠΉ-Π½Π°ΠΏΡΠ΅Π΄ JIT Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° MIR ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π·Π° ΠΈ . Π Π±ΡΠ΄Π΅ΡΠ΅ ΡΡΡΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° GCC Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° MIR.
ΠΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡΡ ΠΊΠΎΠ΄ MIR ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π² Π±ΠΈΠ½Π°ΡΠ΅Π½ ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ² (ΡΠΈΡΠ°Π΅ΠΌ) Π²ΠΈΠ΄. Π’ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΌΠ°ΡΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ (x86_64, Ρ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Π·Π° ARM64, PPC64 ΠΈ MIPS64). ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ β ΠΎΡ MIR Π² CIL, Π±Π°ΠΉΡΠΊΠΎΠ΄ Π½Π° Java, WebAssembly ΠΈ ΠΊΠΎΠ΄ Π½Π° Π΅Π·ΠΈΠΊΠ° C.
Π‘ΡΠ΅Π΄ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° MIR ΡΠ΅ ΠΎΡΠΊΡΠΎΡΠ²Π° ΡΡΡΠΎΠ³Π° ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅, ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΈ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ ΠΈ Ρ.Π½. ΠΠΎΠ΄ΡΠ»ΠΈΡΠ΅, Π²ΠΊΠ»ΡΡΠ²Π°ΡΠΈ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈ Π² ΡΠΎΡΠΌΠ°Ρ MIR, ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½ΠΈ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΄Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Ρ Π²ΡΠ½ΡΠ΅Π½ ΠΊΠΎΠ΄ Π½Π° Π΅Π·ΠΈΠΊΠ° C.
ΠΠ»ΡΡΠΎΠ²ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡ ΠΊΠΎΠ΄ Π² JIT Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π² Π½Π°ΡΠΈΠ²Π½ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ (x86, ARM, PPC, MIPS). ΠΠ° Π½Π΅ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° MIR ΡΠ°Π±ΠΎΡΠΈ 6-10 ΠΏΡΡΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΎΡ JIT.
Π‘ΡΠ΅Π΄ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈΡΠ΅ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ
GCC ΠΈ LLVM Π΅ ΡΡΡ
Π½Π°ΡΠ° ΠΏΡΠ΅ΠΊΠ°Π»Π΅Π½Π° Π±ΡΠΎΠΉΠ½ΠΎΡΡ, Π½ΠΈΡΠΊΠ° ΡΠΊΠΎΡΠΎΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡ ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° MIR ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ
Π° Π΄Π° ΡΠ΅ΡΠ°Ρ ΡΠ΅Π·ΠΈ
ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΡΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΡ
Π° ΡΠ΅Π»ΠΈ:
- ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π² MIR ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎΠ½Π΅ 100 ΠΏΡΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π² GCC;
- JIT Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° MIR ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΠΈ Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π° ΠΎΠΊΠΎΠ»ΠΎ 15 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΡΠ΅Π΄Π° ΠΊΠΎΠ΄;
- ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° MIR Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° JIT Π½Π΅ Π±ΠΈΠ²Π° Π΄Π° Π΅ Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 30% ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ», ΡΡΠ±ΡΠ°Π½ Π½Π° Π±Π°Π·Π° ΡΡΡΠΈΡ C ΠΊΠΎΠ΄ Π² GCC (Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ β-O2β);
- Π‘ΡΠ°Π΄ΠΈΠΈ Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΈ Π·Π°ΠΏΠΎΡΠ²Π°Π½Π΅ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠ½Π΅ΠΌΠ°Ρ 100 ΠΏΡΡΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅;
- MIR ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π·Π° JIT ΡΡΡΠ±Π²Π° Π΄Π° Π΅ 100 ΠΏΡΡΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ ΡΡΠ±ΡΠ°Π½ΠΈΡ Π² GCC ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ ΡΠ°ΠΉΠ».
Π Π½Π°ΡΡΠΎΡΡΠΈΡ ΡΠΈ Π²ΠΈΠ΄ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° MIR Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°Π΄ΠΌΠΈΠ½Π°Π²Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈΡΠ΅ ΡΠ΅Π»ΠΈ: ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ Π°, ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π² MIR Π΅ 178 ΠΏΡΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·Π° ΠΎΡ βGCC -O2β, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠ·ΠΎΡΡΠ°Π²Π° ΠΎΡ Π½Π°ΡΠΈΠ²Π½ΠΈΡ ΠΊΠΎΠ΄ Ρ 6%, ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΊΠΎΠ΄Π° Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ Ρ 144 ΠΏΡΡΠΈ, Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° MIR JIT ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ 16 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΡΠ΅Π΄Π° ΠΊΠΎΠ΄.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
