hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ C++. Π§Π°ΡΡ‚ΡŒ 1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ языки программирования

РазбираСмся, ΠΊΠ°ΠΊ устроСн язык программирования C++, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с нуля, Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΠΈ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹. Π­Ρ‚ΠΎ пСрвая ΡΡ‚Π°Ρ‚ΡŒΡ ΠΈΠ· сСрии Β«Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² C++Β», с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ сдСлаСтС ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги Π² профСссии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΠ³Ρ€.

НС ΠΏΡƒΠ³Π°ΠΉΡ‚Π΅ΡΡŒ большого ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ: Ρ‡Π΅ΠΌ большС Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ смоТСтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ, Ссли Π²Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ C++, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π° этом языкС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ тСорСтичСской Π±Π°Π·Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… информация сильно ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π°.

hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. kucheryaviy. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-kucheryaviy. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° kucheryaviy. РазбираСмся, ΠΊΠ°ΠΊ устроСн язык программирования C++, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ.

ΠŸΠΈΡˆΠ΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π² свободноС врСмя создаСт ΠΈΠ³Ρ€Ρ‹. ΠœΠ΅Ρ‡Ρ‚Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ свою ΡΡ‚ΡƒΠ΄ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»Π°ΠΌΠΏΠΎΠ²Ρ‹Π΅ RPG.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ язык программирования

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ β€” это бСсполСзный кусок ΠΆΠ΅Π»Π΅Π·Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈ с Ρ‡Π΅ΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. И Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ β€” ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ инструкций.

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ слоТно ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран надписи Β«Hello, World!Β» Π½Π° машинном ΠΊΠΎΠ΄Π΅ (Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии):

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Π±Ρ‹Π»ΠΈ созданы языки программирования β€” с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΈΡˆΡƒΡ‚ инструкции для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ понятны ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ. Одним ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π±Ρ‹Π» язык ассСмблСра. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π½Π° Π½Ρ‘ΠΌ выглядит Π²Ρ‹Π²ΠΎΠ΄ надписи Β«Hello, World!Β»:

hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. 17494130052020 6a4e9b3ae3023faad72ace61e6264ce47ed78056. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-17494130052020 6a4e9b3ae3023faad72ace61e6264ce47ed78056. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 17494130052020 6a4e9b3ae3023faad72ace61e6264ce47ed78056. РазбираСмся, ΠΊΠ°ΠΊ устроСн язык программирования C++, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Всё Ρ€Π°Π²Π½ΠΎ достаточно слоТно, Π΄Π°? Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ чСловСчСство создало Π±ΠΎΠ»Π΅Π΅ понятныС языки программирования, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. А Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΈΡΡŒ, ΠΊΠΎΠ΄ пСрСводится Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык β€” этот процСсс называСтся компиляциСй.

Если язык ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‚ΠΎ Π΅Π³ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ. Если ΠΆΠ΅ ΠΎΠ½ большС понятСн Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ, Ρ‚ΠΎ β€” высокоуровнСвым. C++ сочСтаСт Π² сСбС свойства ΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π›ΡŽΠ±Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ: ΠΎΠ½Π° ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, считаны ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ записаны Π² самом ΠΊΠΎΠ΄Π΅.

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

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ β€” Π½Π°Π±ΠΎΡ€ΠΎΠ² инструкций. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° запроса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сСрвСр, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Π°, Π²Ρ‹Π²ΠΎΠ΄ страницы β€” всё это ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. 17494130052020 d58f50d1222620cd1cfe95da3a91221bd0d26e65. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-17494130052020 d58f50d1222620cd1cfe95da3a91221bd0d26e65. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 17494130052020 d58f50d1222620cd1cfe95da3a91221bd0d26e65. РазбираСмся, ΠΊΠ°ΠΊ устроСн язык программирования C++, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ.

МоТно Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’ΠΎΡ‚ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° запускаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ОБ Linux, которая ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ img.jpg Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π° ΠΏΠΎΡ‚ΠΎΠΌ сохраняСт Π² Ρ„Π°ΠΉΠ» img.png.

БСйчас слово Β«ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Β» встрСчаСтся Ρ€Π΅Π΄ΠΊΠΎ β€” вмСсто Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ слова «функция», Β«ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Β» ΠΈΠ»ΠΈ Β«ΠΌΠ΅Ρ‚ΠΎΠ΄Β».

ПишСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C++

По Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ программистов пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, написанная Π½Π° ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌΠΎΠΌ языкС, Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° экран надпись Β«Hello, World!Β».

hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. 18113030052020 27e9aa5bdf801f94f7728fe14d1ac08405e5a691. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-18113030052020 27e9aa5bdf801f94f7728fe14d1ac08405e5a691. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 18113030052020 27e9aa5bdf801f94f7728fe14d1ac08405e5a691. РазбираСмся, ΠΊΠ°ΠΊ устроСн язык программирования C++, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Π’ C++ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ЗапускаСм ΠΊΠΎΠ΄ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅

Π‘Π°ΠΌΡ‹ΠΉ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” Π·Π°ΠΉΡ‚ΠΈ Π½Π° сайт repl.it. На Π³Π»Π°Π²Π½ΠΎΠΉ страницС Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Start Coding, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ C++ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Create Repl.

Π£ вас откроСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ страница:

hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. 17494130052020 e3ea06ecc4efe66fd609360c227a5daace25eda6. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-17494130052020 e3ea06ecc4efe66fd609360c227a5daace25eda6. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 17494130052020 e3ea06ecc4efe66fd609360c227a5daace25eda6. РазбираСмся, ΠΊΠ°ΠΊ устроСн язык программирования C++, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Π‘Π»Π΅Π²Π° β€” ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ², Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ β€” тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π³Π΄Π΅ ΡƒΠΆΠ΅ Π²Π²Π΅Π΄Ρ‘Π½ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π½Π°ΠΌ ΠΊΠΎΠ΄, Π° справа β€” консоль, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выводится Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Run.

ЗапускаСм ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅

Если ΠΆΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° своём ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ‚ΠΎ установитС компилятор. Π― ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ G++, Π΅Π³ΠΎ ΠΈ Π²Π°ΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ.

ПослС установки компилятора создайтС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ для ΠΊΠΎΠ΄Π°, Π° Π² Π½Π΅ΠΉ β€” Ρ„Π°ΠΉΠ» hello.cpp (это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π½Π° C++). Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ состоял ΠΈΠ· латинских символов ΠΈ Π±Ρ‹Π» написан Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ hello.cpp с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ любого Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Π° ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Sublime text ΠΈΠ»ΠΈ VS Code) ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции Π½ΠΈΠΆΠ΅.

WindowsLinux
1. НаТмитС Win + R, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ cmd ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Enter.1. НаТмитС Ctrl + Alt + t. Если Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ, Ρ‚ΠΎ подходящий способ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.
2. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cd [ΠΏΡƒΡ‚ΡŒ]. НапримСр, cd projects\cpp1, Ссли ваша ΠΏΠ°ΠΏΠΊΠ° находится ΠΏΠΎ адрСсу c:\projects\cpp1.2. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cd [ΠΏΡƒΡ‚ΡŒ]. НапримСр: cd

/projects/cpp1

3. Если ΠΏΠ°ΠΏΠΊΠ° находится Π½Π΅ Π½Π° систСмном дискС, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ: cd /D [диск:][ΠΏΡƒΡ‚ΡŒ]. НапримСр: cd /D d:\projects\cpp1

Π—Π°Ρ‚Π΅ΠΌ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° скаТСт ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° hello.cpp ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ„Π°ΠΉΠ» hello (ΠΈΠ»ΠΈ hello.exe Π² Windows).

ПослС этого запуститС ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. 17494130052020 7b64da46b2dc4329c15be64aeef9e636261e678c. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-17494130052020 7b64da46b2dc4329c15be64aeef9e636261e678c. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 17494130052020 7b64da46b2dc4329c15be64aeef9e636261e678c. РазбираСмся, ΠΊΠ°ΠΊ устроСн язык программирования C++, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ смогли Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, разбСрёмся Π² Π½Π΅ΠΉ.

Из Ρ‡Π΅Π³ΠΎ состоит ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C++

Начнём с самой ΠΏΠ΅Ρ€Π²ΠΎΠΉ строчки:

hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. 17494130052020 93b8888c66d5103a8bb4f5fd89e04622d16558ec. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-17494130052020 93b8888c66d5103a8bb4f5fd89e04622d16558ec. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 17494130052020 93b8888c66d5103a8bb4f5fd89e04622d16558ec. РазбираСмся, ΠΊΠ°ΠΊ устроСн язык программирования C++, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ языка программирования ΠΌΠΎΠΆΠ½ΠΎ:

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

Одна ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, iostream, позволяСт Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² консоли.

Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π²ΡƒΠΊ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ свои собствСнныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

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

Hello World ΠΈΠ· Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° для JVM

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄ΡΡ‰ΡƒΡŽ «Hello World» ΠΈ пройдСмся ΠΏΠΎ Π΅Π³ΠΎ структурС

НС Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ повСрхностно Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΊΠ°ΠΊ выглядит Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ ΠΊΠ°ΠΊ с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JVM (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, хотя Π±Ρ‹ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ инструкции (Π·Π½Π°Π½ΠΈΠ΅ ΠΎΠ± ΠΈΡ… сущСствовании)).

На самом Π΄Π΅Π»Π΅, это Π½Π΅ Ρ‚Π°ΠΊ слоТно. Достаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт javap ΠΈΠ· JDK ΠΈ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ дизассСмблированный ΠΊΠΎΠ΄.

А ΠΌΡ‹ приступим ΠΊ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ самой структуры Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° для JVM

ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΎΠΉ для этого стала ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ спСцификация JVM β€” The Java Virtual Machine Specification Π½Π° сайтС oracle

Для Π½Π°Ρ‡Π°Π»Π° создадим ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Ρ‘ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ javac Main.java ΠΈ собствСнно сдСлаСм дизассСмблинг

Π­Ρ‚ΠΎ просто прСдставлСниС Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π»Π΅Π³Ρ‡Π΅, Ρ‡Π΅ΠΌ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π½ΠΎ сам ΠΎΠ½ выглядит ΠΈΠ½Π°Ρ‡Π΅:

Π‘ этим ΠΊΠΎΠ΄ΠΎΠΌ ΠΌΡ‹ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Но для Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ Π³Π΄Π΅ находится, Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π½Π° самом Π΄Π΅Π»Π΅, ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ ΠΆΠ΅ΡΡ‚ΠΊΡƒΡŽ структуру:

Π•Ρ‘ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² спСцификации JVM Chapter 4.1 The ClassFile Structure

Π’ΡƒΡ‚ всС просто β€” слСва ΡƒΠΊΠ°Π·Π°Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π² Π±Π°ΠΉΡ‚Π°Ρ…, Π° справа описаниС.

Π Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π² hexadecimal, Π³Π΄Π΅ каТдая Ρ†ΠΈΡ„Ρ€Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 4 Π±ΠΈΡ‚Π°, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π° Π΄Π²Π° Π±Π°ΠΉΡ‚Π° β€” 4 Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° β€” 8 Ρ†ΠΈΡ„Ρ€.

magic

minor_version, major_version

Π­Ρ‚ΠΎ вСрсии вашСго class Ρ„Π°ΠΉΠ»Π°. Если ΠΌΡ‹ Π½Π°Π·ΠΎΠ²Π΅ΠΌ major_version M ΠΈ minor_version m, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ нашСго class Ρ„Π°ΠΉΠ»Π° ΠΊΠ°ΠΊ M.m

БСйчас я сразу Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ «Hello World», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ:

Π•Π³ΠΎ ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² дизассСмблированном ΠΊΠΎΠ΄Π΅, Π½ΠΎ ΡƒΠΆΠ΅ Π² дСсятичной систСмС счислСния:

constant_pool_count

Π—Π΄Π΅ΡΡŒ указываСтся количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΏΡƒΠ»Π΅ констант. ΠŸΡ€ΠΈ этом, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° чистом Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎ Π²Π°ΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ссли Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π½Π΅ Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»Π΅Ρ‚ΠΈΡ‚ ΠΊ чСртям (ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ!).

Π’Π°ΠΊΠΆΠ΅ слСдуСт Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° количСство_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…_Π²_ΠΏΡƒΠ»Π΅ + 1

constant_pool[]

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΡƒΠ»Π΅ констант ΠΈΠΌΠ΅Π΅Ρ‚ свою структуру:

Π’Π°Π±Π»ΠΈΡ†Π° с тэгами ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² спСцификации Table 4.3 Constant pool tags

БобствСнно, Π²ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ°:

Constant TypeValue
CONSTANT_Class7
CONSTANT_Fieldref9
CONSTANT_Methodref10
CONSTANT_InterfaceMethodref11
CONSTANT_String8
CONSTANT_Integer3
CONSTANT_Float4
CONSTANT_Long5
CONSTANT_Double6
CONSTANT_NameAndType12
CONSTANT_Utf81
CONSTANT_MethodHandle15
CONSTANT_MethodType16
CONSTANT_InvokeDynamic18

Как Ρ€Π°Π½Π΅Π΅ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ константы ΠΈΠΌΠ΅Π΅Ρ‚ свою структуру.

Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, структура CONSTANT_Class :

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Π’ΡƒΡ‚ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ структуры, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ.

Рассмотрим Ρ‡Π°ΡΡ‚ΡŒ нашСго ΠΊΠΎΠ΄Π°:

Π˜Ρ‚Π°ΠΊ, смотрим Π½Π° структуру константы ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ ΠΎΡ‚Π²Π΅Π΄Π΅Π½ ΠΏΠΎΠ΄ Ρ‚ΠΈΠΏ константы. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ 0a (10) β€” Π°, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это CONSTANT_Methodref

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π΅Π³ΠΎ структуру:

ПослС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° для тэга, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‰Π΅ 4 Π±Π°ΠΉΡ‚Π° для class_index ΠΈ name_and_type_index

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΌΡ‹ нашли ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΡƒΠ»Π° констант. ИдСм дальшС. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ, 09 β€” Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‚ΠΈΠΏ CONSTANT_Fieldref

Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, Π½ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ.
НапримСр, структура ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° выглядит Ρ‚Π°ΠΊ, CONSTANT_String :

ВсС эти структуры ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Chapter 4.4 The Constant Pool

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π°Ρ‚ Ρ‚ΠΈΠΏΡ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ самого info

Π­Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² дизассСмблированном ΠΊΠΎΠ΄Π΅:

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ прСдставлСниС чисСл ΠΈ строк.

ΠŸΡ€ΠΎ прСдставлСниС чисСл ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ начиная с Π³Π»Π°Π²Ρ‹ 4.4.4, Π° ΠΌΡ‹ ΠΏΠΎΠΊΠ° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ лишь строки, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ числа ΠΏΠΎΠΊΠ° Π½Π΅ входят Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Hello World

БобствСнно, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ прСдставляСтся строка:

НапримСр, наш Hello World:

Разбирая вСсь ΠΏΡƒΠ» констант Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с дизассСмблированным ΠΊΠΎΠ΄ΠΎΠΌ:

Π’Π΅ΠΌ самым ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ², Ρ‡Ρ‚ΠΎ всС совпадаСт, вСдь ΠΏΠΎ сути javap просто ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ этот Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ Π΅Π³ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

ΠŸΡƒΠ» констант Π½ΡƒΠΆΠ΅Π½ для инструкций. НапримСр:

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ±ΠΎ всСх Ρ‚ΠΈΠΏΠ°Ρ… Π² ΠΏΡƒΠ»Π΅ констант ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π² Chapter 4.4 The Constant Pool

ИдСм дальшС ΠΏΠΎ структурС ClassFile

access_flags

Π­Ρ‚ΠΎ битовая маска для свойств ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²

Flag NameValueInterpretation
ACC_PUBLIC0x0001Declared public ; may be accessed from outside its package.
ACC_FINAL0x0010Declared final ; no subclasses allowed.
ACC_SUPER0x0020Treat superclass methods specially when invoked by the invokespecial instruction.
ACC_INTERFACE0x0200Is an interface, not a class.
ACC_ABSTRACT0x0400Declared abstract ; must not be instantiated.
ACC_SYNTHETIC0x1000Declared synthetic; not present in the source code.
ACC_ANNOTATION0x2000Declared as an annotation type.
ACC_ENUM0x4000Declared as an enum type.

this_class

Π”ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ адрСс Π½Π° this класса. Π’ нашСм случаС, ΠΎΠ½Π° находится ΠΏΠΎ адрСсу 5:

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ структуру этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ CONSTANT_Class_info

super_class

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² этих ячСйках ΡƒΠΊΠ°Π·Π°Π½ name_index ΠΈΠ· структуры:

interfaces_count, fields_count

methods_count

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π₯ΠΎΡ‚ΡŒ ΠΈ Π² ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС, Π½ΠΎ, Π½Π° самом Π΄Π΅Π»Π΅, ΠΈΡ… Π΄Π²Π°. ΠšΡ€ΠΎΠΌΠ΅ main ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΡ… количСство Ρ€Π°Π²Π½ΠΎ Π΄Π²ΡƒΠΌ, Π² нашСм случаС.

methods[]

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ структурС method_info описанной Π² Chapter 4.6 Methods

Π’ нашСм Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅ (ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ, с коммСнтариями) выглядит это Ρ‚Π°ΠΊ:

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ структуру ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

access_flags

К слову, ACC_VARARGS здСсь Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Π² Ρ‚ΠΎΠΌ ΠΏΠ»Π°Π½Π΅, Ρ‡Ρ‚ΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹
использовали String[] args вмСсто String… args, Ρ‚ΠΎ этого Ρ„Π»Π°Π³Π° Π±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ

name_index

descriptor_index

Π“Ρ€ΡƒΠ±ΠΎ говоря, это адрСс ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° дСскриптор ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ дСскриптор содСрТит Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния ΠΈ Ρ‚ΠΈΠΏ Π΅Π³ΠΎ сигнатуры.

Π’Π°ΠΊΠΆΠ΅, Π² JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ сокращСния:

BaseType CharacterTypeInterpretation
Bbytesigned byte
CcharUnicode character code point in the Basic Multilingual Plane, encoded with UTF-16
Ddoubledouble-precision floating-point value
Ffloatsingle-precision floating-point value
Iintinteger
Jlonglong integer
L ClassName ;referencean instance of class ClassName
Sshortsigned short
Zbooleantrue or false
[referenceone array dimension

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС это выглядит Ρ‚Π°ΠΊ:

НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

МоТно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅

Π”Π°Π»Π΅Π΅, ΠΈΠ΄ΡƒΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ свою структуру.

Но сначала, ΠΊΠ°ΠΊ ΠΈ всСгда, ΠΈΠ΄Π΅Ρ‚ Π΅Π³ΠΎ количСство attributes_count

Π—Π°Ρ‚Π΅ΠΌ сами Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ со структурой описанной Π² Chapter 4.7 Attributes

attribute_name_index

attribute_length

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π΄Π»ΠΈΠ½Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ attribute_name_index ΠΈ attribute_length

info

max_stack

МнС каТСтся, Ρ‡Ρ‚ΠΎ имя этого Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ·-Π·Π° приставки max. На самом Π΄Π΅Π»Π΅, это ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка Π½ΡƒΠΆΠ½Ρ‹ΠΉ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Ну, это имя ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ, Ссли ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ достигнут Π²ΠΎ врСмя выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ говоря, JVM Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ мСсто для стСка ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ большС, Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² этом Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ значСния мСньшС, Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС.

max_locals

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡΡ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Π² Mastering Java Bytecode at the Core of the JVM ΠΈΠ»ΠΈ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ JVM Internals

code_length

Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ исполнятся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

code[]

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ΄ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ. Π’Π°Π±Π»ΠΈΡ†Ρƒ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ optcode ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ β€” Java bytecode instruction listings ΠΈΠ»ΠΈ Π² самой спСцификации Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ½ΠΈΠ³ΠΈ

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, возьмСм наш конструктор:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ наш ΠΊΠΎΠ΄:

Π˜Ρ‰Π΅ΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ сопоставляСм:

Π’Π°ΠΊΠΆΠ΅ описания этих ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Chapter 4.10.1.9. Type Checking Instructions

exception_table_length

Π—Π°Π΄Π°Π΅Ρ‚ число элСмСнтов Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ exception_table. Π£ нас ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ поэтому Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. Но Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Chapter 4.7.3 The Code Attribute

exception_table[]

Π˜ΠΌΠ΅Π΅Ρ‚ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΡƒΡŽ структуру:

attributes_count

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² Code

attributes[]

Атрибуты, часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

БрСдства для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ

Π­Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ Ρ‚Π° Ρ‚Π΅ΠΌΠ°, которая относится ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π½ΠΎ всС ΠΆΠ΅ косвСнно связанная с Π½Π΅ΠΉ.

БрСдств для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π° самом Π΄Π΅Π»Π΅, достаточно ΠΌΠ½ΠΎΠ³ΠΎ. Π—Π΄Π΅ΡΡŒ я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Byte Code Engineering Library (BCEL) ΠΎΡ‚ Apache Commons.

Для Π½Π°Ρ‡Π°Π»Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Π³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°:

Помимо этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Jasmin) Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄.

ΠŸΠ°Ρ€ΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΌΠΎΠ΅ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΠ»ΠΈ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…

Π’Π°ΠΊΠΆΠ΅, я ΡƒΠ΄Π΅Π»ΠΈΠ» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Jasmin. На самом Π΄Π΅Π»Π΅, я Π½Π΅ знаю, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½ΠΎ я Π΅Ρ‘ использовал ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ JVM с Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠΌ ассСмблСрном ΠΊΠΎΠ΄Π΅:

Π’ΠΎΡ‚ ΠΌΡ‹ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΡƒ Hello World

Листинг Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° с коммСнтариями ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° ΠΌΠΎΠ΅ΠΌ гистС: gist.github

Если Π΅ΡΡ‚ΡŒ ошибки ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² коммСнтариях ΠΈΠ»ΠΈ Π² сообщСниях.

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

Hello world ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

МногиС Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΠΈ Π½Π΅ ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… трудностСй Π² ΠΎΠ²Π»Π°Π΄Π΅Π½ΠΈΠΈ Π‘Π•Π™Π‘Π˜ΠšΠΎΠΌ. Для этого достаточно Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. Но Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΎΠ½ΠΈ приходят ΠΊ Π±Π°Ρ€ΡŒΠ΅Ρ€Ρƒ «машинного ΠΊΠΎΠ΄Π°Β». Как это Π½ΠΈ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ ΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π΅ связано с отсутствиСм ТСлания ΠΈΠ»ΠΈ способностСй, просто ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½Π΅ Π·Π½Π°ΡŽΡ‚, с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. Если Π² Π‘Π•Π™Π‘Π˜ΠšΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с Ρ‡Π΅Π³ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ (ΠΏΡ€ΠΈ ошибкС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ сам Вас ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚), Ρ‚ΠΎ здСсь Π’Ρ‹ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ΡΡŒ с процСссором ΠΎΠ΄ΠΈΠ½ Π½Π° ΠΎΠ΄ΠΈΠ½, ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠ± ΠΈ ошибок Π½Π΅ срабатываСт.

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ напишСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² машинном ΠΊΠΎΠ΄Π΅. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ для Π½Π΅Π΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти. Если Π’Ρ‹ Ρ‡ΠΈΡ‚Π°Π»ΠΈ Π½Π°ΡˆΡƒ ΠΊΠ½ΠΈΠ³Ρƒ «Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ возмоТности Π’Π°ΡˆΠ΅Π³ΠΎ Β«ZX-Spectrum`Π°Β», Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ для Π‘Π•Π™Π‘Π˜ΠšΠ° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°ΡΡΡ с адрСса, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ систСмная пСрСмСнная PROG ΠΈ заканчиваСтся адрСсом, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ систСмная пСрСмСнная RAMTOP. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄Π°Ρ…, начиная с адрСса 30000. Π”Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ CLEAR 29999. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° установит RAMTOP Π² 29999 ΠΈ Π’Π°ΡˆΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π° ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΏΠΎΡ€Ρ‡ΠΈ ΠΈΠ· Π‘Π•Π™Π‘Π˜ΠšΠ°. Π”Π°ΠΆΠ΅ Ссли Π’Ρ‹ Π΄Π°Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ NEW, области памяти, находящиСся Π²Ρ‹ΡˆΠ΅ RAMTOP, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡ€Π°ΠΆΠ΅Π½Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°ΠΉΡ‚Π΅ Π΄Π²Π΅ прямыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ:

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ вСрнСмся ΠΊ нашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Π΅ нСсколько Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° всС ΠΆΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Π»Π°. ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ Z-80 ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько рСгистров, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° – «А», Β«Π’Β», Β«Π‘Β» ΠΈ Ρ‚.Π΄. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Ρ†Π΅Π»ΠΎΠ΅ число ΠΎΡ‚ 0 Π΄ΠΎ 255 (Ρ‚.Π΅. ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚).

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ дСсятки ΠΊΠΎΠΌΠ°Π½Π΄ процСссора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС рСгистров ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ связь с внСшним ΠΌΠΈΡ€ΠΎΠΌ, Π² Ρ‚.Ρ‡. ΠΈ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ число ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ рСгистра процСссора Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

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

Java Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Β«Hello worldΒ»

На Ρ…Π°Π±Ρ€Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ java Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄. Π― Ρ€Π΅ΡˆΠΈΠ» Π΅Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈ Π² ΠΌΠ΅Ρ€Ρƒ сил Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌΡƒ. МнС каТСтся довольно Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Java. А Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅ Β«Hello worldΒ»?
Для своСго экспСримСнта я создал Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ src, ΠΊΡƒΠ΄Π° Π² ΠΏΠ°ΠΏΠΊΡƒ hello ΠΏΠΎΠ»ΠΎΠΆΠΈΠ» Ρ„Π°ΠΉΠ» App.java:

Π‘ΠΊΠΎΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π² ΠΏΠ°ΠΏΠΊΠ΅ classes Ρƒ мСня появился Ρ„Π°ΠΉΠ» App.class Для Π½Π°Ρ‡Π°Π»Π° сравним Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ java ΠΈ class Ρ„Π°ΠΉΠ»ΠΎΠ².

App.java 139B
App.class 418B

Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ. МнС ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ казалось, Ρ‡Ρ‚ΠΎ скомпилированный Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ мСньшС. ΠŸΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ class Ρ„Π°ΠΉΠ»:

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Π½Π΅ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ для Java ΠΊΠΎΠ΄Π°. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ описаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° class Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ здСсь Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ.

Π­Ρ‚ΠΎ 4 Π±Π°ΠΉΡ‚Π° для magic, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π°.

minor version β€” ΠœΠΈΠ½ΠΎΡ€Π½Π°Ρ вСрсия ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· названия

major version β€” 2 Π±Π°ΠΉΡ‚Π° ΠΏΠΎΠ΄ ΠΌΠ°ΠΆΠΎΡ€Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.
Π‘ΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠ΅ minor ΠΈ major version Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π» этот ΠΊΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ J2SE 8.

Π­Ρ‚ΠΈ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ constant_pool_count ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ constant_pool. Π’ ΠΌΠΎΠ΅ΠΌ случаС count Ρ€Π°Π²Π΅Π½ 29, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π°, соотвСтствСнно 28. Π”Π°Π»ΡŒΡˆΠ΅ ΠΈΠ΄ΡƒΡ‚ элСмСнты Π²ΠΈΠ΄Π°:

cp_info <
u1 tag; // 1 Π±Π°ΠΉΡ‚ Π½Π° Ρ‚Π΅Π³
u1 info[]; // массив с описаниСм
>

Рассмотрим элСмСнты Π² constant_pool.

Π­Ρ‚ΠΎΡ‚ Ρ‚Π΅Π³ соотвСтствуСт CONSTANT_Methodref, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ дальшС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ описаниС:

CONSTANT_Methodref_info <
u1 tag;
u2 class_index;
u2 name_and_type_index;
>
соотвСтствСнно:

class_index, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° 6 элСмСнт Π² constant_pool

name_and_type_index, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° 15 элСмСнт Π² constant_pool

Пока Π½Π΅ понятно, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ эта ссылка ΠΈ ΠΌΡ‹ ΠΈΠ΄Π΅ΠΌ дальшС:

Π­Ρ‚ΠΎ CONSTANT_Fieldref, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ дальшС ΠΈΡ‰Π΅ΠΌ:

CONSTANT_Fieldref_info <
u1 tag;
u2 class_index;
u2 name_and_type_index;
>

И Ρ‚ΡƒΡ‚ всС ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт, хотя Π½Π΅ понятно Ρ‡Ρ‚ΠΎ это Π·Π° ΠΏΠΎΠ»Π΅, Π² своСм классС я Π²Ρ€ΠΎΠ΄Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ объявлял.

class_index Π² 16 элСмСнтС

name_and_type_index Π² 17 элСмСнтС

tag для CONSTANT_String

ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ самоС интСрСсноС Π»Π΅ΠΆΠΈΡ‚ Π² 18 элСмСнтС:

Tag ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ссылкС Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄:
класс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ описан Π² 19 элСмСнтС

a Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ Ρ‚ΠΈΠΏ Π² 20 элСмСнтС:

5-Ρ‹ΠΉ элСмСнт:
Tag для CONSTANT_Class

Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² 21 элСмСнтС

6-ΠΎΠΉ элСмСнт:
CΠ½ΠΎΠ²Π° CONSTANT_Class

c Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π² 22 элСмСнтС

Как ΠΌΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ 1-Ρ‹ΠΉ элСмСнт constant_pool относится ΠΊ этому классу.

7-ΠΎΠΉ элСмСнт:
tag, CONSTANT_Utf8, пСрвая строчка

Она Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ:

CONSTANT_Utf8_info <
u1 tag;
u2 length;
u1 bytes[length];
>

Π’ΠΎΠ³Π΄Π° Π΄Π»ΠΈΠ½Π° нашСй строчки 6 Π±Π°ΠΉΡ‚:

Π­Ρ‚ΠΎ особоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ конструкторы.

строчка Π΄Π»ΠΈΠ½Ρ‹ 3 β€” «()V»:

Π­Ρ‚ΠΎ описаниС нашСго конструктора Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» упомянут Π² сСдьмом элСмСнтС.

9-Ρ‹ΠΉ элСмСнт:
CONSTANT_Utf8

10-Ρ‹ΠΉ элСмСнт:
Π‘Ρ‚Ρ€ΠΎΠΊΠ° LineNumberTable

15-Ρ‹ΠΉ элСмСнт
Tag, соотвСтствуСт CONSTANT_NameAndType

Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π°ΠΌ понадобится

CONSTANT_NameAndType_info <
u1 tag;
u2 name_index;
u2 descriptor_index;
>

ΠΈ Ρ‚ΠΎΠ³Π΄Π°:
ссылка Π½Π° 7 элСмСнт

ccΡ‹Π»ΠΊΠ° Π½Π° 8 элСмСнт

Учитывая Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ссылался Π½Π° это, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±Ρ‹Π» объявлСн конструктор класса Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². НазваниС класса, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π² 22 элСмСнтС.

16-Ρ‹ΠΉ элСмСнт:
Tag, для CONSTANT_Class

c Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π² 23 элСмСнтС

17-Ρ‹ΠΉ элСмСнт:
Tag, CONSTANT_NameAndType, со ссылкой Π½Π° 24 ΠΈ 25 элСмСнт constant_pool

18-Ρ‹ΠΉ элСмСнт:
Π£Ρ€Π° Β«Hello world!Β»

19-Ρ‹ΠΉ элСмСнт:
Tag, для CONSTANT_class c Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π² 25-ΠΎΠΌ элСмСнтС

20-Ρ‹ΠΉ элСмСнт:
Tag CONSTANT_NameAndType cΠΎ ссылкой Π½Π° 27 ΠΈ 28 элСмСнт

25-Ρ‹ΠΉ элСмСнт:
Β«Ljava/io/PrintStream;Β»

26-ΠΎΠΉ элСмСнт:
Β«java/io/PrintStreamΒ»

methods_count Ρƒ нас 2 ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² классС, конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ main:

Method 1 β€” Constructor

Один ΠΈΠ· самых интСрСсных Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² с ΠΊΠΎΠ΄ΠΎΠΌ нашСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° code[code_length], Ρ€Π°Π·Π±ΠΎΡ€ инструкций ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ большая Ρ‚Π΅ΠΌΠ°:

Аттрибут закончился ΠΈ продолТаСтся описаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Attribute 1 ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main

ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½ΠΎ ΠΈ ΠΈΠ΄Π΅Ρ‚ описаниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² класса

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ с ΠΏΠΎ-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌ Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ class Ρ„Π°ΠΉΠ»Π°, становится понятно ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

Он автоматичСски Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ я выписал Ρ€ΡƒΠΊΠ°ΠΌΠΈ:

А Π²ΠΎΡ‚ здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π·Π±ΠΎΡ€Π° class Ρ„Π°ΠΉΠ»Π°:

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

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

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