Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

JIT для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ 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.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ C2 написан Π½Π° C++. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² этом Π½Π΅Ρ‚ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ нСдостатки. Π‘++ β€” нСбСзопасный язык. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ошибки Π² C++ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΊΡ€Π°Ρ…Ρƒ VM. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠΌΡƒ возраст ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΊΠΎΠ΄ C2 Π½Π° C++ стало ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ.

Одна ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€, стоящих Π·Π° компилятором C2, Cliff Click сказал, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π±Ρ‹ большС Π½Π΅ стал ΠΏΠΈΡΠ°Ρ‚ΡŒ VM ΠΎΠΏΡΡ‚ΡŒ Π½Π° C++, ΠΈ ΠΌΡ‹ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΊΠ°ΠΊ JVM-ΠΊΠΎΠΌΠ°Π½Π΄Π° Twitter высказывала ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ C2 ΠΏΡ€ΠΈΡˆΠ΅Π» Π² застойноС состояниС ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ трудности дальнСйшСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π˜Ρ‚Π°ΠΊ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ вопросу, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Π² 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.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π₯ΠΎΡ€ΠΎΡˆΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΎΡ‡Π΅Π½ΡŒ простой ΠΊΠΎΠ΄.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ это ΠΏΠΎΡΡΠ½ΡΡ‚ΡŒ, Π° скаТу лишь, Ρ‡Ρ‚ΠΎ это Π²Ρ‹Π²ΠΎΠ΄ Π»ΠΎΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ 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 ΠΈ посмотрим Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы ΠΈ классы. Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ нСсколько слоТнСС, Π½ΠΎ Π½Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

БСйчас я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π² Graal измСнСния, ΠΈ сразу ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Java 9. Π― добавлю Π½ΠΎΠ²ΠΎΠ΅ сообщСния Π»ΠΎΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ компиляции ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с использованиСм Graal. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ Π² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся JVMCI.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Пока ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π² HotSpot Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ компиляции. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ нашС сообщСниС ΠΈΠ· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ вСрсии компилятора.

Π“Ρ€Π°Ρ„ Graal

По сути, компилятор занимаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ структуры Π΄Π°Π½Π½Ρ‹Ρ…. Одним ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² являСтся Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π΅ΠΌΡƒ списки инструкций, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹.

ВмСсто этого, для прСдставлСния вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Graal ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³Ρ€Π°Ρ„. Если Π²Π·ΡΡ‚ΡŒ простой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ суммируСт Π΄Π²Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π³Ρ€Π°Ρ„ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ΄ΠΈΠ½ ΡƒΠ·Π΅Π» для суммы, ΠΈ Π΄Π²Π° Ρ€Π΅Π±Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… поступаСт Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° слоТСния.

Иногда это Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π³Ρ€Π°Ρ„ΠΎΠΌ зависимостСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (program dependency graph).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π‘ΠΈΠ½ΠΈΠ΅ Ρ€Π΅Π±Ρ€Π° Π½Π° этом Π³Ρ€Π°Ρ„Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ чтСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π±Ρ€Π° для отраТСния порядка выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если, вмСсто чтСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ порядок Π²Ρ‹Π·ΠΎΠ²Π°, ΠΈ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… мСстами (Π½Π΅ зная ΠΎ ΠΊΠΎΠ΄Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ). Для этого Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π±Ρ€Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π·Π°Π΄Π°ΡŽΡ‚ этот порядок. Они ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ красным Ρ†Π²Π΅Ρ‚ΠΎΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π˜Ρ‚Π°ΠΊ, Π³Ρ€Π°Ρ„ Graal, Π½Π° самом Π΄Π΅Π»Π΅, это Π΄Π²Π° Π³Ρ€Π°Ρ„Π° совмСщСнных Π² ΠΎΠ΄Π½ΠΎΠΌ. Π£Π·Π»Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅, Π½ΠΎ ΠΎΠ΄Π½ΠΈ Ρ€Π΅Π±Ρ€Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” порядок ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ написав нСслоТноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

МоТно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ 0 ( P(0 ) ΠΈ 1 ( P(1) ) ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слоТСния, которая, вмСстС с константой 2 ( C(2) ) поступаСт Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ дСлСния. ПослС Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ возвращаСтся.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ управлСния Π²Π²Π΅Π΄Π΅ΠΌ Ρ†ΠΈΠΊΠ».

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π’ этом случаС Ρƒ нас Π΅ΡΡ‚ΡŒ ΡƒΠ·Π»Ρ‹ Π½Π°Ρ‡Π°Π»Π° ΠΈ окончания Ρ†ΠΈΠΊΠ»Π°, чтСния элСмСнтов массива, ΠΈ чтСния Π΄Π»ΠΈΠ½Ρ‹ массива. Как ΠΈ Ρ€Π°Π½Π΅Π΅, синиС Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Π° красныС β€” ΠΏΠΎΡ‚ΠΎΠΊ управлСния.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ эту структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠΎΡ€Π΅ΠΌ ΡƒΠ·Π»ΠΎΠ² (sea of nodes) ΠΈΠ»ΠΈ солянкой ΡƒΠ·Π»ΠΎΠ² (soup of nodes).

Π₯ΠΎΡ‡Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ C2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΡΡ…ΠΎΠΆΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ, Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΠΌΠ΅Π½Π½ΠΎ C2 популяризировал идСю компилятора моря ΡƒΠ·Π»ΠΎΠ², Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π½Π΅ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Graal.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ процСсс построСния этого Π³Ρ€Π°Ρ„Π° Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части выступлСния, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Graal ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, оптимизация ΠΈ компиляция выполняСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ…. И это ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΏΠΎΡ‡Π΅ΠΌΡƒ написаниС JIT-компилятора Π½Π° Java ΠΈΠΌΠ΅Π΅Ρ‚ смысл. Java β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык, Π° Π³Ρ€Π°Ρ„ β€” это Π½Π°Π±ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², соСдинСнных Ρ€Π΅Π±Ρ€Π°ΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ ссылок.

ΠžΡ‚ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΊΠ°ΠΊ эти ΠΈΠ΄Π΅ΠΈ выглядят Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΈ прослСдим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ этапы процСсса компиляции.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ начинаСтся с Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°. ВСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ с суммированиСм.

Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ компиляции.

Как Π²ΠΈΠ΄Π½ΠΎ, Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для компилятора являСтся Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄.

ΠŸΠ°Ρ€ΡΠ΅Ρ€ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ Π³Ρ€Π°Ρ„Π°

ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ, воспринимая этот массив Π±Π°ΠΉΡ‚ ΠΊΠ°ΠΊ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ JVM, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² Π³Ρ€Π°Ρ„ Graal. Π­Ρ‚ΠΎ являСтся, своСго Ρ€ΠΎΠ΄Π°, абстрактной ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ β€” ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Java, Π½ΠΎ, вмСсто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ свободными ΠΊΠΎΠ½Ρ†Π°ΠΌΠΈ Ρ€Π΅Π±Π΅Ρ€ ΠΈ постСпСнно соСдиняСт ΠΈΡ… Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ прСимущСством Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Graal написан Π½Π° Java, ΠΈ посмотрим ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ инструмСнты Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Eclipse. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ ΡƒΠ·Π΅Π» слоТСния, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ Π³Π΄Π΅ ΠΎΠ½ создаСтся.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π’Ρ‹ΡˆΠ΅ я сказал, Ρ‡Ρ‚ΠΎ это абстрактная интСрпрСтация, Ρ‚.ΠΊ. всС это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°. Если Π±Ρ‹ это Π±Ρ‹Π» Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ JVM, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ Π±Ρ‹ снял Π΄Π²Π° значСния со стСка, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» слоТСниС, ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ снимаСм со стСка Π΄Π²Π° ΡƒΠ·Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой вычислСния, добавляСм, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ суммирования, Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π» для слоТСния, ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π΅Π³ΠΎ Π² стСкС.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ строится Π³Ρ€Π°Ρ„ Graal.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ машинного ΠΊΠΎΠ΄Π°

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡŽΡΡŒ, Ρ‚ΡƒΡ‚ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π° ΠΎΡ‡Π΅Π½ΡŒ высоком ΡƒΡ€ΠΎΠ²Π½Π΅ абстракции. Π£ нас Π΅ΡΡ‚ΡŒ класс, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Π²Ρ‹Π΄Π°Π΅ΠΌ инструкции машинного ΠΊΠΎΠ΄Π° Π½Π΅ вдаваясь Π² Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π”Π΅Ρ‚Π°Π»ΠΈ emitAdd нСсколько слоТны ΠΈ абстрактны ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ кодирования для мноТСства Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², Π½ΠΎ, ΠΏΡ€ΠΈ этом, ΠΌΠΎΠ³ΡƒΡ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡ… ΠΊΠΎΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π΅Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ использована инструкция ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°, ΠΈ я ΠΏΠΎΠΊΠ°ΠΆΡƒ ΠΊΠ°ΠΊ это выглядит Π² ассСмблСрС.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

МоТно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π°ΠΉΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² стандартный ByteBuffer β€” просто созданиС массива Π±Π°ΠΉΡ‚.

Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π½Π΅Π΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ΠΎΠΌ β€” Π΄ΠΎΠ±Π°Π²ΠΈΠΌ распСчатку Π±Π°ΠΉΡ‚ Π² мСстС Π΅Π³ΠΎ установки.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π’Π°ΠΊΠΆΠ΅ я Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ инструмСнтом ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дизассСмблируСт ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ Π΅Π³ΠΎ установкС. Π­Ρ‚ΠΎ стандартноС срСдство HotSpot. Π― ΠΏΠΎΠΊΠ°ΠΆΡƒ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ. Оно находится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ OpenJDK, Π½ΠΎ, ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² поставку JVM, поэтому Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ самим.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ инструкций для нашСго слоТСния.

Π₯ΠΎΡ€ΠΎΡˆΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌ всС это ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠΌ суммированиС Π² Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅. Π― измСню ΠΌΠ΅Ρ‚ΠΎΠ΄ generate ΡƒΠ·Π»Π° суммирования Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вмСсто инструкции слоТСния ΠΎΠ½ Π²Ρ‹Π΄Π°Π²Π°Π» ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ для вычитания.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Если ΠΌΡ‹ запустим это, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° Π±Π°ΠΉΡ‚Π° машинного ΠΊΠΎΠ΄Π° измСнились, ΠΈ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ выводятся Π½ΠΎΠ²Ρ‹Π΅ инструкции.

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ? Graal просто ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив Π±Π°ΠΉΡ‚ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°; ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ· Π½Π΅Π³ΠΎ создаСтся Π³Ρ€Π°Ρ„ ΡƒΠ·Π»ΠΎΠ²; ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΠ·Π»Ρ‹ Π²Ρ‹Π΄Π°ΡŽΡ‚ инструкции; ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ внСсти измСнСния Π² сам Graal.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ

И Ρ‚Π°ΠΊ, ΠΌΡ‹ посмотрСли ΠΊΠ°ΠΊ строится Π³Ρ€Π°Ρ„, ΠΈ ΠΊΠ°ΠΊ ΡƒΠ·Π»Ρ‹ Π³Ρ€Π°Ρ„Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ Graal ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Ρ€Π°Ρ„, дСлая Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивным.

Π€Π°Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ β€” это просто ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π³Ρ€Π°Ρ„Π°. Π€Π°Π·Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса.

ΠšΠ°Π½ΠΎΠ½ΠΈΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ (canonicalisation)

ΠšΠ°Π½ΠΎΠ½ΠΈΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ пСрСупорядочиваниС ΡƒΠ·Π»ΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ΅ прСдставлСниС. Π£ этой Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π½ΠΎ для Ρ†Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ выступлСния я скаТу, Ρ‡Ρ‚ΠΎ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ свёртываниС констант (constant folding) ΠΈ ΡƒΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»ΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ насколько Graal прост для понимания. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ, данная Π»ΠΎΠ³ΠΈΠΊΠ° проста Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Global value numbering

Global value numbering (GVN) β€” это Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° удалСния ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ a + b ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вычислСно Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½.

Graal ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠ·Π»Ρ‹ Π½Π° равСнство. Π­Ρ‚ΠΎ просто β€” ΠΎΠ½ΠΈ Ρ€Π°Π²Π½Ρ‹ Ссли Ρƒ Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ значСния. Π’ Ρ„Π°Π·Π΅ GVN выполняСтся поиск ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² ΠΈ ΠΈΡ… Π·Π°ΠΌΠ΅Π½Π° СдинствСнной ΠΊΠΎΠΏΠΈΠ΅ΠΉ. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ достигаСтся Π·Π° счСт использования hash map Π² Π²ΠΈΠ΄Π΅, своСго Ρ€ΠΎΠ΄Π°, кэша ΡƒΠ·Π»ΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ·Π΅Π» нСфиксированный β€” это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Если Π±Ρ‹, вмСсто этого, вызывался ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚ΠΎ Ρ‚Π΅Ρ€ΠΌ стал Π±Ρ‹ фиксированным ΠΈ Π½Π΅ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Π° ΠΈΡ… слияниС Π² ΠΎΠ΄ΠΈΠ½ β€” Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π£ΠΊΡ€ΡƒΠΏΠ½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ (lock coarsening)

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Иногда программисты ΠΏΠΈΡˆΡƒΡ‚ ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π²Π° Ρ€Π°Π·Π° подряд синхронизируСтся Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°ΠΊ Π½Π΅ писали, Π½ΠΎ это стало Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ встраиваниС (inlining).

Если Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ конструкции, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ, фактичСски, происходит.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ захватывая ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· вмСсто Π΅Π³ΠΎ освобоТдСния ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Π° Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΆΠ΅ шагС. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ ΡƒΠΊΡ€ΡƒΠΏΠ½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

НС Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Π΅ практичСскиС аспСкты

Рассматривая Ρ€Π°Π±ΠΎΡ‚Ρƒ 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 прСдставляСт собой ΠΎΠ΄ΠΈΠ½ ΠΈΠ· шагов Π² этом Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ jit компиляция

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

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. Π― просто ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ, ΠΈ Π²Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это Π΄Π΅Π»Π°Ρ‚ΡŒ!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *