Π Π Π΅Π΄ Π₯Π°Ρ Π½ΠΎΠ² Π»Π΅ΠΊ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ , ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ MIR (Medium Internal Representation, Π΄Π° Π½Π΅ ΡΠ΅ Π±ΡΡΠΊΠ° Ρ Π΄ΡΡΠ³ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ (ΡΡΠ΅Π΄Π½ΠΎ Π½ΠΈΠ²ΠΎ IR), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Rust). ΠΡΠΎΠ΅ΠΊΡΡΡ ΠΈΠΌΠ° Π·Π° ΡΠ΅Π» Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈ ΡΠ°ΠΌΠΊΠ° Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π±ΡΡΠ·ΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΈ ΠΈ JIT-ΠΎΠ²Π΅. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° Π½Π° MIT.
ΠΠ° Π½Π°ΡΡΠΎΡΡΠΈΡ Π΅ΡΠ°ΠΏ Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅, ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠΈΡΠ΅ ΠΊΡΠΌ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ MIR ΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ Π·Π° ΠΈ Π±ΠΈΡΠΎΠ² ΠΊΠΎΠ΄ (Π±ΠΈΡΠΎΠ² ΠΊΠΎΠ΄), Π½ΠΎ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ° Π΄Π° ΡΠ΅ Π²Π½Π΅Π΄ΡΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° 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 ΠΏΡΡΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ, Π° JIT ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° MIR Π΅ 16 000 ΡΠ΅Π΄Π° ΠΊΠΎΠ΄.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
