Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ jit ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ
JIT Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
ΠΡΠ΅Π΄ΠΏΠΎΡΡΠ»ΠΊΠ°
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ»ΡΡΠ°Π»ΠΈ ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ JIT ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡΡ, ΡΡΠ°Π²Π½ΠΈΠΌΠΎΠΉ Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ°Π»ΠΎ ΠΊΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JIT, ΠΈ Π΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ Π»ΡΠ΄Π΅ΠΉ ΠΌΠΎΠ³ΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π±Π°Π·ΠΎΠ²ΡΠ΅ Π·Π½Π°Π½ΠΈΡ ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΌΠΎΠ³ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ Π½Π° ΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΠΎΡΠ΅ΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ JIT-ΠΎΡΡΡΠΎΠ²Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ!
Π‘ ΡΠ΅Π³ΠΎ ΠΌΡ Π½Π°ΡΠ½ΡΠΌ
ΠΠ½Π°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΠΎΡΠΌΠ°ΡΠ΅ (ΠΎΠ±ΡΡΠ½ΠΎ, ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄) Π² Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΈΠ»ΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΆΠ΅ ΡΠΎΡΠΌΠ°ΡΠ΅ (ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄). JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΡ Π΄Π΅Π»Π°Π΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠΌΠΈ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ΄Π° (ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, gcc, clang ΠΈ Π΄ΡΡΠ³ΠΈΠ΅), Π° Β«Just-In-TimeΒ» (ΡΠΎ Π΅ΡΡΡ ΠΏΡΡΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°).
Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ·ΡΠΊ Π²Π²ΠΎΠ΄Π° Π΄Π»Ρ Π½Π΅Π³ΠΎ. Π£ΡΠΈΡΡΠ²Π°Ρ Top Github Languages for 2013 ( ΡΡΠ°ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π² 2013 Π³ΠΎΠ΄Ρ, β ΠΏΡΠΈΠΌ. ΠΏΠ΅Ρ.), JavaScript ΠΊΠ°ΠΆΠ΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠΌ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Ρ ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π² ΡΠ°ΠΌΠΎΠΌ JavaScript. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π·Π²Π°ΡΡ Π΅Π³ΠΎ META-META!
ΠΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ JavaScript Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ (ΠΈ ΡΡΠ°Π·Ρ ΠΆΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ) ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ X64. Π₯ΠΎΡΡ Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ΅ΠΌΡΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ (Intermediate Representations ΠΈΠ»ΠΈ ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ IR) Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π΄Π»Ρ Π½Π°Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ IR, ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Ρ Π²ΡΠ±ΡΠ°Π» aΠ±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ (AST).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΡ ΠΊΠΎΠ΄: obj.method(42) Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ AST (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ esprima.parse(«. «) ):
ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄
ΠΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡΠΎΠ³: Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ JavaScript ( ΡΠ΄Π΅Π»Π°Π½ΠΎ), Π΅Π³ΠΎ AST ( ΡΠ΄Π΅Π»Π°Π½ΠΎ), ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π½Π΅Π³ΠΎ.
ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΡΡ Π³Π»Π°Π²Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Π½ΠΎΠ²ΠΈΡΠΎΠΊ Π² ΡΡΠΎΠΌ, ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΆΠ΅Π»ΡΠΌ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΠ·ΡΡΠΈΡΡ ΡΠ½Π°ΡΠ°Π»Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ. ΠΠΎΡΡΠΎΠΌΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΡΡΠ°Π²Π°ΠΉΡΠ΅ΡΡ Ρ Π½Π°ΠΌΠΈ, ΡΡΠΎ Π½Π΅ Π·Π°ΠΉΠΌΠ΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ!
ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ΄ ΠΏΡΡΠ΅ΠΌ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΉ Π·Π° Π΄ΡΡΠ³ΠΎΠΉ, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ, ΡΡΠΎ ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ:
ΠΠ±ΡΡΠ½ΠΎ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ/Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ (ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌ):
ΠΡΡΡ Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΡΠ°Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ°ΠΊΠΎΠΌ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, ΠΈ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Ρ Π½Π΅ Π±ΡΠ΄Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΡ Π·Π΄Π΅ΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΈΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Ρ Π΄Π°Π» Π²Π°ΠΌ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠΎ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
ΠΠ½Π°Π½ΠΈΡ, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Π²ΡΡΠ΅, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°.
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π°
ΠΠΎΠ»Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ JavaScript β Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ (ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ Π·Π°Π±Π°Π²Π½ΡΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ·ΠΆΠ΅!).
Π‘Π°ΠΌΡΠΉ Π»ΡΡΡΠΈΠΉ ΠΈ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ: ΠΎΠ±ΠΎΠΉΡΠΈ AST Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° Π² Π³Π»ΡΠ±ΠΈΠ½Ρ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π°. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π·Π°Π΄Π°ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΠ°ΠΊΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ Π² ΠΏΡΡΠΌΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠ°ΠΌΡΡΡΡ ΡΠ·ΡΠΊΠ΅, ΠΊΠ°ΠΊ JavaScript. ΠΠΎΡ Π³Π΄Π΅ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡ Π²Π°Ρ Ρ jit.js.
ΠΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ node.js (ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° C++), ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡ ΠΎΠ΄Π½ΡΠΉ Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠΎ
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ:
ΠΡΠ΅ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π», ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°ΠΉΡΠ΅, ΡΡΠΎ Π½Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠ°ΠΊ 0.5, 0.66666 ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΌΠΈ, ΡΡΠΎ Π² Π½ΡΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ:
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ Π΄ΠΎΡΠΈΡΠ°Π»ΠΈ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°! Π ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π· Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΠΊΡΡΠ΅ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ!
JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΊΠ°ΠΊ ΡΡΠ΅Π±Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌ Π£Π½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ΅
ΠΠΊΠΎΠ»ΠΎ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈ Π»Π΅Ρ Π½Π°Π·Π°Π΄ Π²ΡΡΠ»Π° ΠΏΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Hotspot β ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ JVM, Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΡΡΠ°Π²ΡΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΉ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅ JRE ΠΎΡ Sun.
ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°Π» JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π·Π°ΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ ΠΠΆΠ°Π²Ρ Π²ΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΡΡΠ°Π»ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ΡΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΌΠΈ.
Π‘Π΅ΠΉΡΠ°Ρ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ CLR, Python, Ruby, Perl, ΠΈ Π΄Π°ΠΆΠ΅ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ R, ΠΎΠ±Π·Π°Π²Π΅Π»ΠΈΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ JIT-ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠΎΠ².
Π ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ Ρ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΡΡ ΠΏΡΠΎΠ»ΠΈΠ²Π°ΡΡ ΡΠ²Π΅Ρ Π½Π° ΠΌΠ°Π»ΠΎΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Ρ Π°Π·Π°ΠΌΠΈ ΠΈ ΡΠ°ΡΡΠΊΠ°Π· ΠΏΡΠΎ ΡΡΠ΅Π±Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
Π§ΡΠΎΠ±Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ, Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅. ΠΠ°ΡΠ½Π΅ΠΌ ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°.
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ x86/ARM. ΠΡΠΎΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΠ½Π° Π²Π°ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½Π° ΠΈΠΌ Π±Π΅Π· ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ°.
ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ Π½Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° Π¦ΠΠ£, Π° ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
ΠΠ°ΠΊ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ (Java, C#, Python) ΡΡΠ°Π½ΡΠ»ΠΈΡΡΡΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΠΎ-Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄,
ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π°ΠΏΡΡΠΌΡΡ Π½Π° Π¦ΠΠ£, ΠΈ ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ.
ΠΠΎΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅ΠΉ? ΠΡΠ²Π΅Ρ Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠ°ΠΊ Π½ΠΈ ΡΡΡΠ°Π½Π½ΠΎ Π½Π΅ Π²ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ, Ρ ΠΎΡΡ ΠΎΠ½ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ: ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΌΡ Π·Π°ΡΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ Π½Π° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΡΠ·ΡΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ (ΡΠΌ. ΠΠΎΠ½Π²Π΅ΠΉΠ΅Ρ), Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ switch Ρ ΠΊΡΡΠ΅ΠΉ ΠΎΠΏΡΠΈΠΉ, Π·Π°Π³ΠΎΠ½ΡΡΡΠΈΠΉ Π² ΡΡΠΏΠΈΠΊ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ².
ΠΠΏΠΎΠ»Π½Π΅ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π±ΡΠ»ΠΎ Π±Ρ Π»ΠΈΡΡ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π¦ΠΠ£ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π’Π°ΠΊ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ, Π½Π°Π·ΡΠ²Π°Ρ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Just-in-time-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ (JIT). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΠ°Π·Ρ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΡΡΡ βΠΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρβ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ΅ ΡΠΈΡΠ°Π΅Ρ ΠΠΈΠΊΠΎΠ»Π°ΠΉ ΠΠ³ΠΎΡΡΠΈ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π²ΡΠΈΠΉ ΡΡΠ°ΡΡΠΈΠ΅ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΠ: Hotspot, VirtualBox, NativeClient, ΠΈ Π½Π΅ ΠΏΠΎΠ½Π°ΡΠ»ΡΡΠΊΠ΅ Π·Π½Π°ΡΡΠΈΠΉ Π΄Π΅ΡΠ°Π»ΠΈ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠ΄Π΅ΡΠ°ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΏΡΠΎ ΡΡΠΎ Π²ΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅ΠΉ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π±ΡΡΡ ΡΡΡΠ΄Π΅Π½ΡΠΎΠΌ ΠΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π£Π½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΡΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π½Π° Π»Π΅ΠΊΡΠΎΡΠΈΡΠΌΠ΅. Π₯ΠΎΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ ΡΠΎ, Π² ΡΠΈΠ»Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΊΡΡΡΠ° ΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠ΅ΠΉ Π½Π° Π»Π΅ΠΊΡΠΈΡΡ .
Π’ΠΈΠΏΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ mathvm:
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΠΈ
ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ x86?
Asmjit
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Asmjit:
Π― Π΄ΡΠΌΠ°Ρ Ρ Π»ΡΠ΄Π΅ΠΉ, Π·Π½Π°ΠΊΠΎΠΌΡΡ
Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ, ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠΎΠ². ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΠΎ ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ β ΠΎΠ±ΡΠ΅ΠΊΡ runtime, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π° ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° Π΅Π³ΠΎ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ° (RAII).
ΠΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Ρ ΡΠ΅ΡΡΠ°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ»ΠΈ Ρ ΠΌΠ΅Π½Ρ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
ΠΡΠ»Π°Π΄ΠΊΠ°
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ
ΠΠΎΡΠ»Π΅ ΡΡΠ΅Ρ
Π΄Π½Π΅ΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π±Π΅ΡΡ
ΠΈΡΡΠΎΡΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ JIT-ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π±Π΅Π·Π΄ΡΠΌΠ½ΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΠ»ΠΈΡΡ Π² ΠΏΠ°ΠΌΡΡΡ.
ΠΠ°ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π»ΠΎ ΠΏΡΠΈΡΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² ΡΠ΅ΡΡΡ ΡΠ°Π·, Ρ 6 FPS, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ Π΄ΠΎ 36 FPS.
ΠΠΎΠΎΠ±ΡΠ΅ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ΅ΠΌΠ΅ΡΡΡΠ°, ΠΊΠΎΠ³Π΄Π° Π²ΡΡΡΠ½ΠΈΠ»ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ³ΡΡ, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΈ Π½Π°ΠΏΠΎΠ»Π΅ΠΎΠ½ΠΎΠ²ΡΠΊΠΈΠ΅ ΠΏΠ»Π°Π½Ρ: ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎ-Π²Π·ΡΠΎΡΠ»ΠΎΠΌΡ β Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° Π² SSA ΠΈ ΡΠΌΠ½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΠΎΠΉ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ.
ΠΠΎ Π² ΡΠ²ΡΠ·ΠΈ Ρ ΠΎΡΡΡΠΎΠΉ Π½Π΅Ρ
Π²Π°ΡΠΊΠΎΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π±Π°Π½Π°Π»ΡΠ½ΡΠΌ ΠΌΠ°Π»ΠΎΠ΄ΡΡΠΈΠ΅ΠΌ Π²ΡΠ΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ·Π°ΠΈΡΠ½Π΅ΠΉ.
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΡΡ
ΠΏΡΠ½ΠΊΡΠΎΠ² Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ β ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡΠΈΡ
ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π¦ΠΠ£.
ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π½ΠΈΡ
, Π° ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΠΈΡΡ Π΄Π°ΠΆΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ, Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡΡΡ Π² L1-ΠΊΡΡΠ΅, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎ Π΄Π²ΡΡ
ΡΠ°Π· Π΄ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ.
Π― Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π½Π΅ ΡΠ°ΠΌΡΠΌ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, Π½ΠΎ Π·Π°ΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ²ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ: Π±ΡΠ΄Π΅ΠΌ Ρ
ΡΠ°Π½ΠΈΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ
ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ΅ΠΊΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, 7 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ»ΠΎΡΠΎΠ² ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ (ΡΡΡΠΎΠΊΠΈ/ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°) ΠΈ 14 Π΄Π»Ρ ΡΠ»ΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ.
ΠΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠ°Π²Π΄Π°Π½Π½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π³ΠΎΡΡΡΠΈΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΠΈΠ· ΡΡΠ΅ΠΊΠ°, ΡΡΠ°ΡΡΠ²ΡΡΡΠΈΠΉ Π²ΠΎ Π²ΡΠ΅Ρ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ
.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΎ ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π² ΠΌΠ΅ΡΡΠ°Ρ
Π²ΡΠ·ΠΎΠ²Π°.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈΡ
ΠΈΠ΄Π΅ΠΉ, Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° 9 FPS, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄ΠΎΡΡΠΈΠ³Π½ΡΠ² 45 FPS, ΡΡΠΎ Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ ΠΌΠ΅Π½Ρ Π½Π΅ ΡΠ°Π΄ΠΎΠ²Π°ΡΡ.
Peephole-ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠΎΡΡΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ Peephole-ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΠ΄Π΅Ρ ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠΈΡΠΊΠ΅ ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅, Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·-Π·Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ° Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° mathvm, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π²ΡΠΎΠ΄Π΅ (x0
ΠΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
ΠΡΠΎΡΠ΅ΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅:
Π§ΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ ΡΡΠ΅Π΄Ρ CLR, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΠΎΠ±ΡΠ°ΡΠ°ΡΡΠΈΡ ΡΡ ΠΊ ΡΡΠ΅Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² MSIL ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅.
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ MSIL Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ MSIL Ρ ΡΠ΅Π»ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π΄Π»Ρ Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΊΠΎΠ΄ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ.
Π‘ΡΠ΅Π΄Π° CLR ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΈ ΡΡΠ΄ ΡΠ»ΡΠΆΠ±, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ.
ΠΡΠ±ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
Π§ΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌΠΈ ΡΡΠ΅Π΄ΠΎΠΉ CLR, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Visual Basic, C#, Visual C++, F# ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΠΎΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Eiffel, Perl ΠΈΠ»ΠΈ COBOL.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ·ΡΡΠ½ΠΎΠΉ, ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΡΡΠ΅Π΄ΡΡΠ². ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΡΠ·ΡΠΊΠΎΠ²ΡΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΡ ΡΡΠ΅Π΄ΡΡΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΠΊΠΎΠ΄Π΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, Π° Π½Π΅ ΡΡΠ΅Π΄ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΡΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΡΠΈΠΏΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π² ΡΠΎΡΡΠ°Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ CLS. ΠΡΡΠΈΠ±ΡΡ CLSCompliantAttribute ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ CLS-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΡΠ·ΡΠΊΠ° ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΡ ΡΠ·ΡΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² MSIL
ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ·ΡΠΊ Microsoft (MSIL), ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΎΠ±ΠΎΠΉ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. Π―Π·ΡΠΊ MSIL Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ MSIL Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ΅Π΄Π° CLR ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ MSIL ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅.
ΠΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠΎΠ΄ MSIL, ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅. ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² Π² ΠΊΠΎΠ΄Π΅, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅Π½Π° ΡΠΈΠΏΠ°, ΡΠ»Π΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΡΠ΅Π΄ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. MSIL ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π² ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌ (PE) ΡΠ°ΠΉΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠΎΡΠΌΠ°ΡΠ°Ρ Microsoft PE ΠΈ COFF, ΡΠ°Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡ ΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΡΠΎΡ ΡΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΠΊΠΎΠ΄ MSIL ΠΈΠ»ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ°Π·Ρ ΡΡΠ΅Π΄Ρ CLR. ΠΠ°Π»ΠΈΡΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ Π½Π°ΡΡΠ΄Ρ Ρ MSIL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠ΄Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ΅Π±Ρ. ΠΡΠΎ ΡΡΡΡΠ°Π½ΡΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠ·ΡΠΊΠ΅ IDL. Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ MSIL Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
ΠΡΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ·ΡΠΊ MSIL ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ΅Π΄Π° CLR ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π°Π±ΠΎΡ ΡΠ±ΠΎΡΠΎΠΊ MSIL, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ Ρ ΡΠ°Π·Π½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ. ΠΡΠ»ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ API ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅.
ΠΡΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΠΈ ΠΏΠ°ΠΌΡΡΡ Π½Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎΡΡ Π² PE-ΡΠ°ΠΉΠ»Π΅ MSIL Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ MSIL ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π°Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² ΡΠΈΠΏΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΠΈΠΏ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ. ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π°Π³Π»ΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ MSIL Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π°Π³Π»ΡΡΠΊΡ Π½Π° ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄Π°, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π²Π΅Π΄ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ NGen.exe
Π’ΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ MSIL-ΠΊΠΎΠ΄ ΡΠ±ΠΎΡΠΊΠΈ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² ΡΡΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅, ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. Π§ΡΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ΄, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ. ΠΠ³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΡΠΈΠΌ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²ΡΠ·ΠΎΠ²Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°Π±ΠΎΡ ΡΠ±ΠΎΡΠΎΠΊ, ΡΡΠ΅Π΄Π° CLR ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ±ΠΎΡΠΎΠΊ MSIL Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΡΠΈΠ»Π΅ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π² ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ (Ngen.exe). ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ°Π±ΠΎΡΠ° Ngen.exe ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π² ΡΡΠ΅Ρ Π°ΡΠΏΠ΅ΠΊΡΠ°Ρ .
Ngen.exe Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· MSIL-ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° Π½Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π° Π½Π΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π·Π° ΡΠ°Π·.
ΠΠ½Π° ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΠΊΡΡΠ΅ ΠΎΠ±ΡΠ°Π·Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ ΡΠ°ΠΉΠ»Π° Π½Π° Π΄ΠΈΡΠΊΠ΅.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ΄Π°
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ MSIL-ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠΉΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΊΠΎΠ΄Π°. MSIL-ΠΊΠΎΠ΄ ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π½Π° ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ. ΠΡΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ΅ΠΌ Π°Π΄ΡΠ΅ΡΠ°ΠΌ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ Π΅ΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ. Π’ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° ΠΈ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΠΈΡ Π·Π°ΡΠΈΡΠ΅ ΠΎΡ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ. ΠΠ½Π° ΡΠ°ΠΊΠΆΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΊΠΎΠ΄Π°.
Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΈΡΡΠΈΠ½Π½ΠΎΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π°ΡΡΠ΅Π³ΠΎΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:
ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠΈΠΏ ΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΡΠΌ ΡΠΈΠΏΠΎΠΌ;
Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ;
ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΡΠΌΠΈ.
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄Π° MSIL Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ ΠΊΠΎΠ΄ MSIL, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ MSIL ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΡΠΎΠΉΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΈΠ·-Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ΄Π΄Π°ΡΡΠΈΠΉΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄. ΠΡΠ»ΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΡΠΎ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
Π‘ΡΠ΅Π΄Π° CLR ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΈ ΡΡΠ΄ ΡΠ»ΡΠΆΠ±, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. ΠΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ MSIL-ΠΊΠΎΠ΄, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈ Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ. ΠΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ JIT-ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΡΠΎΡΠ΅ΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠ°ΠΊ ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π½Π΅ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ.
Π Microsoft Windows Vista Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡ Π±ΠΈΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ COFF. Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π±ΠΈΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Mscoree.dll, Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ _CorValidateImage ΠΈ _CorImageUnloading ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΎ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° _CorValidateImage Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΊΠΎΠ΄ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠ°ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° Π² ΠΎΠ±ΡΠ°Π·Π΅ Π½Π° ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° Π² ΡΡΠ΅Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π 64-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Windows _CorValidateImage ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π·, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΅Π³ΠΎ ΠΈΠ· ΡΠΎΡΠΌΠ°ΡΠ° PE32 Π² ΡΠΎΡΠΌΠ°Ρ PE32+.
[ΠΠ΅ΡΠ΅Π²ΠΎΠ΄] ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Graal β JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ JVM Π½Π° Java
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΡΠ°Π» ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ, Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π΅ Π»ΡΠ΄Π΅ΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠΌΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠΌΠΈ, ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΡΡ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠΎΠ³Π΄Π° Ρ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π±ΡΠ΄ΡΡΠΈ ΡΠ΅Π±Π΅Π½ΠΊΠΎΠΌ, ΠΈ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΡΡ Ρ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠ΅ΡΠ²ΡΠΌ, ΠΎ ΡΠ΅ΠΌ Ρ Ρ ΠΎΡΠ΅Π» ΡΠ·Π½Π°ΡΡ, Π±ΡΠ»ΠΎ ΡΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈ ΡΠ°ΠΌΡΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ, ΡΡΠΎ ΠΌΠ½Π΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ, Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°.
Π ΡΡΠΎΠΌ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠΈ Π²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° β Java. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Graal, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Java Π½Π° Java.
Graal ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π² ΡΠ°Π±ΠΎΡΠ΅ Java β ΡΡΠΎ just-in-time ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. ΠΡΠΎ ΡΠ° ΡΠ°ΡΡΡ JVM, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ Java Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² Ρ ΠΎΠ΄Π΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΊΡΠΎΡΠΎΠ² ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΠΎ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π»ΡΠ΄Π΅ΠΉ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈ ΡΡΠΌΠ°Π½Π½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ JVM, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½Π΅ ΡΠ°ΠΌΠΎΠΊ ΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ. ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π»ΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ JVM; Π² ΡΠ΅Π»ΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄; ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Java, ΡΠΎ, Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΠΈΠ·Π»Π°Π³Π°Π΅ΠΌΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π».
Π― Π½Π°ΡΠ½Ρ Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Ρ ΠΎΡΠ΅ΡΡ Π½ΠΎΠ²ΡΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π»Ρ JVM Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Java, Π° ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠΊΠ°ΠΆΡ, ΡΡΠΎ Π² ΡΡΠΎΠΌ Π½Π΅Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ ΡΠ²Π΅ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄ΡΠΌΠ°ΡΡ, ΡΠ°Π·Π±ΠΈΠ² Π·Π°Π΄Π°ΡΡ Π½Π° ΡΠ±ΠΎΡΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
Π― ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΡΡΠΎΠ½Ρ ΡΠ΅ΠΎΡΠΈΡ, ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠΊΠ°ΠΆΡ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² Ρ ΠΎΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° Π΄ΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠ΅ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ, ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΠΏΠΎΠ»ΡΠ·Π΅ Π΄Π°Π½Π½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Java Π½Π° Java ΡΠ°Π΄ΠΈ Π΅Ρ ΡΠ°ΠΌΠΎΠΉ.
Π― Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΡΠΈΠ½ΡΠΎΡΡ ΠΊΠΎΠ΄Π° Π² Eclipse, Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ° Π² Ρ ΠΎΠ΄Π΅ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅ΠΌΠΈΠ½ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ live-ΠΊΠΎΠ΄ΠΈΠ½Π³Π°.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ?
Π― ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π²Π°Ρ Π·Π½Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π½ΠΎ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΊΠΎΡΠ½ΡΡΡ ΠΎΡΠ½ΠΎΠ² ΡΡΠΎΠ±Ρ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΡΠΈΠ΄Π΅Π» ΡΡΡ Π±ΠΎΡΡΡ Π·Π°Π΄Π°ΡΡ ΡΡΠΎΡ Π³Π»Π°Π²Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ.
ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ javac ΠΈΠ»ΠΈ compile-on-save Π² IDE, Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° Java ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· Java-ΠΊΠΎΠ΄Π° Π² Π±Π°ΠΉΡΠΊΠΎΠ΄ JVM, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ½ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΠΈ ΠΏΡΠΎΡΡ, ΡΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Java-ΠΊΠΎΠ΄. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ Π½ΠΎΡΡΠ±ΡΠΊΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄ JVM.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ JVM ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΡΡΠΎΡ Π±Π°ΠΉΡΠΊΠΎΠ΄. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ, ΠΎΠ±ΡΡΠ½ΠΎ, Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΠΉ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅. ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ JVM, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π²Π°Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΡΠΆΠ΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
ΠΠ°ΡΠ΅ΠΌ ΠΏΠΈΡΠ°ΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π° Java?
ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ JVM ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ OpenJDK Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΊΠ°ΠΊ C1, ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π½ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ, Π²ΡΠ΄Π°Π΅Ρ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄. Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΊΠ°ΠΊ opto ΠΈΠ»ΠΈ C2, ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ°Π±ΠΎΡΡ, Π½ΠΎ Π²ΡΠ΄Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΠ» Π΄Π»Ρ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½Ρ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ·Ρ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ β Π΄Π»Ρ Π΄ΠΎΠ»Π³ΠΎΠΈΠ³ΡΠ°ΡΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ.
ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ΄ ΡΠΏΠ΅ΡΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΡΡ C1, ΠΈ ΠΏΠΎΡΠ»Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π·Π°ΡΡΠ°ΡΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, β C2. ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ (tiered compilation).
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π½Π° C2 β ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ OpenJDK Ρ Π·Π΅ΡΠΊΠ°Π»Π° Π½Π° GitHub, ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΊΡΡΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° ΡΠ°ΠΉΡΠ΅.
ΠΠΎΠ΄ C2 Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² openjdk/hotspot/src/share/vm/opto.
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ C2 Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C++. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π² ΡΡΠΎΠΌ Π½Π΅Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ, Π½ΠΎ Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ. Π‘++ β Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ Π² C++ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΊΡΠ°Ρ Ρ VM. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΠΎΠΌΡ Π²ΠΎΠ·ΡΠ°ΡΡ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΊΠΎΠ΄ C2 Π½Π° C++ ΡΡΠ°Π»ΠΎ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ.
ΠΠ΄Π½Π° ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠΈΠ³ΡΡ, ΡΡΠΎΡΡΠΈΡ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ C2, Cliff Click ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π±Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΠ°Π» ΠΏΠΈΡΠ°ΡΡ VM ΠΎΠΏΡΡΡ Π½Π° C++, ΠΈ ΠΌΡ ΡΠ»ΡΡΠ°Π»ΠΈ ΠΊΠ°ΠΊ JVM-ΠΊΠΎΠΌΠ°Π½Π΄Π° Twitter Π²ΡΡΠΊΠ°Π·ΡΠ²Π°Π»Π° ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ C2 ΠΏΡΠΈΡΠ΅Π» Π² Π·Π°ΡΡΠΎΠΉΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π°ΠΌΠ΅Π½Ρ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΡΠ°ΠΊ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ Π²ΠΎΠΏΡΠΎΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ Π΅ΡΡΡ Π² Java, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠ΅ΡΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ? Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ Π΄Π°Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Java Π²ΠΌΠ΅ΡΡΠΎ C++. ΠΡΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ (ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΡΠ°Ρ ΠΎΠ², ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π²ΠΈΡΡΡΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ), Ρ ΠΎΡΠΎΡΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° (ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ, ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ, ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π²ΡΠΎΠ΄Π΅ VisualVM), Ρ ΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° IDE ΠΈ Ρ.Π΄.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Graal
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ, β ΡΡΠΎ Java 9. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Graal ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ JVMCI Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Java Π² ΡΠ°ΠΌΠΊΠ°Ρ JEP 243 Java-Level JVM Compiler Interface ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ, Π΅Π³ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅ΠΉ, ΡΠ²Π»ΡΠ΅ΡΡΡ Java 9. Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ 9+181. Π ΡΠ»ΡΡΠ°Π΅ ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈΠΌΠ΅ΡΡΡΡ ΠΏΠΎΡΡΡ (backports) Π΄Π»Ρ Java 8.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΌ Graal. Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ GraalVM Π²Π΅ΡΡΠΈΠΈ 0.28.2.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Graal Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Eclipse IDE. Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Eclipse 4.7.1. mx ΠΌΠΎΠΆΠ΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π½Π°Ρ ΡΠ°ΠΉΠ»Ρ Eclipse-ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π§ΡΠΎΠ±Ρ ΠΎΡΠΊΡΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ graal ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ (workspace) Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ File, Importβ¦, General, Existing projects ΠΈ ΠΎΠΏΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ graal. ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ Eclipse Π½Π΅ Π½Π° Java 9, ΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΠΊΠΆΠ΅, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΡΡ ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ JDK.
Π₯ΠΎΡΠΎΡΠΎ. Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΎ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠ΄.
Π― Π½Π΅ Π±ΡΠ΄Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΡΠΎ ΠΏΠΎΡΡΠ½ΡΡΡ, Π° ΡΠΊΠ°ΠΆΡ Π»ΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ Π»ΠΎΠ³Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ workload Π±ΡΠ» ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½.
Π’Π΅ΠΏΠ΅ΡΡ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π½Π°ΡΠ΅ΠΉ Java 9 JVM, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Graal. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π°Π³ΠΎΠ².
ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π±ΡΠ» ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄. ΠΠΎ, Π² ΡΡΠΎΡ ΡΠ°Π·, Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΉ Graal. ΠΠΎΠΊΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ²Π΅ΡΡΡΠ΅ ΠΌΠ½Π΅ Π½Π° ΡΠ»ΠΎΠ²ΠΎ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° JVM
ΠΠ°ΠΌ Π½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΡΠΎ-ΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠ΅? Π£ Π½Π°Ρ Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½Π°Ρ JVM, ΠΈ ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½ΠΎΠ²ΡΠΉ Π½Π΅ ΠΌΠ΅Π½ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π² ΡΠ°ΠΌΠΎΠΉ JVM. ΠΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ JVM ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ JVMCI, β JVM compiler interface, β ΡΠΎ, ΡΡΠΎ ΠΊΠ°ΠΊ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π²ΡΡΠ΅, Π±ΡΠ»ΠΎ JEP 243 ΠΈ Π²ΠΎΡΠ»ΠΎ Π² Java 9.
ΠΠ΄Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠΌ JVM.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΆΠ΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² javac Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ API Java Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ (Java annotation processing API). ΠΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π΅.
Π’Π°ΠΊΠΆΠ΅, Π²Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° Π² JVM Ρ ΠΏΠΎΠΌΠΎΡΡΡ Java-Π°Π³Π΅Π½ΡΠΎΠ² (Java agents). ΠΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄ Java ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Ρ Π΅Π³ΠΎ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅.
ΠΠ΄Π΅Ρ JVMCI ΡΡ ΠΎΠΆΠ°. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Java JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Java.
Π‘Π΅ΠΉΡΠ°Ρ Ρ Ρ ΠΎΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ°ΡΡ ΡΠ»ΠΎΠ² ΠΎ ΡΠΎΠΌ ΠΊΠ°ΠΊ Π±ΡΠ΄Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Ρ ΠΎΠ΄Π΅ ΡΡΠΎΠΉ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ. Π‘Π½Π°ΡΠ°Π»Π°, Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈΠ΄Π΅ΠΈ, Ρ Π±ΡΠ΄Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ Π»ΠΎΠ³ΠΈΠΊΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ»Π°ΠΉΠ΄Π°Ρ , Π° ΠΏΠΎΡΠ»Π΅ Π±ΡΠ΄Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΡ Eclipse ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½ΠΎ Π³Π»Π°Π²Π½Π°Ρ ΠΈΠ΄Π΅Ρ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠΎΠΉ ΠΆΠ΅. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π»ΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ Ρ ΠΎΡΡ Π΅Π³ΠΎ ΡΠΊΡΡΠ²Π°ΡΡ, Ρ ΠΎΡΡ ΠΎΠ½ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌ.
Π‘ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Ρ ΠΏΡΠΈΡΡΡΠΏΠ°Ρ ΠΊ ΡΠ°Π·Π²Π΅ΠΈΠ²Π°Π½ΠΈΡ ΠΌΠ½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠ³Π»ΠΎ Ρ Π²Π°Ρ Π±ΡΡΡ, ΡΡΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ.
Π§ΡΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄? ΠΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π΄ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ. Π Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² Π±Π°ΠΉΡ.
Π§ΡΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ΄Π°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°? ΠΠ½ Π²ΡΠ΄Π°Π΅Ρ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΡΠΎ ΡΠΎΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² Π±Π°ΠΉΡ.
Π ΠΈΡΠΎΠ³Π΅, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π΄ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π΄Π»Ρ Π΅Π³ΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ Π² JVM, Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ.
Π’Π°ΠΊΠΆΠ΅, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ (install) ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² JVM, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ API.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠΌΡΡ Π² Eclipse IDE Ρ Graal ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈ ΠΊΠ»Π°ΡΡΡ. ΠΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½ΠΎ Π½Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ.
Π‘Π΅ΠΉΡΠ°Ρ Ρ Ρ ΠΎΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π½ΠΎΡΠΈΡΡ Π² Graal ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΈ ΡΡΠ°Π·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² Java 9. Π― Π΄ΠΎΠ±Π°Π²Π»Ρ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π»ΠΎΠ³Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Graal. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ Π² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ JVMCI.
ΠΠΎΠΊΠ° ΠΎΡΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ Π² HotSpot Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΡΡ Π½Π°ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
ΠΡΠ°Ρ Graal
ΠΠΎ ΡΡΡΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π΅ΠΌΡ ΡΠΏΠΈΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½Ρ.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Graal ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π³ΡΠ°Ρ. ΠΡΠ»ΠΈ Π²Π·ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΌΠΌΠΈΡΡΠ΅Ρ Π΄Π²Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΠΎ Π³ΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ·Π»Ρ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ΄ΠΈΠ½ ΡΠ·Π΅Π» Π΄Π»Ρ ΡΡΠΌΠΌΡ, ΠΈ Π΄Π²Π° ΡΠ΅Π±ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ Π³ΡΠ°ΡΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (program dependency graph).
Π‘ΠΈΠ½ΠΈΠ΅ ΡΠ΅Π±ΡΠ° Π½Π° ΡΡΠΎΠΌ Π³ΡΠ°ΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΎΡ ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΊ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π’Π°ΠΊΠΆΠ΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π±ΡΠ° Π΄Π»Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠ·ΠΎΠ²Π°, ΠΈ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»ΡΡΡ ΠΈΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (Π½Π΅ Π·Π½Π°Ρ ΠΎ ΠΊΠΎΠ΄Π΅ Π²Π½ΡΡΡΠΈ). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅Π±ΡΠ° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈ Π·Π°Π΄Π°ΡΡ ΡΡΠΎΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ. ΠΠ½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ ΠΊΡΠ°ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ.
ΠΡΠ°ΠΊ, Π³ΡΠ°Ρ Graal, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΡΡΠΎ Π΄Π²Π° Π³ΡΠ°ΡΠ° ΡΠΎΠ²ΠΌΠ΅ΡΠ΅Π½Π½ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ. Π£Π·Π»Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅, Π½ΠΎ ΠΎΠ΄Π½ΠΈ ΡΠ΅Π±ΡΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ , Π° Π΄ΡΡΠ³ΠΈΠ΅ β ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ.
ΠΡΠΎΡΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π°ΠΏΠΈΡΠ°Π² Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ 0 ( P(0 ) ΠΈ 1 ( P(1) ) ΠΏΠΎΡΡΡΠΏΠ°ΡΡ Π½Π° Π²Ρ ΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ, Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ 2 ( C(2) ) ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π²Π΅Π΄Π΅ΠΌ ΡΠΈΠΊΠ».
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ·Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠΈΠΊΠ»Π°, ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΈ ΡΡΠ΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ°ΠΊ ΠΈ ΡΠ°Π½Π΅Π΅, ΡΠΈΠ½ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ , Π° ΠΊΡΠ°ΡΠ½ΡΠ΅ β ΠΏΠΎΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·ΡΠ²Π°ΡΡ ΠΌΠΎΡΠ΅ΠΌ ΡΠ·Π»ΠΎΠ² (sea of nodes) ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠ½ΠΊΠΎΠΉ ΡΠ·Π»ΠΎΠ² (soup of nodes).
Π₯ΠΎΡΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ C2 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΡΡ ΠΎΠΆΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΈ, Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈΠΌΠ΅Π½Π½ΠΎ C2 ΠΏΠΎΠΏΡΠ»ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π» ΠΈΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΌΠΎΡΡ ΡΠ·Π»ΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ Π½Π΅ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Graal.
Π― Π½Π΅ Π±ΡΠ΄Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ° Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Graal ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ . Π ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ ΠΏΠΎΡΠ΅ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π½Π° Java ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ». Java β ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, Π° Π³ΡΠ°Ρ β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ ΡΠ΅Π±ΡΠ°ΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠ»ΠΎΠΊ.
ΠΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° ΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΡΡΠΈ ΠΈΠ΄Π΅ΠΈ Π²ΡΠ³Π»ΡΠ΄ΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°ΠΏΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°. ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Ρ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
ΠΡΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠΉ Π½Π° Π²Ρ ΠΎΠ΄Π΅ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π²Ρ ΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄.
ΠΠ°ΡΡΠ΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡΡΡΠΎΠΈΡΠ΅Π»Ρ Π³ΡΠ°ΡΠ°
ΠΠΎΡΡΡΠΎΠΈΡΠ΅Π»Ρ, Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ ΡΡΠΎΡ ΠΌΠ°ΡΡΠΈΠ² Π±Π°ΠΉΡ ΠΊΠ°ΠΊ Π±Π°ΠΉΡΠΊΠΎΠ΄ JVM, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π΅Π³ΠΎ Π² Π³ΡΠ°Ρ Graal. ΠΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ, ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π°, Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ β ΠΏΠΎΡΡΡΠΎΠΈΡΠ΅Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ Java, Π½ΠΎ, Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠ°ΠΌΠΈ ΡΠ΅Π±Π΅Ρ ΠΈ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΈΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ.
ΠΠ°Π²Π°ΠΉΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Graal Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Java, ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Eclipse. ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΅ΡΡΡ ΡΠ·Π΅Π» ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΉΠ΄Π΅ΠΌ Π³Π΄Π΅ ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ.
ΠΡΡΠ΅ Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ, Ρ.ΠΊ. Π²ΡΠ΅ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°. ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π±ΡΠ» ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ JVM, ΡΠΎΠ³Π΄Π° ΠΎΠ½ Π±Ρ ΡΠ½ΡΠ» Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎ ΡΡΠ΅ΠΊΠ°, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ» ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΡΠ½ΠΈΠΌΠ°Π΅ΠΌ ΡΠΎ ΡΡΠ΅ΠΊΠ° Π΄Π²Π° ΡΠ·Π»Π°, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎΠ²ΡΠΉ ΡΠ·Π΅Π» Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π² ΡΡΠ΅ΠΊΠ΅.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΡΠΎΠΈΡΡΡ Π³ΡΠ°Ρ Graal.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
ΠΠΎΠ²ΡΠΎΡΡΡΡ, ΡΡΡ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π½Π° ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ. Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Π²ΡΠ΄Π°Π΅ΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅ Π²Π΄Π°Π²Π°ΡΡΡ Π² Π΄Π΅ΡΠ°Π»ΠΈ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ΅ΡΠ°Π»ΠΈ emitAdd Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½Ρ ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Ρ ΠΏΠΎ ΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅, ΡΡΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ΅Π±ΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ², Π½ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ, ΠΌΠΎΠ³ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΈΡ ΠΊΠΎΠ΄Π°. ΠΠΎΡΡΠΎΠΌΡ Ρ Π΅ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°, ΠΈ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅.
ΠΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ²Π»ΡΡΡΡΡ Π±Π°ΠΉΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ByteBuffer β ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π±Π°ΠΉΡ.
ΠΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π½Π΅Π΅ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ Ρ Π²Ρ ΠΎΠ΄Π½ΡΠΌ Π±Π°ΠΉΡΠΊΠΎΠ΄ΠΎΠΌ β Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠΊΡ Π±Π°ΠΉΡ Π² ΠΌΠ΅ΡΡΠ΅ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
Π’Π°ΠΊΠΆΠ΅ Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅. ΠΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ HotSpot. Π― ΠΏΠΎΠΊΠ°ΠΆΡ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ. ΠΠ½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ OpenJDK, Π½ΠΎ, ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π² ΠΏΠΎΡΡΠ°Π²ΠΊΡ JVM, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ Π΅Π³ΠΎ ΡΠ°ΠΌΠΈΠΌ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π₯ΠΎΡΠΎΡΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ ΡΡΠΎ ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠΌ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅. Π― ΠΈΠ·ΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄ generate ΡΠ·Π»Π° ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ½ Π²ΡΠ΄Π°Π²Π°Π» ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ.
ΠΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΡΠΎ, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΎΠ±Π° Π±Π°ΠΉΡΠ° ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ, ΠΈ Π½Π° ΠΏΠ΅ΡΠ°ΡΡ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
ΠΡΠ°ΠΊ, ΡΡΠΎ ΠΌΡ ΡΠ·Π½Π°Π»ΠΈ? Graal ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π±Π°ΠΉΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°; ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π³ΡΠ°Ρ ΡΠ·Π»ΠΎΠ²; ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ ΡΠ·Π»Ρ Π²ΡΠ΄Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ; ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΊΠΎΠ΄ΠΈΡΡΡΡΡΡ. ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π½Π΅ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΌ Graal.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ
Π ΡΠ°ΠΊ, ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΈΡΡΡ Π³ΡΠ°Ρ, ΠΈ ΠΊΠ°ΠΊ ΡΠ·Π»Ρ Π³ΡΠ°ΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠΎΠΌ ΠΊΠ°ΠΊ Graal ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π³ΡΠ°Ρ, Π΄Π΅Π»Π°Ρ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ.
Π€Π°Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π³ΡΠ°ΡΠ°. Π€Π°Π·Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠ°Π½ΠΎΠ½ΠΈΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (canonicalisation)
ΠΠ°Π½ΠΎΠ½ΠΈΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ·Π»ΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. Π£ ΡΡΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π½ΠΎ Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Ρ ΡΠΊΠ°ΠΆΡ, ΡΡΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ (constant folding) ΠΈ ΡΡΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ·Π»ΠΎΠ².
ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Graal ΠΏΡΠΎΡΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ. ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π΄Π°Π½Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΎΡΡΠ° Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
Global value numbering
Global value numbering (GVN) β ΡΡΠΎ ΡΠ΅Ρ Π½ΠΈΠΊΠ° ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠ΅Π³ΠΎΡΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅ a + b ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ β ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½.
Graal ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΡΠ·Π»Ρ Π½Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ β ΠΎΠ½ΠΈ ΡΠ°Π²Π½Ρ Π΅ΡΠ»ΠΈ Ρ Π½ΠΈΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π ΡΠ°Π·Π΅ GVN Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΠ·Π»ΠΎΠ² ΠΈ ΠΈΡ Π·Π°ΠΌΠ΅Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ. ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π·Π° ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ hash map Π² Π²ΠΈΠ΄Π΅, ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π°, ΠΊΡΡΠ° ΡΠ·Π»ΠΎΠ².
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ·Π΅Π» Π½Π΅ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ β ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠ²ΠΈΡΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠ»ΠΈ Π±Ρ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, Π²ΡΠ·ΡΠ²Π°Π»ΡΡ ΠΌΠ΅ΡΠΎΠ΄, ΡΠΎ ΡΠ΅ΡΠΌ ΡΡΠ°Π» Π±Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈ Π½Π΅ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΠΌ, Π° ΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Π² ΠΎΠ΄ΠΈΠ½ β Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ.
Π£ΠΊΡΡΠΏΠ½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (lock coarsening)
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΠΈΡΡΡ ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π²Π° ΡΠ°Π·Π° ΠΏΠΎΠ΄ΡΡΠ΄ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ°ΠΊ Π½Π΅ ΠΏΠΈΡΠ°Π»ΠΈ, Π½ΠΎ ΡΡΠΎ ΡΡΠ°Π»ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ (inlining).
ΠΡΠ»ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΠΎ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π²ΠΌΠ΅ΡΡΠΎ Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°Ρ Π²Π°ΡΠ° Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°Π³Π΅. ΠΡΠΎ ΠΈ Π΅ΡΡΡ ΡΠΊΡΡΠΏΠ½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ.
ΠΠ΅ Π·Π°ΡΡΠΎΠ½ΡΡΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ
Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΠ°Π±ΠΎΡΡ Graal Π½Π° Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Ρ ΡΠΏΡΡΡΠΈΠ» ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²Π°ΠΆΠ½ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Ρ, ΡΠ°ΠΊΠΆΠ΅, ΠΏΡΠΎΠΏΡΡΡΠΈΠ» Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π²Π΅ΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅.
Π― Π½Π΅ ΡΠ°ΡΡΠΊΠ°Π·Π°Π» ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΡΡ Graal ΠΏΠΎ ΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅, ΡΡΠΎ ΠΎΠ½ΠΈ, ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ, Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΡ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄, Π½ΠΎ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π³Π΄Π΅, ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡ Π½Π°ΠΉΡΠΈ.
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
Π ΠΌΠΎΠ΄Π΅Π»ΠΈ Π³ΡΠ°ΡΠ° Graal Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ·Π»Ρ ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π±Π΅Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΎ ΡΡΠΎ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΡΠΈ ΡΠ΅Π±ΡΠ° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ? ΠΡΠ»ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ Π½ΡΠΆΠ½Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΠΎ ΡΡΠΎ ΠΎΠ½ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ?
Π Π΅Π±ΡΠ°, Π² ΠΈΡΠΎΠ³Π΅, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. Π Π΅Π³ΠΈΡΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π°Ρ ΠΎΠ΄ΡΡΡ Π½Π°Π΄ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΡΠΎΠ²Π½ΡΠΌΠΈ ΠΊΠ΅ΡΠ΅ΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π°Π΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠ°ΡΠΈΠ½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΈ ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΡ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈ, ΠΏΠΎΡΠ»Π΅, ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠΉ.
ΠΠ°Π΄Π°ΡΠ° Π²ΡΠ±ΠΎΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π±ΡΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² (register allocation). Graal ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ, ΡΡ ΠΎΠΆΠΈΠΉ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ, Π°Π»Π³ΠΎΡΠΈΡΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² β Π°Π»Π³ΠΎΡΠΈΡΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ°Π·Π²ΡΡΡΠΊΠΈ (linear scan algorithm).
ΠΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ
ΠΡΠ΅ ΠΎΠ΄Π½Π° Π±Π°Π·ΠΎΠ²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ Π½Π΅ ΡΠΏΠΎΠΌΡΠ½ΡΠ», Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ Π³ΡΠ°Ρ ΡΠ·Π»ΠΎΠ² Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ, ΠΈ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°Π½ΡΡΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ (Ρ.Π΅. ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°), ΡΠΎ Π³ΡΠ°Ρ ΡΠΎΠΆΠ΅ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π°ΠΌ ΠΎΠ± ΡΡΠΎΠΌ. ΠΠΎ, ΠΏΡΠΈ Π²ΡΠ΄Π°ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²Ρ ΠΎΠ΄Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π³ΡΠ°ΡΠ° (graph scheduling). ΠΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ·Π»ΠΎΠ². ΠΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠΎΠ΄Π° ΡΡΠΈΡΡΠ²Π°Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Ρ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅Π³ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅ΡΠ΅ Ρ ΠΈΡΡΠ΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ² Π·Π½Π°Π½ΠΈΠ΅ ΠΎΠ± ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ ΡΠ΅ΡΡΡΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈ Π΄Π°Π²Π°ΡΡ Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ.
Π ΠΊΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Graal?
Π Π½Π°ΡΠ°Π»Π΅ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π² Π²Π²ΠΎΠ΄Π½ΠΎΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ», ΡΡΠΎ, Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Graal β ΡΡΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π° Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡ Oracle. ΠΠ°ΠΊΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΠΌΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ Graal?
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ (final-tier compiler)
C ΠΏΠΎΠΌΠΎΡΡΡ JVMCI Graal ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π² HotSpot β ΡΠΎ, ΡΡΠΎ Ρ ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π» Π²ΡΡΠ΅. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ (ΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ Π² HotSpot) ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π² Graal ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ³ΡΠΎΠΌΠ½Π°Ρ ΠΏΠΎΠ»ΡΠ·Π° ΠΎΡ JVMCI Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°ΡΡ Graal ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ JVM. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°ΡΡ (deploy) ΠΊΠ°ΠΊΡΡ-ΡΠΎ Π²Π΅ΡΡΠΈΡ JVM, ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Graal. ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Java-Π°Π³Π΅Π½ΡΠ°ΠΌΠΈ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Graal, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠΈ ΡΠ°ΠΌΠΎΠΉ JVM.
ΠΡΠΎΠ΅ΠΊΡ OpenJDK ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Metropolis ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅Π»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ JVM Π½Π° ΡΠ·ΡΠΊΠ΅ Java. Graal ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°Π³ΠΎΠ² Π² ΡΡΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ
Graal ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Graal ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ JVM, Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Graal Π½ΠΎΠ²ΡΡ ΡΠ°Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π² Graal Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΠΎΠ²ΡΡ ΡΠ°Π·Ρ. ΠΠ»ΠΈ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΊΠΎΠ΄ΠΎΠ² ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ JNI.
Charles Nutter ΡΠΆΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π΄Π»Ρ JRuby ΠΈ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π» ΡΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΡΠ°Π·Ρ Graal ΡΠΌΡΠ³ΡΠ°ΡΡΠ΅ΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΡΠ΅Π» Ruby. ΠΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠΊΠΎΡΠΎ ΠΎΠ½ Π²ΡΡΡΡΠΏΠΈΡ Ρ ΡΡΠΈΠΌ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ.
AOT (ahead-of-time) ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ
Graal β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Java. JVMCI ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Graal, Π΄Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Graal Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π° ΠΎΡ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Graal ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΊ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΌΠ΅ΠΆΠ΄Ρ JIT- ΠΈ AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π½Π΅ ΡΠ°ΠΊΠ°Ρ ΡΠΆ ΠΈ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°Π·Π½ΠΈΡΠ°, ΠΈ Graal ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ . Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ AOT Ρ ΠΏΠΎΠΌΠΎΡΡΡ Graal.
Java 9 Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ Π΄Π»Ρ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° ΡΠ°Π·Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΡΠ΅ Π΅ΡΠ΅ Π½ΡΠΆΠ½Π° JVM, ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄.
AOT Java 9 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΡΡ Π²Π΅ΡΡΠΈΡ Graal, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ Linux. ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ Ρ Π½Π΅ ΡΡΠ°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Ρ Π΄Π»Ρ Π΄Π΅ΠΌΠΎ ΠΈ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π» ΡΠ±ΠΎΡΠΊΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΠΆΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π±ΠΎΠ»Π΅Π΅ Π°ΠΌΠ±ΠΈΡΠΈΠΎΠ·Π΅Π½. SubstrateVM β ΡΡΠΎ AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ JVM ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ-ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ (statically linked) ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ JVM Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ. ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ SubstrateVM ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Graal. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (just-in-time) SubstrateVM, ΡΠ°ΠΊΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Graal Π² ΡΠ΅Π±Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Graal AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΠ΅Π±Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ.
Truffle
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Graal Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Truffle. Truffle β ΡΡΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ²Π΅ΡΡ JVM.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠΎΠ², ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π½Π° JVM, Π²ΡΠ΄Π°ΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠΎΠΌ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ (Π½ΠΎ, ΠΊΠ°ΠΊ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π²ΡΡΠ΅, ΠΏΠΎ ΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅, ΡΡΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ JVM ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΡΠ½ΡΠΉ ΡΡΠΈΠΊ, Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΄Π½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Ρ ΡΡΠΈΠΌ Π±Π°ΠΉΡΠΊΠΎΠ΄ΠΎΠΌ). Truffle ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ β Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ·ΡΠΊΠ°, ΡΠ»Π΅Π΄ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ, ΠΈ Truffle, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ (partial evaluation).
Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°ΡΡΡ, Π½ΠΎ Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° (inlining) ΠΈ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ (constant folding) ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌΠΈ Π΅Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. Graal ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Truffle ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»Ρ.
ΠΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ Ρ ΠΈ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΡΡ Ρ Graal β ΡΠ΅ΡΠ΅Π· Truffle. Π― ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π°Π΄ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ruby, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ TruffleRuby ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Truffle ΠΈ, ΡΠ°ΠΊΠΆΠ΅, Graal. TruffleRuby β ΡΡΠΎ ΡΠ°ΠΌΠ°Ρ Π±ΡΡΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ruby, ΠΎΠ±ΡΡΠ½ΠΎ Π² 10 ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅ Π΄ΡΡΠ³ΠΈΡ , ΠΊΠΎΡΠΎΡΠ°Ρ, ΠΏΡΠΈ ΡΡΠΎΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
ΠΡΠ²ΠΎΠ΄Ρ
ΠΠ»Π°Π²Π½Π°Ρ ΠΈΠ΄Π΅Ρ, ΠΊΠΎΡΠΎΡΡΡ Ρ Ρ ΠΎΡΠ΅Π» Π΄ΠΎΠ½Π΅ΡΡΠΈ ΡΡΠΈΠΌ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Java ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π½Π°ΡΠ»Π΅Π΄ΡΡ ΠΈΡ ΠΎΡ Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ, ΡΠ°ΠΊΠΆΠ΅, ΠΈΠ·-Π·Π° ΠΆΠ΅Π»Π°Π½ΠΈΡ Π²ΡΠ΄Π°ΡΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ. ΠΠΎ, Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ, ΡΡΠΎ Π²Π΅ΡΡ Π½Π΅ΡΡΠΎΠ²Π½Π΅Π²Π°Ρ Π·Π°Π΄Π°ΡΠ°. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅Ρ byte[] Π±Π°ΠΉΡΠΊΠΎΠ΄Π° JVM Π² byte[] ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΡΠ° Π·Π°Π΄Π°ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Java. Π‘Π°ΠΌΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΡΡΠ΅Π±ΡΡΡΠ΅ΠΉ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΈ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ C++.
Java-ΠΊΠΎΠ΄ Graal Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠ°Π³ΠΈΠ΅ΠΉ. ΠΠ΅ Π±ΡΠ΄Ρ ΠΏΡΠΈΡΠ²ΠΎΡΡΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΡΡ, Π½ΠΎ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½ΠΎΠ²ΠΈΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΠ½ΡΡΡ Π±ΠΎΠ»ΡΡΡΡ Π΅Π³ΠΎ ΡΠ°ΡΡΡ.
ΠΡΠ΅Π½Ρ ΡΠΎΠ²Π΅ΡΡΡ Π²Π°ΠΌ ΡΠ°ΠΌΠΈΠΌ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π½Π°ΡΠ½Π΅ΡΠ΅ Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΎ Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΠ΅ΡΠ΅ΡΡ Π² ΠΊΠΎΠ΄Π΅ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΎΡΠΊΡΡΠ² Eclipse ΠΈ ΡΠ²ΠΈΠ΄Π΅Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΡ ΡΡΠΈΡ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΡΠΎΡΠ΅ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (definitions), ΠΌΠ΅ΡΡΠ°ΠΌ ΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΠΈ Ρ.Π΄. ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π·Ρ.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΎΠΏΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ JIT Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² JVM, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ JITWatch, ΡΠΎ Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΠΏΠΎΡΠ΅ΠΌΡ Graal ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Π²Π°Ρ ΠΊΠΎΠ΄ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ, Π° Π½Π΅ ΠΈΠ½Π°ΡΠ΅. Π, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²Ρ ΡΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅, ΡΠΎ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π½Π΅ΡΡΠΈ Π² Graal ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ JVM. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠΊΠΈΠ΄Π°ΡΡ Π²Π°ΡΡ IDE, ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠΊΠ°Π·Π°Π» Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ hello-world.
ΠΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π½Π°Π΄ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΠΎΡΡΡΡΠ°ΡΡΠΈΠΌΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΊΠ°ΠΊ SubstrateVM ΠΈ Truffle, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Graal, ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² Java Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ. ΠΡΠ΅ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΎΠΌΡ, ΡΡΠΎ Π²Π΅ΡΡ Graal Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΠΎΠ±ΡΡΠ½ΠΎΠΉ Java. ΠΡΠ»ΠΈ Π±Ρ, Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ LLVM, ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΡΠΎ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΡΠ»ΠΎ Π±Ρ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΎ.
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Graal Π½Π΅ Π²Π½ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ°ΠΌΡ JVM. Π’.ΠΊ. JVMCI ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Java 9, Graal ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ, ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅, ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΈΠ»ΠΈ Java-Π°Π³Π΅Π½ΡΡ.
Graal β ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΠ΄Π΅ΠΉ. ΠΠ°ΠΊ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ Π²ΡΡΠ΅, Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π°Π΄ Graal. Π― ΠΏΡΠΎΡΡΠΎ ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ, ΠΈ Π²Ρ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ!