компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ?

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

Π Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΈ использовании любого языка программирования сущСствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» создания ΠΊΠΎΠ΄Π°. Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ, запускаСтС, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ошибки ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅Ρ‚Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ пСрСписываСтС ΠΈ дописываСтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, провСряСтС Π΅Π΅. Π’ΠΎ, ΠΎ Ρ‡Π΅ΠΌ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, это Β« запускаСмая Β» Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Когда ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ инструкции Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ процСссора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поэтапно выполняСт инструкции, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Как ΠΈΠ· выраТСния Β« a = 3; Β» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ процСссор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ?

ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компиляции. БущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ прилоТСния, извСстныС ΠΊΠ°ΠΊ компиляторы. Они ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ написали. Π—Π°Ρ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ строят ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для процСссора. Часто Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

На ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этапов процСсса ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ задСйствуСтся ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈ связываСт ΠΈΡ… Π² ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». Π’ΠΎΡ‚ схСма, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ Π΄Π°Π½Π½Ρ‹ΠΉ процСсс:

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. compilationdiagram 010238. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-compilationdiagram 010238. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° compilationdiagram 010238. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

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

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

НС всС языки программирования ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ это Π² своСй ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. НапримСр, Java прСдназначался для запуска Π² Β« ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Β» срСдС, Π° Python всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ компиляции являСтся интСрпрСтация. Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ компиляторы ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹? Основная Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±Π΅Ρ€Π΅Ρ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π΅ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ процСссор.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ β€” это исполняСмый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поэтапно Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, сразу выполняя Π΅Π΅ инструкции.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ выполняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ поэтапно ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ собствСнного исполняСмого Ρ„Π°ΠΉΠ»Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ пСрСдаСтся процСссору, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ сам являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, построСнным Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя.

Π­Ρ‚ΠΎ Π»ΠΎΠΌΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ΡˆΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ новая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°:

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. interpretationdiagram 010239. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-interpretationdiagram 010239. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° interpretationdiagram 010239. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

На Π½Π΅ΠΉ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ компилятора, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ смыслС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ становится процСссором. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Β« скриптами Β», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ сцСнариями дСйствий для Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ прямым ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

ΠŸΡ€ΠΈΡ€ΠΎΠ΄Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Они просто Π±Π΅Ρ€ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство строк ΠΊΠΎΠ΄Π° Π·Π° Ρ€Π°Π· ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΅Π³ΠΎ.

НСкоторыС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΎ своСго Ρ€ΠΎΠ΄Π° псСвдо ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.

Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ быстрСС обрабатываСтся, ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ для исполнитСля ( части ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, которая исполняСт ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считываСт Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Π½Π΅ ΠΊΠΎΠ΄ источника.

Π•ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… этот Π²ΠΈΠ΄ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, язык программирования Java Β« запускаСтся Β» Π½Π° Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС. Она являСтся исполняСмым ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая считываСт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ эмулируСт Ρ€Π°Π±ΠΎΡ‚Ρƒ процСссора. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ процСссор ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π±Ρ‹Π» Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ процСссором.

Π—Π° ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²

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

Но наибольшим нСдостатком компиляции являСтся ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ. Когда ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ процСссорС, Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° этом процСссорС. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°ΠΏΡƒΡΠΊΠ°Π»Π°ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ машинС, Π²Π°ΠΌ придСтся ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎΠ΄ этот процСссор. А пСрСкомпиляция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ довольно слоТной, Ссли процСссор ΠΈΠΌΠ΅Π΅Ρ‚ ограничСния ΠΈΠ»ΠΈ особСнности, Π½Π΅ присущиС ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ. А Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ошибки компиляции.

ОсновноС прСимущСство ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ β€” Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. МоТно Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° любом процСссорС ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Ρ‹Π» скомпилирован. Написанный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ смыслС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ компиляторы.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΡ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ элСмСнты, ΠΊΠ°ΠΊ сборщики мусора, Π° Π½Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ язык.

Π”Ρ€ΡƒΠ³ΠΈΠΌ прСимущСством ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

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

Π‘Π°ΠΌΡ‹ΠΌ большим нСдостатком ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² являСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выполняСтся Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ², Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ замСдлСнию Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… real-time ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΈΠ³Ρ€Ρ‹ с высоким Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ симуляциСй. НСкоторыС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ содСрТат ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ just-in-time компиляторами ( JIT ). Они ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ исполнСниСм. Π­Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, вынСсСнныС Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ процСссоры становятся всС Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ, данная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° становится ΠΌΠ΅Π½Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Для мСня Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, скомпилировано Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Ссли ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ эффСктивно.

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚Π΅ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π»ΠΈ: ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ? Бпасибо Π·Π° ΡƒΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя!

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ваши ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Π΅ΠΌΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ. ΠœΡ‹ ΠΊΡ€Π°ΠΉΠ½Π΅ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½Ρ‹ Π²Π°ΠΌ Π·Π° ваши ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π΄ΠΈΠ·Π»Π°ΠΉΠΊΠΈ, подписки, ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΈ, Π»Π°ΠΉΠΊΠΈ!

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

ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C++

ЦСль Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ происходит компиляция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° языкС C++, ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ этап компиляции. Π― Π½Π΅ ΠΏΡ€Π΅ΡΠ»Π΅Π΄ΡƒΡŽ Ρ†Π΅Π»ΡŒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±ΠΎ всСм ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² дСталях, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΆΠ΅ данная ΡΡ‚Π°Ρ‚ΡŒΡ β€” это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ ΠΏΡ€ΠΎ статичСскиС ΠΈ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ процСсс компиляции ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ΅Π½ для понимания ΠΏΠ΅Ρ€Π΅Π΄ дальнСйшим повСствованиСм ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ….

ВсС дСйствия Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Ubuntu вСрсии 16.04.
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ компилятор g++ вСрсии:

Бостав компилятора g++

ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с C++ ΠΊΠΎΠ΄ΠΎΠΌ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ² всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ основному ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ компилятора β€” g++.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходныС Ρ„Π°ΠΉΠ»Ρ‹?

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ C++ Ρ„Π°ΠΉΠ» β€” это всСго лишь ΠΊΠΎΠ΄, Π½ΠΎ Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ исходный Ρ„Π°ΠΉΠ» трСбуСтся ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² исполняСмый Ρ„Π°ΠΉΠ», Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π΄Π°Π½Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅).

Π­Ρ‚Π°ΠΏΡ‹ компиляции:

driver.cpp:

1) ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΈΠ½Π³

Бамая пСрвая стадия компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ β€” это ΠΌΠ°ΠΊΡ€ΠΎ процСссор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для дальнСйшСго компилирования. На Π΄Π°Π½Π½ΠΎΠΉ стадии происходит происходит Ρ€Π°Π±ΠΎΡ‚Π° с прСпроцСссорными Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ. НапримСр, прСпроцСссор добавляСт хэдСры Π² ΠΊΠΎΠ΄ (#include), ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ коммСнтирования, замСняСт макросы (#define) ΠΈΡ… значСниями, Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ куски ΠΊΠΎΠ΄Π° Π² соотвСтствии с условиями #if, #ifdef ΠΈ #ifndef.

Π₯эдСры, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #include, рСкурсивно проходят ΡΡ‚Π°Π΄ΠΈΡŽ прСпроцСссинга ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² выпускаСмый Ρ„Π°ΠΉΠ». Однако, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ хэдСр ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π²ΠΎ врСмя прСпроцСссинга нСсколько Ρ€Π°Π·, поэтому, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ прСпроцСссорныС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΏΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚ цикличСской зависимости.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ прСпроцСссированный ΠΊΠΎΠ΄ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» driver.ii (ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΡΡ‚Π°Π΄ΠΈΡŽ прСпроцСссинга C++ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .ii), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„Π»Π°Π³ -E, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщаСт компилятору, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΠΎΠ± этом Π΄Π°Π»Π΅Π΅) Ρ„Π°ΠΉΠ» Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ провСсти Π΅Π³ΠΎ прСпроцСссинг:

Взглянув Π½Π° Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main Π² Π½ΠΎΠ²ΠΎΠΌ сгСнСрированном Ρ„Π°ΠΉΠ»Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ макрос RETURN Π±Ρ‹Π» Π·Π°ΠΌΠ΅Π½Π΅Π½:

Π’ Π½ΠΎΠ²ΠΎΠΌ сгСнСрированном Ρ„Π°ΠΉΠ»Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π½ΠΎΠ²Ρ‹Ρ… строк, это Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ хэдСр iostream.

2) ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ

На Π΄Π°Π½Π½ΠΎΠΌ шагС g++ выполняСт свою Π³Π»Π°Π²Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ β€” ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ шагС ΠΊΠΎΠ΄ Π±Π΅Π· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² Π² ассСмблСрный ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ шаг ΠΌΠ΅ΠΆΠ΄Ρƒ высокоуровнСвым языком ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌ) ΠΊΠΎΠ΄ΠΎΠΌ.

АссСмблСрный ΠΊΠΎΠ΄ β€” это доступноС для понимания Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ прСдставлСниС машинного ΠΊΠΎΠ΄Π°.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„Π»Π°Π³ -S, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщаСт компилятору ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ послС стадии компиляции, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ассСмблСрный ΠΊΠΎΠ΄ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ driver.s:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ всС Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Но для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ машина поняла наш ΠΊΠΎΠ΄, трСбуСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шагС.

3) АссСмблированиС

Π’Π°ΠΊ ΠΊΠ°ΠΊ x86 процСссоры ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСвСсти ассСмблСрный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ассСмблСра.

АссСмблСр ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ассСмблСрный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, сохраняя Π΅Π³ΠΎ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» β€” это созданный ассСмблСром ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», хранящий кусок машинного ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ кусок машинного ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» связан вмСстС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ кусками машинного ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, называСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

Π”Π°Π»Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ сохранСниС Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² статичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ снова.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ассСмблСра (as) Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» driver.o:

Но Π½Π° Π΄Π°Π½Π½ΠΎΠΌ шагС Π΅Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½ΠΎ, вСдь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡ… всСх ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° (Π»ΠΈΠ½ΠΊΠ΅Ρ€Π°). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ стадии.

4) Компоновка

ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ (Π»ΠΈΠ½ΠΊΠ΅Ρ€) связываСт всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ статичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈ смоТСм Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² дальнСйшСм. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ происходит связка, слСдуСт Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ символов.

Π’Π°Π±Π»ΠΈΡ†Π° символов β€” это структура Π΄Π°Π½Π½Ρ‹Ρ…, создаваСмая самим компилятором ΠΈ хранящаяся Π² самих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…. Π’Π°Π±Π»ΠΈΡ†Π° символов Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, классов, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ‚.Π΄., Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ (символу) соотносится Π΅Π³ΠΎ Ρ‚ΠΈΠΏ, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Π’Π°ΠΊΠΆΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° символов Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСса ссылок Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ….
ИмСнно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ символов ΠΈ хранящихся Π² Π½ΠΈΡ… ссылок Π»ΠΈΠ½ΠΊΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ способСн Π² дальнСйшСм ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ срСди мноТСства Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ· Π½ΠΈΡ….

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ исполняСмый Ρ„Π°ΠΉΠ» driver:

5) Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

ПослСдний этап, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдстоит ΠΏΡ€ΠΎΠΉΡ‚ΠΈ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ β€” Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. На Π΄Π°Π½Π½ΠΎΠΉ стадии Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠ° динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Запустим Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компилятор?

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

Π’ этом Π³Π°ΠΉΠ΄Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компилятор ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠœΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ этапы компиляции ΠΈ ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ зависит Π²Ρ‹Π±ΠΎΡ€ подходящСго компилятора. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ выполняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π½Π΅ компилируСтся.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ компилятор?

ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ β€” самая ваТная Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Он ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ слСдит Π·Π° Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ всСх ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… устройств. Но процСссор ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” Π½Π°Π±ΠΎΡ€ 0 ΠΈ 1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ записаны Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ порядкС.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ 0 ΠΈ 1? Π’ процСссор ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ элСктричСскиС сигналы. Π‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ сигнал обозначаСтся Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 1, Π° слабый β€” 0. Набор Ρ‚Π°ΠΊΠΈΡ… Ρ†ΠΈΡ„Ρ€ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ Π΅Π΅ распознаСт ΠΈ выполняСт.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² выглядСли ΠΊΠ°ΠΊ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ 0 ΠΈ 1. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ пользовались Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ ΠΊΠ°Ρ€Ρ‚ΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ β€” ΠΏΠ΅Ρ€Ρ„ΠΎΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ. Π¦ΠΈΡ„Ρ€Ρ‹ Π½Π° ΠΏΠ΅Ρ€Ρ„ΠΎΠΊΠ°Ρ€Ρ‚Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π»ΠΈΡΡŒ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ, Π² нСсколько строк. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ 1, программист Π΄Π΅Π»Π°Π» отвСрстиС Π² ΠΊΠ°Ρ€Ρ‚Π΅. ΠœΠ΅ΡΡ‚Π° Π±Π΅Π· отвСрстия ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΈ 0.

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

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ считывал ΠΏΠ΅Ρ€Ρ„ΠΎΠΊΠ°Ρ€Ρ‚Ρƒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ устройством ΠΈ выполнял Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Для ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ составляли сотни ΠΏΠ΅Ρ€Ρ„ΠΎΠΊΠ°Ρ€Ρ‚.

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

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

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ компилятор?

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ называСтся компиляциСй. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄. Она Π½Π΅ запускаСт Π΅Π³ΠΎ Π½Π° исполнСниС. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ β€œΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈβ€ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· запуска) транслируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ слоТный процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сначала тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ разбираСтся Π½Π° части ΠΈ анализируСтся, Π° Π·Π°Ρ‚Π΅ΠΌ гСнСрируСтся ΠΊΠΎΠ΄, понятный процСссору.

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. compilation steps. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-compilation steps. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° compilation steps. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ этапы компиляции Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ вычислСния ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°:

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ компилятору Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Π½Π΅ΠΉ записаны. Π‘Π½Π°Ρ‡Π°Π»Π° компилятор раздСляСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° слова ΠΈ Π·Π½Π°ΠΊΠΈ β€” Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, ΠΈ записываСт ΠΈΡ… Π² список. Π’Π°ΠΊΠΎΠΉ процСсс называСтся лСксичСским Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ. Π•Π³ΠΎ главная Π·Π°Π΄Π°Ρ‡Π° β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π² спискС связаны с Ρ‚ΠΎΠΊΠ΅Π½-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° строится ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ структура β€” логичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π°.

Π’Π°ΠΊ опСрация P = 2*(a + b) Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π° Π² логичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ:

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. parse tree. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-parse tree. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° parse tree. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΈ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ снизу Π²Π²Π΅Ρ€Ρ… ΠΈ составляСт список ΠΊΠΎΠΌΠ°Π½Π΄:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π΅Ρ‰Π΅ Ρ€Π°Π· провСряСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ошибки ΠΈ стараСтся ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ этого этапа, компилятор ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Π½Π°Π±ΠΎΡ€ 0 ΠΈ 1. Наборы Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смоТСт ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ процСссор.

На Ρ‡Π΅ΠΌ написан компилятор?

Π’ 1950-Π΅ Π³ΠΎΠ΄Ρ‹ Π³Ρ€ΡƒΠΏΠΏΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² IBM ΠΏΠΎΠ΄ руководством Π”ΠΆΠΎΠ½Π° Бэкуса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ высокоуровнСвый язык программирования Fortran, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° понятном Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ языкС. Помимо языка, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΈ Π½Π°Π΄ компилятором. Он прСдставлял собой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ исполняСмых ΠΊΠΎΠΌΠ°Π½Π΄, которая ΠΌΠΎΠ³Π»Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Fortran, Π² Ρ‚ΠΎΠΌ числС ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ сСбя.

Π’ дальнСйшСм язык Fortran ΠΈ Π΅Π³ΠΎ компилятор использовали, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ компиляторы для Π½ΠΎΠ²Ρ‹Ρ… языков программирования. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ программисты ΠΈ Π² настоящСС врСмя. ΠŸΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»Π³ΠΎ ΠΈ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, для соврСмСнных процСссоров ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько вСрсий ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ компилятора для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ². БыстрСС ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ компилятор Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ языкС программирования. Для этого Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ язык ΠΈ ΠΏΠΈΡˆΡƒΡ‚ Π½Π° Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ своСго компилятора. Он Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΈ Π»Π΅Π³ΠΊΠΎ скомпилируСт ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ сСбя. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. create compiler. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-create compiler. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° create compiler. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

КакиС Π±Ρ‹Π²Π°ΡŽΡ‚ компиляторы?

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

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ соврСмСнныС процСссоры ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° устройством, поэтому ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСссора Π±ΡƒΠ΄Π΅Ρ‚ понятСн, Π° для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π½Π΅Ρ‚. Π­Ρ‚ΠΎ касаСтся ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм: ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Windows, Π½ΠΎ Π½Π΅ запустится Π½Π° Linux ΠΈΠ»ΠΈ MacOS. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌ компилятором, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π½ΡƒΠΆΠ½Ρ‹ΠΌ процСссором ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой.

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, Ρ‚ΠΎ Π½ΡƒΠΆΠ΅Π½ кросс-компилятор β€” компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. НапримСр, GNU Compiler Collection(сокращСнно GCC) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ C++, Objective-C, Java, Π€ΠΎΡ€Ρ‚Ρ€Π°Π½, Ada, Go ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ процСссоров.

ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ программисты Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ компилятора Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Они ΠΏΠΈΡˆΡƒΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ встроСн компилятор, Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ Π½Π΅ ΠΎΠ΄ΠΈΠ½. Π’ этом случаС, Π²Ρ‹Π±ΠΎΡ€ компилятора Π΄Π΅Π»Π°Π΅Ρ‚ срСда, Π° Π½Π΅ программист. НапримСр, MS Visual Studio ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ компиляторы для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Windows, Linux, Android. Выбирая Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Visual Studio опрСдСляСт процСссор ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΈ послС этого Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ подходящий компилятор.

КакиС ошибки ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ компилятор?

Когда компилятор Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ½ провСряСт, соотвСтствуСт Π»ΠΈ запись ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° стандартам языка. Если Π½Π°ΠΉΠ΄Π΅Π½ΠΎ нСсоотвСтствиС, Ρ‚ΠΎ компилятор Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ± этом ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² Π²ΠΈΠ΄Π΅ ошибки. Когда вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Π°, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²ΠΈΠ΄ΠΈΡ‚ список ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Пока программист Π½Π΅ исправит ошибки, компилятор Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ этапу β€” Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π° для процСссора. Π§Π°Ρ‰Π΅ всСго компилятор ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ:

Иногда компилятор опрСдСляСт ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Но ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ всС-Ρ‚Π°ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ. Π’ этом случаС компилятор ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Вакая рСакция компилятора большС ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π½Π° Π½ΠΈΡ… стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ сам Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ с ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Анализируя тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, компилятор Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ‰Π΅Ρ‚ ошибки, Π½ΠΎ Π΅Ρ‰Π΅ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π΅Π΅ ΠΊΠΎΠ΄. Π’Π°ΠΊΠΎΠΉ процСсс называСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π’ΠΎ врСмя ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ компилятор измСняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выполняла ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌΠΈ.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ β€” ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ программистом ΠΈ процСссором. Он ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, опрСдСляСт ряд ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Выбирая, Π³Π΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для процСссоров ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹ΠΌ, ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ компилятор. Π§Π΅ΠΌ Ρ‚ΠΎΡ‡Π½Π΅Π΅ компилятор ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‚Π΅ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π΅Π΅ ΠΈ быстрСС Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Для этого слСдуйтС простым рСкомСндациям:

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ – Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ простыми словами (2 Ρ„ΠΎΡ‚ΠΎ + 2 Π²ΠΈΠ΄Π΅ΠΎ)

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

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ понятия

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ способы примСнСния слова компиляция:

1. АнимС. Π’ Π΄Π°Π½Π½ΠΎΠΉ сфСрС компиляциСй ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΌΠ΅Ρ‚Ρ€Π°ΠΆΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠ΅Ρ‚Ρ€Π°ΠΆΠ½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ основан Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ сСриалС, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΌ Π² классичСском ΠΆΠ°Π½Ρ€Π΅ японской Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ

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

3. ΠœΡƒΠ·Ρ‹ΠΊΠ°. Π’ Π΄Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ искусства компиляциСй Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ сборник ΠΈΠ»ΠΈ ΠΆΠ΅ Ρ†Π΅Π»Ρ‹ΠΉ альбом, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ входят ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ‚Π΅ΠΌΡƒ. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΈΡ‚-ΠΏΠ°Ρ€Π°Π΄Ρ‹, пСсни, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ стиля ΠΈΠ»ΠΈ эпохи, Π° Ρ‚Π°ΠΊΠΆΠ΅ сочинСния Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ исполнитСля Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π»Π΅Ρ‚ написания. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² ΠΌΡƒΠ·Ρ‹ΠΊΠ΅ этим Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ имСнуСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° составлСния произвСдСния ΠΈΠ· ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚Π΅ΠΌ. Иногда компиляциСй ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΠΏΡƒΡ€Ρ€ΠΈ.

4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠ΅ΠΉ Π² Π΄Π°Π½Π½ΠΎΠΉ Π½Π°ΡƒΠΊΠ΅ принято ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ осущСствлСниС трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎ написана Π½Π° высокоуровнСвом языкС, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая создана посрСдством языка Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ схоТий ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ процСсс осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ использования ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ компилятора.

Π’Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ сфСр примСнСния понятия компиляция Π½Π΅ являСтся ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ.

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

ИспользованиС компиляции Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связано с сочинСниСм Ρ€Π°Π±ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основаны Π½Π° использовании большого количСства источников. Π’Π°ΠΊΠΈΠΌ способом создаСтся ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ большоС количСство Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅.

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

ПоявлСниС компиляции Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ распространСниСм ΡƒΡ‡Π΅Π±Π½ΠΎ-популяризаторских ΠΈ ΠΏΡ€ΠΎΡΠ²Π΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ. Π’ Π΄Ρ€Π΅Π²Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° отсутствиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π±Ρ‹Π»ΠΎ объяснСно ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ понимания авторства ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΡΡ Π²ΠΎ всСх государствах института авторского ΠΏΡ€Π°Π²Π°.

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компилятор

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. 1 69cENB1Ce4Ioi98E 9YuLw. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-1 69cENB1Ce4Ioi98E 9YuLw. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1 69cENB1Ce4Ioi98E 9YuLw. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

Если Π²Ρ‹ программист, Ρ‚ΠΎ навСрняка ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ слово β€œΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€β€. Но Π·Π½Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π½Π° самом Π΄Π΅Π»Π΅? Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ происходит ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ javac (Ссли Ρƒ вас ΠΊΠΎΠ΄ Π½Π° Java)? Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный язык программирования? β€” ΠΈ просто Π·Π°Π²ΠΎΠ΄ΠΈΠ»ΠΈ бСсполСзный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GitHub, Π³Π΄Π΅ всС Ρ€Π°Π²Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ readme.md, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ стоит с этого: ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ компиляторС.

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

ВступлСниС

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ β€” это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ исходного ΠΊΠΎΠ΄Π°.

Π—Π°Π΄Π°Ρ‡Π° компилятора β€” пСрСвСсти исходный ΠΊΠΎΠ΄ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ скормитС компилятору исходный ΠΊΠΎΠ΄ Java, Ρ‚ΠΎ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ Python (Π½Π΅ самый Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, просто для понимания сути. На самом Π΄Π΅Π»Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° JVM). Для выполнСния этого процСсса Ρƒ компилятора Π΅ΡΡ‚ΡŒ нСсколько взаимосвязанных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π’ΠΈΠΏΡ‹ компиляторов

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ компиляторы ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу ΠΎ Π΄Π²ΡƒΡ… способах классификации компиляторов, ΠΎΠ΄Π½Π°ΠΊΠΎ особСнно ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² это Π½Π΅ Π±ΡƒΠ΄Ρƒ.

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ компиляторов Π² соотвСтствии с этапами компиляции

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ рассмотрим количСство этапов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ компилятор. НСкоторыС компиляторы нСпосрСдствСнно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ высокоуровнСвый исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ β€” сначала ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ высокоуровнСвый исходный ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² соотвСтствии с этой классификациСй ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° компиляторов:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± этой классификации компиляторов, посмотритС сюда.

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ компиляторов Π² соотвСтствии с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ

Для прСобразования исходного ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹. НСкоторыС компиляторы ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΊΠΎΠ΄ Π½Π° высокоуровнСвом языкС Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ. НСкоторыС компиляторы ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка высокого уровня Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык высокого уровня. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, здСсь Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹:

АрхитСктура компилятора

Когда компилятор ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ (ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚) исходный ΠΊΠΎΠ΄, ΠΎΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ нСсколько этапов:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ всС эти этапы Π½Π° Π΄Π²Π΅ Ρ„Π°Π·Ρ‹, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΊΠ°ΠΊ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ ΠΈ бэкСнд. Π­Ρ‚ΠΈ Ρ„Π°Π·Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы:

Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄

БэкСнд

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

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ компилятор β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ исходный ΠΊΠΎΠ΄. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» содСрТит ΠΊΠΎΠ΄ Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π½ΠΎ компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим тСкстом. НСобходимо ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ этот тСкст Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, понятный компилятору. Для этого компилятор Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ тСкст ΠΏΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°ΠΌ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ эти ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ языка. ΠœΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ пригодятся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапах процСсса компиляции:

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. 1*27ynn8UBlp2IOEZLW1UCfA. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-1*27ynn8UBlp2IOEZLW1UCfA. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1*27ynn8UBlp2IOEZLW1UCfA. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

KEYWORD, BRACKET, IDENTIFIER, OPERATOR, NUMBER Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ β€” это ΠΈ Π΅ΡΡ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ лСксичСский Π°Π½Π°Π»ΠΈΠ· для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ², ΠΈ Ссли ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π·Π°Ρ€Π°Π½Π΅Π΅ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ языка, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ошибкой.

БинтаксичСский Π°Π½Π°Π»ΠΈΠ· (парсинг)

На этом этапС компилятор провСряСт, располоТСны Π»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС. Для этого Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ языкС Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ», Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, компилятор пытаСтся ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ структуру Π΄Π°Π½Π½Ρ‹Ρ… β€” Π΄Π΅Ρ€Π΅Π²ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°. Если компилятор смог ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Π² соотвСтствии с Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Ρ‚ΠΎ Π² исходном ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ‚ синтаксичСских ошибок. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки ΠΈ компилятор ΠΈΡ… ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚.

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

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ сначала ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ. Π—Π°Ρ‚Π΅ΠΌ компилятор пытаСтся ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° для исходного ΠΊΠΎΠ΄Π° 2 + 3 * 3. Π’ этом случаС компилятору удаСтся ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° (с ΠΏΡ€Π°Π²ΠΎΠΉ стороны) Π² соотвСтствии с Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅Ρ‚ синтаксичСских ошибок.

БСмантичСский Π°Π½Π°Π»ΠΈΠ·

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ содСрТит синтаксичСских ошибок, ΠΊΠΎΠ΄ Π΅Ρ‰Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ. Рассмотрим ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅.

I love compilers

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. 1*sMhJyrw58jEyCUF7ie2Pfw. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-1*sMhJyrw58jEyCUF7ie2Pfw. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1*sMhJyrw58jEyCUF7ie2Pfw. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ синтаксиса ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² этом ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅Ρ‚ синтаксичСских ошибок, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ (слова) располоТСны Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅.

I eat compilers

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. 1*3VaRqlb3Q4CmWPUJsIP1KA. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-1*3VaRqlb3Q4CmWPUJsIP1KA. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1*3VaRqlb3Q4CmWPUJsIP1KA. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ eat β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π² соотвСтствии с Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ признаСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π½Π° этапС лСксичСского ΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ слова располоТСны Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС. Но Π² этом ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла β€” Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅ΡΡ‚ΡŒ компиляторы.

Π˜Ρ‚Π°ΠΊ, согласно этапу сСмантичСского Π°Π½Π°Π»ΠΈΠ·Π°, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ эту Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ошибок сСмантичСскими ошибками. ВзглянитС Π½Π° этот простой Java-ΠΊΠΎΠ΄:

Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ синтаксичСских ошибок. ВсС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ упорядочСны ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Но Π½Π° пятой строкС int total = c + d β€” Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ c ΠΈ d Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ сСмантичСская ошибка.

ГСнСрация ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

Π›ΡŽΠ±ΠΎΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ нСпосрСдствСнно Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· исходного. Π’Π°ΠΊ Π·Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Π° Ρ„Π°Π·Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?

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

компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. 1*VcSMYw IcA1FHvmZpo2zXw. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это-1*VcSMYw IcA1FHvmZpo2zXw. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° компиляция ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1*VcSMYw IcA1FHvmZpo2zXw. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ язык программирования ΠΈΠ»ΠΈ интСрпрСтируСтся, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ зависит ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ языка программирования. Π›ΡŽΠ±ΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ компилятора.

БущСствуСт Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… прСдставлСний:

БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ нСсколько способов прСдставлСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π°

Π­Ρ‚Π°ΠΏ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° выполняСт Π΄Π²Π΅ основныС Π·Π°Π΄Π°Ρ‡ΠΈ: минимизация Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ минимизация рСсурсов. Π§Ρ‚ΠΎ всС это Π·Π½Π°Ρ‡ΠΈΡ‚? Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄, Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ инструкций. Когда процСссор выполняСт эти инструкции, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ врСмя ΠΈ рСсурсы памяти. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ†Π΅Π»ΡŒΡŽ этапа ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° становится сокращСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ рСсурсов, потрСбляСмых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° всСгда слСдуСт Ρ‚Ρ€Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

БущСствуСт Π΄Π²Π° способа ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°:

Машинно-нСзависимая оптимизация ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅ заботится Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΈΡ… рСгистрах процСссора ΠΈ ячСйках памяти. Она происходит послС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈ машинно-зависимой ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° компилятор заботится ΠΎ рСгистрах процСссора, располоТСниях памяти ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Она происходит послС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π°.

ГСнСрация ΠΊΠΎΠ΄Π°

ГСнСрация ΠΊΠΎΠ΄Π° β€” это послСдний этап процСсса компиляции. Π”Π°, послС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ машинно-зависимая оптимизация ΠΊΠΎΠ΄Π°. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ вмСстС ΠΊΠ°ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π°. На этом этапС компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ машинно-зависимый ΠΊΠΎΠ΄. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС ΠΎ срСдС выполнСния Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ Π΅Π΅ Π½Π°Π±ΠΎΡ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄.

На этом этапС компилятор выполняСт нСсколько основных Π·Π°Π΄Π°Ρ‡:

Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, сгСнСрированный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС. ИмСнно Ρ‚Π°ΠΊ высокоуровнСвый исходный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пишСм Π² нашСм любимом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°, прСобразуСтся Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° любой Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС. Если Π²Π°ΠΌ хочСтся ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² эти ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊ вашим услугам ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ рСсурсов Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.

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

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

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