вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. 0*rMLC4Ew14zneFpfQ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-0*rMLC4Ew14zneFpfQ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 0*rMLC4Ew14zneFpfQ. May 15 Β· 6 min read

May 15 Β· 6 min read

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. 1*zGB84bWzuyTJ mLArMBtKA. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-1*zGB84bWzuyTJ mLArMBtKA. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1*zGB84bWzuyTJ mLArMBtKA. May 15 Β· 6 min read

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

Однако для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π²Π²ΠΎΠ΄Π΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Java ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ влияСт Π½Π° JVM Π²ΠΎ врСмя запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java?

Если Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π²Ρ‹ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΏΠΎΠ²Π΅Π΄ΡƒΡŽΡ‚ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, скаТитС спасибо Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Ρƒ.

Как гСнСрируСтся Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄?

Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java?

Если Π²Π°ΠΌ хочСтся ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ сам Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ β€” Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкой.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JVM

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, стоит ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ JVM Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ β€” ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ΄Π° для JVM. Π‘Ρ€Π΅Π΄Π° выполнСния Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” это, ΠΏΠΎ сути, Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… JVM. JVM создаСт Ρ„Ρ€Π΅ΠΉΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ созданный Ρ„Ρ€Π΅ΠΉΠΌ Π½Π°Π²Π΅Ρ€Ρ… стСка Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° для выполнСния.

Π€Ρ€Π΅ΠΉΠΌ состоит ΠΈΠ· локальной срСды, которая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для поддСрТания Π΅Π³ΠΎ выполнСния. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ½ содСрТит массив Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ стСк ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ эти элСмСнты ΠΈΠ· сСбя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚.

Массив Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Массив Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· названия, Π½ΡƒΠΆΠ΅Π½ для хранСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: ΠΎΠ΄ΠΈΠ½ статичСский ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра, Π½ΠΎ схоТиС Π²ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ массивы ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. . вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . May 15 Β· 6 min read

Π‘Ρ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ²

Π‘Ρ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² β€” это Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это стСк, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈ Π·Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π΅Π³ΠΎ части. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ инструкций Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Π»ΠΈΠ±ΠΎ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² стСк, Π»ΠΈΠ±ΠΎ Π·Π°Π±ΠΈΡ€Π°ΡŽΡ‚ значСния ΠΈΠ· стСка для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° load ΠΈ Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½ΡƒΠΆΠ½Ρ‹ для пСрСмСщСния значСния, хранящСгося Π² массивС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π² стСк. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ store примСняСтся для извлСчСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· стСка ΠΈ сохранСния Π² массивС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ значСния ΠΈΠ· стСка для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. 1*MJ6mqP490nKErFoZoNcWEA. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-1*MJ6mqP490nKErFoZoNcWEA. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1*MJ6mqP490nKErFoZoNcWEA. May 15 Β· 6 min read

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄

Π Π°Π΄ΠΈ возмоТности Π²Π³Π»ΡΠ΄Π΅Ρ‚ΡŒΡΡ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, я написал простой Java-класс:

ДСконструкция Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ: индСксы, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ инструкциям Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° β€” ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌ, ΠΎΠ½ΠΈ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ инструкции.

Число ΠΏΠ΅Ρ€Π΅Π΄ инструкциСй ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° индСкс Π΅Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°. А любой Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ², Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдуСт ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ².

Π’Ρ‹Π²ΠΎΠ΄

НадСюсь, Π²Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java. Π‘ этим Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΈΠΌ Π·Π½Π°Π½ΠΈΠ΅ΠΌ Π²Ρ‹ смоТСтС Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с самим Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, воспользовавшись Ρ‚Π°ΠΊΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ASM.

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

ВСрификация Java Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°: ΠΊΠΎΠ³Π΄Π°, ΠΊΠ°ΠΊ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ?

МнС Π½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ

О спикСрС

Один ΠΈΠ· ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Excelsior JET, сСртифицированной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Java SE, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Excelsior. Работая Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ с 1997 Π³ΠΎΠ΄Π°, поучаствовал Π² исслСдовании ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ практичСски всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΎΡ‚ ядра Π΄ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Ρ‹Ρ… свойств. Π’ послСднСС врСмя Ρ‚Π°ΠΊΠΆΠ΅ экспСримСнтируСт с open source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, связанными c концСпциями ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Π²Π΅Π±Ρƒ.

О докладС

БСгодня Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ всС Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для пороТдСния Java Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅. ДСлаСтся это для эффСктивной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТно ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° языкС JavΠ°. Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Java, компилятор javac Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ получится ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Java Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Но, ΡΠΏΡƒΡΠΊΠ°ΡΡΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ нСпосрСдствСнно Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, часто Π½ΡƒΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π΅Π³ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ. Π˜Π½Π°Ρ‡Π΅ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… классов Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ j.l.VerifyError, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ JVM посрСдством Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Java Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° строго слСдит Π·Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, пороТдая Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, нСдостаточно просто Π·Π½Π°Ρ‚ΡŒ сСмантику Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π½Ρ‹Ρ… инструкций β€” Π½ΡƒΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Java byte-code Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠ°ΠΊΠΎΠΉ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΎΠ½ считаСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Π° ΠΊΠ°ΠΊΠΎΠΉ Π½Π΅Ρ‚.

Π’ этом Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Никита ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊΡƒΡŽ миссию Π² JVM нСсСт Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вашСго прилоТСния ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ опасно Π΅Π³ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ.

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

ΠŸΡƒΡ‚ΡŒ ΠΊ пониманию Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° V8

V8 β€” это JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ Google с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π•Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Chrome, Node.js ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прилоТСния. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ сотрудником Google Ѐранциской Π₯инкСльманн, посвящён описанию Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° V8. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ довольно просто Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ссли ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ.

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. 04ac08c9e48756beb3c9742485f0e6ea. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-04ac08c9e48756beb3c9742485f0e6ea. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 04ac08c9e48756beb3c9742485f0e6ea. May 15 Β· 6 min read

ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ компиляции V8

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

Π—Π°ΠΆΠΈΠ³Π°Π½ΠΈΠ΅! ΠŸΡƒΡΠΊ! Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ignition, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти ΠΊΠ°ΠΊ Β«Π·Π°ΠΆΠΈΠ³Π°Π½ΠΈΠ΅Β», являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° компиляции V8 с 2016-Π³ΠΎ Π³ΠΎΠ΄Π°

Когда V8 ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ JavaScript-ΠΊΠΎΠ΄, парсСр Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ. БинтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ β€” это Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠ΅ прСдставлСниС синтаксичСской структуры JS-ΠΊΠΎΠ΄Π°. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ignition Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈΠ· этой структуры Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор TurboFan, Π² ΠΈΡ‚ΠΎΠ³Π΅, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ· Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ компиляции V8

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ V8 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° исполнСния, взглянитС Π½Π° ΠΌΠΎΡ‘ выступлСниС с JSConfEU.

ΠžΡΠ½ΠΎΠ²Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° V8

Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ β€” это абстракция машинного ΠΊΠΎΠ΄Π°. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ‰Π΅, Ссли Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ спроСктирован с использованиСм Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, которая примСняСтся Π² физичСском процСссорС. ИмСнно поэтому ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ рСгистровыми ΠΈΠ»ΠΈ стСковыми машинами.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ignition β€” это рСгистровая машина с Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ рСгистром.

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

Код слСва ΡƒΠ΄ΠΎΠ±Π΅Π½ для людСй. Код справа β€” для машин

Анализ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ основныС понятия, посмотрим Π½Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

На Π½Π΅ΠΌΠ°Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ этих Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ внимания, ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ Π½Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°Ρ…. Π’ΠΎΡ‚ описаниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚ΡƒΡ‚ Π²ΠΈΠ΄ΠΈΠΌ.

Команда LdaSmi [1] Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ константу 1 Π² Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ рСгистр.

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

LdaNamedProperty a0, [0], [4]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ содСрТимоС рСгистров выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ посвящён этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² V8 вСрсии 6.2, Π² Chrome 62 ΠΈ Π² Π΅Ρ‰Ρ‘ Π½Π΅ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌ Node 9. ΠœΡ‹, Π² Google, постоянно Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ V8 Π² направлСниях ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ потрСблСния памяти. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… вСрсиях V8 Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отличия ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ описано здСсь.

Π˜Ρ‚ΠΎΠ³ΠΈ

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ V8 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ довольно-Ρ‚Π°ΠΊΠΈ Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΌ, особСнно ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ выводится с массой Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… свСдСний. Однако, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ignition β€” это рСгистровая машина с Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ рСгистром, Π²Ρ‹ смоТСтС ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ².

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π²Π°ΡˆΠΈΡ… JS-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ?

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

Java Bytecode Fundamentals

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно.
Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ с простого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ POJO с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠΌ ΠΈ сСттСром для Π½Π΅Π³ΠΎ.

Когда Π²Ρ‹ скомпилируСтС класс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ javac Foo.java, Ρƒ вас появится Ρ„Π°ΠΉΠ» Foo.class, содСрТащий Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π΅Π³ΠΎ содСрТаниС выглядит Π² HEX-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅:

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

КаТдая ΠΏΠ°Ρ€Π° ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… чисСл (Π±Π°ΠΉΡ‚) пСрСводится Π² ΠΎΠΏΠΊΠΎΠ΄Ρ‹ (ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ°). Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ТСстоко ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ это Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ.

Класс ΠΎΡ‡Π΅Π½ΡŒ простой, поэтому Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ сгСнСрированным Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄-вСрсии класса компилятор Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (ΠΊΠ°ΠΊ ΠΈ написано Π² спСцификациях JVM).

Π”Π°Π»Π΅Π΅, изучая Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Π΅ инструкции (Ρƒ нас это aload_0 ΠΈ aload_1), ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅ΡŽΡ‚ прСфиксы Ρ‚ΠΈΠΏΠ° aload_0 ΠΈ istore_2. Π­Ρ‚ΠΎ относится ΠΊ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ инструкция. ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ Β«aΒ» ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠΊΠΎΠ΄ управляСт ссылкой Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Β«iΒ», соотвСтствСнно, управляСт integer.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ это Π·Π° странныС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹. НапримСр, #2:

const #2 = Field #3.#18; // Foo.bar:Ljava/lang/String;

const #3 = class #19; // Foo
const #18 = NameAndType #5:#6;// bar:Ljava/lang/String;

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ (0: aload_0). Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ инструкции Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ° β€” дальшС объясню, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, достаточно Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° модСль выполнСния. JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ модСль выполнСния Π½Π° основС стСков. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π΅Ρ‚ JVM-стСк, содСрТащий Ρ„Ρ€Π΅ΠΉΠΌΡ‹. НапримСр, Ссли ΠΌΡ‹ запустим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Π΅Π±Π°Π³Π³Π΅Ρ€Π΅, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΡ‹:
вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° создаСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌ. Π€Ρ€Π΅ΠΉΠΌ состоит ΠΈΠ· стСка ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, массива Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ссылку Π½Π° ΠΏΡƒΠ» констант класса выполняСмого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

Π Π°Π·ΠΌΠ΅Ρ€ массива Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… опрСдСляСтся Π²ΠΎ врСмя компиляции Π² зависимости ΠΎΡ‚ количСства ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π‘Ρ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² β€” LIFO-стСк для записи ΠΈ удалСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² стСкС; Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСтся Π²ΠΎ врСмя компиляции. НСкоторыС ΠΎΠΏΠΊΠΎΠ΄Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ значСния Π² стСк, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±Π΅Ρ€ΡƒΡ‚ ΠΈΠ· стСка ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΈΡ… состояниС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π² стСк. Π‘Ρ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для получСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ (return values).

Π‘Π°ΠΉΡ‚ΠΊΠΎΠ΄ для этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠΊΠΎΠ΄, aload_0, ΠΏΡ€ΠΎΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ Π² стСк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с индСксом 0 ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Бсылка this Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для конструкторов ΠΈ instance-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² всСгда ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠΊΠΎΠ΄, getfield, достаСт ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ПослСдняя инструкция, areturn, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. image loader. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. May 15 Β· 6 min read

Π’Π°ΠΊ, Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getBar β€” 2A B4 00 02 B0. 2A относится ΠΊ инструкции aload_0, B0 β€” ΠΊ areturn. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, Ρ‡Ρ‚ΠΎ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ инструкции, Π° Π² массивС Π±Π°ΠΉΡ‚ 5 элСмСнтов. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ getfield (B4) нуТдаСтся Π² Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… (00 02), Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 2 ΠΈ 3 Π² массивС, ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ 5 элСмСнтов Π² массивС. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ areturn сдвигаСтся Π½Π° 4 ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.
Π’Π°Π±Π»ΠΈΡ†Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ:

Π—Π΄Π΅ΡΡŒ Π΄Π²Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ локальная пСрСмСнная int b. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄:

LocalVariableTable:
Start Length Slot Name Signature
0 6 0 this LExample;
0 6 1 a I
2 4 2 b I

ΠœΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ константу 1 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ iconst_1 ΠΈ Π»ΠΎΠΆΠΈΡ‚ Π΅Ρ‘ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ 2 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ istore_2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… слот 2 занят ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ b, ΠΊΠ°ΠΊ ΠΈ оТидалось. Π”Π°Π»Π΅Π΅, iload_1 Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² стСк, iload_2 Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ b. iadd Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ 2 ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΈΠ· стСка, добавляСт ΠΈΡ… ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ получаСтся Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² случаС с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для конструкции try-catch-finally.

Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° foo():

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ для всСх сцСнариСв, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try-catch-finally: finallyMethod() вызываСтся Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°(!). Π‘Π»ΠΎΠΊ try скомпилировался Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ try Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΈ ΠΎΠ½ Π±Ρ‹Π» ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½ с finally:
0: aload_0
1: invokespecial #2; //Method tryMethod:()V
4: aload_0
5: invokespecial #3; //Method finallyMethod:()V
Если Π±Π»ΠΎΠΊ выполняСтся, Ρ‚ΠΎ инструкция goto ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° 30-ю ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ с ΠΎΠΏΠΊΠΎΠ΄ΠΎΠΌ return.

Если tryMethod бросит Exception, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ подходящий (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ) ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Из Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ позиция с ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π²Π½Π° 11:

0 4 11 Class java/lang/Exception

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° catchMethod() ΠΈ finallyMethod():

11: astore_1
12: aload_0
13: invokespecial #5; //ΠΌΠ΅Ρ‚ΠΎΠ΄ catchMethod:()V
16: aload_0
17: invokespecial #3; //ΠΌΠ΅Ρ‚ΠΎΠ΄ finallyMethod:()V

Если Π² процСссС выполнСния Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ позиция Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° 23:

0 4 23 any
11 16 23 any
23 24 23 any

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ, начиная с 23:

23: astore_2
24: aload_0
25: invokespecial #3; //Method finallyMethod:()V
28: aload_2
29: athrow
30: return

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ finallyMethod() Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π² любом случаС, с aload_2 ΠΈ athrow, Π±Ρ€ΠΎΡΠ°ΡŽΡ‰ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π­Ρ‚ΠΎ всСго лишь нСсколько ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ· области Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° JVM. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΠΎ ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ developerWorks Peter Haggar β€” Java bytecode: Understanding bytecode makes you a better programmer. Π‘Ρ‚Π°Ρ‚ΡŒΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ устарСла, Π½ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°. Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ BCEL содСрТит достойноС описаниС основ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, поэтому я ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π±Ρ‹ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΌΡΡ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, спСцификация Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ источником ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ Π΅Π΅ Π½Π΅Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΊΡ€ΠΎΠΌΠ΅ этого отсутствуСт графичСский ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ.

Π’ Ρ†Π΅Π»ΠΎΠΌ, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½ΠΈΠΈ своих Π·Π½Π°Π½ΠΈΠΉ Π² Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, особСнно для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ присматриваСтся ΠΊ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌ, компиляторам JVM-языков ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌ.

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

ΠŸΠΎΠ»Ρ‘Ρ‚ свиньи, ΠΈΠ»ΠΈ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. bglpczwnjg u0usatiwfxggd zi. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-bglpczwnjg u0usatiwfxggd zi. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° bglpczwnjg u0usatiwfxggd zi. May 15 Β· 6 min read

«No matter how hard you try, you can’t make a racehorse out of a pig. You can, however, make a faster pig» (ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π² исходном ΠΊΠΎΠ΄Π΅ Емакса)

ВсСм извСстСн Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ свиньи Π½Π΅ Π»Π΅Ρ‚Π°ΡŽΡ‚. НС ΠΌΠ΅Π½Π΅Π΅ популярно ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠ°ΠΊ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° исполнСния языков высокого уровня Π½Π΅ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ Π±Π΅Π· примСнСния Ρ‚Ρ€ΡƒΠ΄ΠΎΡ‘ΠΌΠΊΠΎΠΉ динамичСской компиляции.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части сСрии статСй ΠΎΠ± ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Ρ… Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ² я Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ нСбольшой стСковой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠŸΠ’Πœ (Β«ΠŸΠΎΡ€ΠΎΡΡΡ‡ΡŒΡ Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ Машина») ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ всё потСряно для Ρ‚Ρ€ΡƒΠ΄ΠΎΠ»ΡŽΠ±ΠΈΠ²Ρ‹Ρ… поросят с амбициями ΠΈ Ρ‡Ρ‚ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… (Π² основном) стандартного C Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π°ΠΊΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ Π² ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Π°.

ΠŸΠΎΡ€ΠΎΡΠ΅Π½ΠΎΠΊΠ’Πœ

Β«ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊΠ’ΠœΒ» β€” заурядная стСковая машина, основанная Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ части сСрии статСй. Наша свинка Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… β€” 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ машинноС слово, Π° всС (цСлочислСнныС) вычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° стСкС максимальной Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ Π² 256 ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… слов. Помимо стСка, Ρƒ этого поросёнка имССтся рабочая ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ 65 536 ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… слов. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” ΠΎΠ΄Π½ΠΎ машинноС слово β€” ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² рСгистр-Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π»ΠΈΠ±ΠΎ просто вывСсти Π² стандартный Π²Ρ‹Π²ΠΎΠ΄ (stdout).

Всё состояниС Π² машинС Β«ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊΠ’ΠœΒ» хранится Π² СдинствСнной структурС:

Π’Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ позволяСт отнСсти эту ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ машинам, ΠΏΠΎΡ‡Ρ‚ΠΈ всС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… приходятся Π½Π° обслуТиваниС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Из ΠΊΠΎΠ΄Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠΊΠΎΠ΄ поросёнок Π΄ΠΎΠ»ΠΆΠ΅Π½:

ПолСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° здСсь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² пятом ΠΏΡƒΠ½ΠΊΡ‚Π΅, всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ β€” Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы: Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· стСка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² инструкции (ΠΏΡƒΠ½ΠΊΡ‚ 4), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° значСния ΠΎΠΏΠΊΠΎΠ΄Π° (ΠΏΡƒΠ½ΠΊΡ‚ 2), ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π² Π½Π°Ρ‡Π°Π»ΠΎ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ труднопрСдсказуСмый условный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ (ΠΏΡƒΠ½ΠΊΡ‚ 3).

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

Бвинский язык ассСмблСра ΠΈ Ρ€Π΅ΡˆΠ΅Ρ‚ΠΎ ЭратосфСна

Для Π½Π°Ρ‡Π°Π»Π° опрСдСлимся с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈΠ³Ρ€Ρ‹.

ΠŸΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ прямо Π² C β€” ΠΌΠΎΠ²Π΅Ρ‚ΠΎΠ½, Π½ΠΎ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ язык программирования β€” Π΄ΠΎΠ»Π³ΠΎ, поэтому ΠΌΡ‹ с поросёнком Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ свинским языком ассСмблСра.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ сумму чисСл ΠΎΡ‚ 1 Π΄ΠΎ 65 536, Π½Π° этом ассСмблСрС выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

НС Python, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½ΠΎ всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΏΠΎΡ€ΠΎΡΡΡ‡ΡŒΠ΅Π³ΠΎ ΡΡ‡Π°ΡΡ‚ΡŒΡ Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ: ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΊΠΈ, условныС ΠΈ бСзусловныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΏΠΎ Π½ΠΈΠΌ, ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠΈ для инструкций ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСпосрСдствСнныС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ инструкций.

Π’ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с машиной Β«ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊΠ’ΠœΒ» ΠΈΠ΄ΡƒΡ‚ ассСмблСр ΠΈ дизассСмблСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ смСлыС Π΄ΡƒΡ…ΠΎΠΌ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ свободного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π² бою.

Числа ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ быстро, поэтому для тСстирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ я написал Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ β€” Π½Π°ΠΈΠ²Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π΅ΡˆΠ΅Ρ‚Π° ЭратосфСна.

На самом Π΄Π΅Π»Π΅ поросёнок ΠΈ Ρ‚Π°ΠΊ Π±Π΅Π³Π°Π΅Ρ‚ довольно быстро (Π΅Π³ΠΎ инструкции Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ), поэтому для получСния внятных Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π·Π°ΠΌΠ΅Ρ€ я Π±ΡƒΠ΄Ρƒ Π΄Π΅Π»Π°Ρ‚ΡŒ для ста запусков ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия нашСй Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ свиньи Π±Π΅Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

ΠŸΠΎΠ»ΡΠ΅ΠΊΡƒΠ½Π΄Ρ‹! Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅, бСзусловно, нСчСстноС, Π½ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π° Python сто ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ΅ΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‡ΡƒΡ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅:

4,5 сСкунды, ΠΈΠ»ΠΈ Π² Π΄Π΅Π²ΡΡ‚ΡŒ Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. Надо ΠΎΡ‚Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ΅ поросёнку β€” способности Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ! Ну Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ наша свинья Π½Π°ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ прСсс.
вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ceeqnik6 41cuvd3rwvkkuquoes. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-ceeqnik6 41cuvd3rwvkkuquoes. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ceeqnik6 41cuvd3rwvkkuquoes. May 15 Β· 6 min read

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅: статичСскиС супСринструкции

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ быстрого ΠΊΠΎΠ΄Π° β€” Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ лишнСй Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ быстрого ΠΊΠΎΠ΄Π° β€” Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ лишнСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊΡƒΡŽ лишнюю Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄Π΅Π»Π°Π΅Ρ‚ Β«ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊΠ’ΠœΒ»?

НаблюдСниС ΠΏΠ΅Ρ€Π²ΠΎΠ΅: ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ инструкций, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‡Π°Ρ‰Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ…. НС Π±ΡƒΠ΄Π΅ΠΌ сильно ΠΌΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ свинью ΠΈ ограничимся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°Ρ€Π°ΠΌΠΈ инструкций:

Π’ машинС Β«ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊΠ’ΠœΒ» Ρ‡ΡƒΡ‚ΡŒ большС 20 инструкций, Π° для кодирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΉ Π±Π°ΠΉΡ‚ β€” 256 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ВнСсСниС Π½ΠΎΠ²Ρ‹Ρ… инструкций Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΈ сдСлаСм:

НичСго слоТного. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ ΠΈΠ· этого ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ:

Ого! Кода всСго-Ρ‚ΠΎ Π½Π° Ρ‚Ρ€ΠΈ Π½ΠΎΠ²Ρ‹Ρ… инструкции, Π° Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»Ρ‚ΠΎΡ€Ρ‹ сотни миллисСкунд!

Π’Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ здСсь достигаСтся благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ наш поросёнок ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… инструкций Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π»ΠΈΡˆΠ½ΠΈΡ… Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΡ‚ΠΎΠΊ исполнСния Π½Π΅ вываливаСтся Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ дСкодируСтся, Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ инструкций Π½Π΅ проходят лишний Ρ€Π°Π· Ρ‡Π΅Ρ€Π΅Π· стСк.

Π­Ρ‚ΠΎ называСтся статичСскими супСринструкциями, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструкции ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ статичСски, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ программистом Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ простая ΠΈ эффСктивная Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ всС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ языков программирования.

Главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° статичСских супСринструкций Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Π΅Π· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ инструкции стоит ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ. Π Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ инструкций, ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ эти ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° этапС запуска ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΡΡ‚Π°Ρ‚ΡŒ динамичСская компиляция супСринструкций Π² контСкстС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ динамичСскиС супСринструкции (Π² 90-Π΅ ΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ 2000-Ρ… этот ΠΏΡ€ΠΈΡ‘ΠΌ ΠΈΠ³Ρ€Π°Π» Ρ€ΠΎΠ»ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ JIT-компиляции).

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ²

БлСдуя нашим ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ быстрого ΠΊΠΎΠ΄Π°, Π΅Ρ‰Ρ‘ Ρ€Π°Π· зададимся Π²Π΅Ρ‡Π½Ρ‹ΠΌ вопросом: Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ?

Когда ΠΌΡ‹ знакомились с устройством ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Β«ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊΠ’ΠœΒ», я пСрСчислял всС дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина выполняСт для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΠΊΠΎΠ΄Π°. И ΠΏΡƒΠ½ΠΊΡ‚ 2 (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° значСния ΠΎΠΏΠΊΠΎΠ΄Π° Π½Π° Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² допустимый ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ switch) Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ большС всСго ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΡΠΌΠΎΡ‚Ρ€ΠΈΠΌΡΡ ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ GCC ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ switch:

Но Π·Π°Ρ‡Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ? ΠœΡ‹ считаСм, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠΊΠΎΠ΄ Π±Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ β€” Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉ исполнСниС инструкциСй OP_DONE, Π»ΠΈΠ±ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ β€” Π²Ρ‹ΡˆΠ΅Π΄ΡˆΠΈΠΉ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Π₯вост ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ² ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ Π½ΡƒΠ»Ρ‘ΠΌ, Π° ноль β€” ΠΎΠΏΠΊΠΎΠ΄ инструкции OP_ABORT, Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅ΠΉ исполнСниС Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° с ошибкой.

Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, эта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π½ΡƒΠΆΠ½Π°! И поросёнок Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎΠ½ΠΎΡΠΈΡ‚ΡŒ эту ΠΌΡ‹ΡΠ»ΡŒ Π΄ΠΎ компилятора. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π³Π»Π°Π²Π½Ρ‹ΠΉ switch:

Зная, Ρ‡Ρ‚ΠΎ инструкций Ρƒ нас всСго 26, ΠΌΡ‹ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску (Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x1f β€” это Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ 0b11111, ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ 0 Π΄ΠΎ 31) Π½Π° ΠΎΠΏΠΊΠΎΠ΄ ΠΈ добавляСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ значСния Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ ΠΎΡ‚ 26 Π΄ΠΎ 31.

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ инструкции β€” ΠΎΠ΄Π½ΠΈ ΠΈΠ· самых Π΄Π΅ΡˆΡ‘Π²Ρ‹Ρ… Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ x86, ΠΈ ΠΎΠ½ΠΈ ΡƒΠΆ Ρ‚ΠΎΡ‡Π½ΠΎ дСшСвлС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… условных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ВСорСтичСски ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Ρ‚ΡŒ нСсколько Ρ†ΠΈΠΊΠ»ΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ исполняСмой инструкции, Ссли компилятор ΠΏΠΎΠΉΠΌΡ‘Ρ‚ наш Π½Π°ΠΌΡ‘ΠΊ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, способ указания ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² case β€” Π½Π΅ стандартный C, Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ GCC. Но для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ этот ΠΊΠΎΠ΄ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° нСсколько ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ нСслоТно.

Π•Ρ‰Ρ‘ 50 миллисСкунд! ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊ, Ρ‚Ρ‹ Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ Π² ΠΏΠ»Π΅Ρ‡Π°Ρ… раздался.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅: трассы

КакиС Π΅Ρ‰Ρ‘ упраТнСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π½Π°ΡˆΠ΅ΠΌΡƒ поросёнку? Π‘Π°ΠΌΡƒΡŽ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ экономию Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ благодаря супСринструкциям. А ΠΎΠ½ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ количСство Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ² Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов.

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ switch β€” Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ΅ мСсто для любого процСссора с Π²Π½Π΅ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ инструкций. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ прСдсказатСли Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ слоТныС нСпрямыС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹, Π½ΠΎ Β«Ρ€Π°Π·ΠΌΠ°Π·Ρ‹Π²Π°Π½ΠΈΠ΅Β» Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ процСссору быстро ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ инструкции ΠΊ инструкции.

Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” это ΠΏΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ² инструкций ΠΈ нСпосрСдствСнных Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ· Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. ЀизичСскиС ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ словом ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π»ΡŽΠ±ΡΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ мСньшими значСниями.

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

Π£ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств, Π½ΠΎ Π½Π°ΡˆΡƒ свинью интСрСсуСт ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Ρ‘ ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ: инструкции Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ эти Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ инструкции Π² Π½ΠΈΡ…, Π½Π΅ тСряя Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ».

Π’ нашСм случаС ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄ΠΎ трассы. Врасса Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Β«ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊΠ’ΠœΒ» Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя всС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ связанныС (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ бСзусловных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²) Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ.

Помимо ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния инструкций, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΅Ρ‰Ρ‘ Π·Π°Ρ€Π°Π½Π΅Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСпосрСдствСнныС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ инструкций.

Π—Π²ΡƒΡ‡ΠΈΡ‚ всё это довольно ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ засомнСвался Π² своих силах, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ всё оказалось Π½Π΅ Ρ‚Π°ΠΊ ΠΏΠ»ΠΎΡ…ΠΎ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π² трассу ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

Π—Π΄Π΅ΡΡŒ arg β€” Π·Π°Ρ€Π°Π½Π΅Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ инструкции, Π° handler β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ инструкции.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ прСдставлСниС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ трассы выглядит Ρ‚Π°ΠΊ:

Π’ΠΎ Π΅ΡΡ‚ΡŒ трасса β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ s-ΠΊΠΎΠ΄ΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π‘Π°ΠΌ кСш трасс Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ выглядит Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ просто массив ΠΈΠ· трасс Π΄Π»ΠΈΠ½ΠΎΠΉ, Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰Π΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. РСшСниС Π»Π΅Π½ΠΈΠ²ΠΎΠ΅, практичСски для экономии памяти ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· трасс Π±ΡƒΠ΄Π΅Ρ‚ сам сСбя ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

Π“Π»Π°Π²Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выглядит Ρ‚Π°ΠΊ:

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ трассу ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‡ΡƒΡ‚ΡŒ слоТнСС, ΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ сборки трассы, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ инструкции, ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ инструкции:

Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ трассы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² хвостС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Всё это, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, слоТнСС, Ρ‡Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ супСринструкций, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Π΄Π°Π»ΠΎ Π»ΠΈ это Π½Π°ΠΌ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ:

Π£Ρ€Π°, Π΅Ρ‰Ρ‘ 30 миллисСкунд!

Как ΠΆΠ΅ Ρ‚Π°ΠΊ? ВмСсто простых ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² инструкций, Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ врСмя Π½Π° Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΎ наш поросёнок всё Ρ€Π°Π²Π½ΠΎ Π±Π΅Π³Π°Π΅Ρ‚ ΠΏΠΎ трассам быстрСС простого switch с Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ.

Π’Π°ΠΊΠΎΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ трасс достигаСтся благодаря Ρ‚Ρ€Ρ‘ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌ:

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ подвСсти ΠΈΡ‚ΠΎΠ³ΠΈ Π½Π°ΡˆΠΈΡ… Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΠΊ, ΠΌΡ‹ с поросёнком Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ Π΄Ρ€Π΅Π²Π½ΡŽΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ β€” ΡˆΠΈΡ‚Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ΅: «ΡˆΠΈΡ‚Ρ‹ΠΉ» ΠΊΠΎΠ΄

Π›ΡŽΠ±Π°Ρ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π°ΡΡΡ историСй ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² свинья ΡΠ»Ρ‹ΡˆΠ°Π»Π° ΠΏΡ€ΠΎ ΡˆΠΈΡ‚Ρ‹ΠΉ ΠΊΠΎΠ΄ (Π°Π½Π³Π». threaded code). Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² этого ΠΏΡ€ΠΈΡ‘ΠΌΠ° мноТСство, Π½ΠΎ всС ΠΎΠ½ΠΈ сводятся ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вмСсто массива ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ² ΠΈΠ΄Ρ‚ΠΈ ΠΏΠΎ массиву, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ, пСрСходя ΠΏΠΎ Π½ΠΈΠΌ нСпосрСдствСнно, Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΎΠΏΠΊΠΎΠ΄Π°.

Π’Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” Π΄Π΅Π»ΠΎ Π΄ΠΎΡ€ΠΎΠ³ΠΎΠ΅ ΠΈ особого смысла Π² наши Π΄Π½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅; большая Ρ‡Π°ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… вСрсий ΡˆΠΈΡ‚ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠ° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… стандартного C. Π”Π°ΠΆΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Π½ΠΈΠΆΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространённоС, Π½ΠΎ всё ΠΆΠ΅ нСстандартноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ C β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΊΠΈ.

Π’ вСрсии ΡˆΠΈΡ‚ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (Π°Π½Π³Π». token threaded code), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Π²Ρ‹Π±Ρ€Π°Π» для достиТСния Π½Π°ΡˆΠΈΡ… свинских Ρ†Π΅Π»Π΅ΠΉ, ΠΌΡ‹ сохраняСм Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ создаём Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΡƒΡŽ ΠΎΠΏΠΊΠΎΠ΄Ρ‹ инструкций Π½Π° адрСса ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² инструкций:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° символы && β€” это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΊΠΈ с Ρ‚Π΅Π»Π°ΠΌΠΈ инструкций, Ρ‚ΠΎ самоС нСстандартноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ GCC.

Для Π½Π°Ρ‡Π°Π»Π° выполнСния ΠΊΠΎΠ΄Π° достаточно ΠΏΡ€Ρ‹Π³Π½ΡƒΡ‚ΡŒ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° ΠΌΠ΅Ρ‚ΠΊΡƒ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΎΠΏΠΊΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Никакого Ρ†ΠΈΠΊΠ»Π° здСсь Π½Π΅Ρ‚ ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, каТдая ΠΈΠ· инструкций сама Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€Ρ‹ΠΆΠΎΠΊ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ:

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ switch Β«Ρ€Π°Π·ΠΌΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Β» Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π΅Π»Π°ΠΌ инструкций, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π²Π½Π΅ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ инструкций. ΠœΡ‹ ΠΊΠ°ΠΊ Π±Ρ‹ встроили switch прямо Π² инструкции ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ сформировали Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ².

Π’ΠΎΡ‚ ΠΈ вся Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°. ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΊΡƒ ΠΎΠ½Π° ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ своСй простотой. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ получаСтся Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

Упс! Π­Ρ‚ΠΎ самая мСдлСнная ΠΈΠ· всСх Π½Π°ΡˆΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ! Π§Ρ‚ΠΎ ΠΆΠ΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ? Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚Π΅ ΠΆΠ΅ тСсты, Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΠ² всС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ GCC:

Π—Π΄Π΅ΡΡŒ ΡˆΠΈΡ‚Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя Π»ΡƒΡ‡ΡˆΠ΅.

Π’ΡƒΡ‚ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ€ΠΎΠ»ΡŒ Ρ‚Ρ€ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°:

По старой памяти эту Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Π΅Ρ‰Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² ΠΊΠΎΠ΄Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python VM, Π½ΠΎ, чСстно говоря, Π² наши Π΄Π½ΠΈ это ΡƒΠΆΠ΅ Π°Ρ€Ρ…Π°ΠΈΠ·ΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΏΠΎΠ΄Π²Π΅Π΄Ρ‘ΠΌ ΠΈΡ‚ΠΎΠ³ΠΈ ΠΈ ΠΎΡ†Π΅Π½ΠΈΠΌ успСхи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… добилась наша свинья.

Π Π°Π·Π±ΠΎΡ€ ΠΏΠΎΡ€ΠΎΡΡΡ‡ΡŒΠΈΡ… ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ²

вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. covy6k28ts8 ozuzuswtqpcora. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΠΎΡ‚ΠΎ. вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅-covy6k28ts8 ozuzuswtqpcora. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вСрификация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° covy6k28ts8 ozuzuswtqpcora. May 15 Β· 6 min read
НС ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Ρ‘Ρ‚ΠΎΠΌ, Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ·Π½Π°Π΅ΠΌ, наш поросёнок ΠΏΡ€ΠΎΡˆΡ‘Π» большой ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ 550 миллисСкунд Π½Π° сто ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ΅ΠΊ ΠΏΠΎ Β«Ρ€Π΅ΡˆΠ΅Ρ‚ΡƒΒ» Π΄ΠΎ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… 370 миллисСкунд. ΠœΡ‹ использовали Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ: супСринструкции, ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ трасс ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π΄Π°ΠΆΠ΅ ΡˆΠΈΡ‚Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠŸΡ€ΠΈ этом ΠΌΡ‹, Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ, дСйствовали Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π²Π΅Ρ‰Π΅ΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²ΠΎ всСх популярных компиляторах C. УскорСниС Π² ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Π°, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, это Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈ поросёнок заслуТил лишнюю ΠΏΠΎΡ€Ρ†ΠΈΡŽ ΠΎΡ‚Ρ€ΡƒΠ±Π΅ΠΉ Π² ΠΊΠΎΡ€Ρ‹Ρ‚Π΅.

Одно ΠΈΠ· нСявных условий, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ со ΡΠ²ΠΈΠ½ΡŒΡ‘ΠΉ сСбС поставили, β€” сохранСниС стСковой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Β«ΠŸΠΎΡ€ΠΎΡΡ‘Π½ΠΎΠΊΠ’ΠœΒ». ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ рСгистровой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ инструкций ΠΈ, соотвСтствСнно, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ² Π² диспСтчСр инструкций. Π”ΡƒΠΌΠ°ΡŽ, Π΅Ρ‰Ρ‘ 10β€”20% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° этом ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΡ€Π΅Π·Π°Ρ‚ΡŒ.

ОсновноС ΠΆΠ΅ нашС условиС β€” отсутствиС динамичСской компиляции β€” Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π·Π°ΠΊΠΎΠ½ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹. ΠΠ°ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ свинью стСроидами Π² Π²ΠΈΠ΄Π΅ JIT-компиляции Π² наши Π΄Π½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π΄Π°ΠΆΠ΅ нСслоТно: Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Π²Ρ€ΠΎΠ΄Π΅ GNU Lightning ΠΈΠ»ΠΈ LibJIT вся грязная Ρ€Π°Π±ΠΎΡ‚Π° ΡƒΠΆΠ΅ сдСлана. Но врСмя Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ ΠΊΠΎΠ΄Π° Π΄Π°ΠΆΠ΅ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ нашСго поросёнка Π½Π΅ дошли ΠΊΠΎΠΏΡ‹Ρ‚Ρ†Π°. Но ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ² ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Ρƒ Π½Π΅Ρ‚, ΠΈ нашС свинскоС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ β€” вторая Ρ‡Π°ΡΡ‚ΡŒ сСрии статСй ΠΏΡ€ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ² β€” всё ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒΡΡ. Если читатСлям ΠΏΡ€ΠΈΠ΄ΡƒΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ интСрСсныС способы Ρ€Π°Π·ΠΎΠ³Π½Π°Ρ‚ΡŒ свинью, ΠΌΡ‹ с поросёнком Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π΄Ρ‹ ΠΈΡ… ΠΈΡΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ.

PS ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΅ΠΉ сСстрС, Π Π΅Π½Π°Ρ‚Π΅ Казановой, Π·Π° эскизы ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΉ, ΠΈ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€Ρƒ Π¨ΠΎΠΏΠΎΡ‚ΠΎΠ²Ρƒ (https://www.instagram.com/vovazomb/), Π·Π° Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ рисунки.

PPS ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ поросСнок Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Ρ‡ΠΈΠ² Π² Ρ†Π΅Π»ΠΎΠΌ, ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ассСмблСр. Но true-grue ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π° нСсколько часов сдСлал для Π½Π΅Π³ΠΎ нСбольшой язык β€” PigletC. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€ΡŽΠΊΠ°Ρ‚ΡŒ Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ!

PPPS Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ iliazeus ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ: ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΡˆΠΈΡ‚Ρ‹ΠΉ ΠΊΠΎΠ΄ самым быстрым Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΈΠ· всСх; для Π½Π΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Ρ‚ΠΎ ЭратосфСна Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π΄Π²Π° Ρ€Π°Π·Π° быстрСС ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π½Π°ΠΈΠ²Π½ΠΎΠΉ вСрсии ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. ВсСх Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡˆΡƒ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΊΠΎΠ΄.

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

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

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