Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции

ВрСмя компиляции (Ρ„Π°Π·Π° ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹)

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ компилятором ΠΊΠ°ΠΊ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΎΡ‚ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… этапов ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° (Π°Π½Π³Π». program lifecycle phase) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ врСмя выполнСния, врСмя установлСния связСй (Β«Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈΒ») (Π°Π½Π³Π». link time) ΠΈ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (Π°Π½Π³Π». load time).

БвязанныС понятия

Π‘ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π°Π½Π³Π». coroutines) β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° связи ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ многозадачности: ΠΌΠΎΠ΄ΡƒΠ»ΡŒ приостанавливаСтся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅, сохраняя ΠΏΠΎΠ»Π½ΠΎΠ΅ состояниС (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ счётчик ΠΊΠΎΠΌΠ°Π½Π΄), ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π’ΠΎΡ‚, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, выполняСт Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, сохраняя свои стСк ΠΈ счётчик.

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

Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ компиляторов ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΡ‘Ρ€Ρ‚Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (Π°Π½Π³Π». dead code elimination, DCE) называСтся оптимизация, ΡƒΠ΄Π°Π»ΡΡŽΡ‰Π°Ρ ΠΌΡ‘Ρ€Ρ‚Π²Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠœΡ‘Ρ€Ρ‚Π²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ (Ρ‚Π°ΠΊ ΠΆΠ΅ бСсполСзным ΠΊΠΎΠ΄ΠΎΠΌ) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠ΄, исполнСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ влияСт Π½Π° Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, всС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вычислСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΡ‘Ρ€Ρ‚Π²Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² дальнСйшСм Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.

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

ВрСмя компиляции

Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, ΠΊ ΠΏΠΎΠ½ΡΡ‚ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ компилятором ΠΈ относящиСся ΠΊ трСбованиям языка программирования (исходный ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ языка для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ), Π»ΠΈΠ±ΠΎ это свойства ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ выяснСны Π² Ρ…ΠΎΠ΄Π΅ компиляции. Ко Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции относится врСмя Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, выраТСния написанныС Π½Π° любом языкС программирования ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° ошибки.

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠžΠ±Π·ΠΎΡ€

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, выполняСмыС Π²ΠΎ врСмя компиляции, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя синтаксичСский Π°Π½Π°Π»ΠΈΠ·, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ сСмантичСского Π°Π½Π°Π»ΠΈΠ·Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ инстанцирования шаблона) ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°.

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

Бвойства ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ выяснСны Π²ΠΎ врСмя компиляции, это Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ВрСмя компиляции происходит Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… скомпилированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ΡΡ вмСстС) ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ исполнСна). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках программирования ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π°ΡΡ‚ΡŒ компиляции ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ происходила Π²ΠΎ врСмя выполнСния. БущСствуСт компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ компиляции ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, состоящий Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Ρ‹ Π΄ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°Ρ‚.

«ВрСмя компиляции» ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ фактичСскому количСству Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌΡƒ для компиляции.

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

Аннотации Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ @Implement

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

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

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

Π― ΠΎΠΏΠΈΡˆΡƒ ΠΎΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ всС шаги ΠΈ Π½ΡŽΠ°Π½ΡΡ‹ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Ρ‚Ρ€Π°Ρ‚ΠΈΠ» врСмя ΠΈ Π½Π΅Ρ€Π²Π½Ρ‹Π΅ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования этой Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Если Π’Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ смСло Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ. Π£Π²Π΅Ρ€Π΅Π½, это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ повлияСт Π½Π° ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ излоТСния.

БСйчас Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ скорСС ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ читаСмости ΠΊΠΎΠ΄Π° Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΎΠ± устранСнии ошибок. ΠŸΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ Ρ…ΠΎΠ±Π±ΠΈ-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Допустим, Π΅ΡΡ‚ΡŒ класс UnitManager, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΠΎ сути, являСтся ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ ΡŽΠ½ΠΈΡ‚ΠΎΠ². Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для добавлСния, удалСния, получСния ΡŽΠ½ΠΈΡ‚Π° ΠΈ Ρ‚.Π΄. ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡŽΠ½ΠΈΡ‚Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ присваиваСт Π΅ΠΌΡƒ id. ГСнСрация id Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π° классу RotateCounter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅. И Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, RotateCounter Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, свободСн Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ id. Богласно ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ инвСртирования зависимостСй, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ интСрфСйс, Π² ΠΌΠΎΠ΅ΠΌ случаС это RotateCounter.IClient, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ isValueFree(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ id ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли id свободСн. А UnitManager Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот интСрфСйс, создаст экзСмпляр RotateCounter ΠΈ пСрСдаст Π΅ΠΌΡƒ сСбя Π² качСствС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

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

НСмного Ρ‚Π΅ΠΎΡ€ΠΈΠΈ

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ элСмСнтов Π½Π° этапС компиляции Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ классы-процСссоры. Π­Ρ‚ΠΎ классы ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ javax.annotation.processing.AbstractProcessor (ΠΌΠΎΠΆΠ½ΠΎ просто Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс javax.annotation.processing.Processor ). Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΎ процСссоры ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь ΠΈ здСсь. Π‘Π°ΠΌΡ‹ΠΉ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Π½Π΅ΠΌ process. Π’ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… элСмСнтов ΠΈ провСсти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

Π‘Π½Π°Ρ‡Π°Π»Π°, ΠΏΠΎ наивности Π΄ΡƒΡˆΠ΅Π²Π½ΠΎΠΉ, я Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π½Π° этапС компиляции осущСствляСтся Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… рСфлСксии, но… Π½Π΅Ρ‚. Π’Π°ΠΌ всС основано Π½Π° элСмСнтах.

Element (javax.lang.model.element.Element) β€” основной интСрфСйс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ структурных элСмСнтов языка. Π£ элСмСнта Π΅ΡΡ‚ΡŒ наслСдники, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ свойства ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ элСмСнта (Π·Π° подробностями ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ сюда):

Types (javax.lang.model.util.Types) β€” ΠΊ этому классу ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΏΠΎΠ²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Π΅Π΅. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсного. По сути, это Π½Π°Π±ΠΎΡ€ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. НапримСр, ΠΎΠ½ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ TypeElement ΠΈΠ· TypeMirror.

TypeKind (javax.lang.model.type.TypeKind) β€” пСрСчислСниС, позволяСт ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ являСтся Π»ΠΈ Ρ‚ΠΈΠΏ массивом (ARRAY), ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ (DECLARED), ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° (TYPEVAR) ΠΈ Ρ‚.Π΄. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· TypeMirror.getKind()

ElementKind (javax.lang.model.element.ElementKind) β€” пСрСчислСниС, поваляСт ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± элСмСнтС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ являСтся Π»ΠΈ элСмСнт ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ (PACKAGE), классом (CLASS), ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ(METHOD), интСрфСйсом(INTERFACE) ΠΈ Ρ‚.Π΄.

Π’ основном, этих Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ½Π΅ Π±Ρ‹Π»ΠΎ достаточно для написания Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

Алгоритм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

Π”Π°Π»ΡŒΡˆΠ΅ начинаСтся самоС интСрСсноС β€” созданиС процСссора. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ process ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список всСх Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… элСмСнтов. Π—Π° Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ саму Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΈ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ интСрфСйс. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, каркас класса-процСссора выглядит Ρ‚Π°ΠΊ:

Π₯ΠΎΡ‡Ρƒ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ нСльзя просто Ρ‚Π°ΠΊ Π²Π·ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ value Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ annotation.value() Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ MirroredTypeException, Π° Π²ΠΎΡ‚ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ TypeMirror. Π­Ρ‚ΠΎΡ‚ читСрский способ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ value я нашСл Ρ‚ΡƒΡ‚:

Π‘Π°ΠΌΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… частСй, Ссли Ρ…ΠΎΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π°, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ вывСсти сообщСниС ΠΎΠ± ошибкС ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. ΠšΡΡ‚Π°Ρ‚ΠΈ, вывСсти сообщСниС ΠΎΠ± ошибкС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ value Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ интСрфСйсом. Π’ΡƒΡ‚ всС просто:

Π’Ρ‹Π·ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ†ΠΈΠΊΠ»Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ process, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

А сам ΠΌΠ΅Ρ‚ΠΎΠ΄ haveMethod() выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? НСт? А ΠΎΠ½Π° Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я Ρ‚Π°ΠΊ ΠΈ Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ фактичСскиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² для ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… интСрфСйсов. НапримСр, Ρƒ мСня Π΅ΡΡ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Predicate:

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Eclipse

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

ВсС вмСстС ΠΈ Π² Eclipse-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° GitHub. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ Ρ‚Π°ΠΌ всСго Π΄Π²Π° класса, Ссли Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Π²Π°Ρ‚ΡŒ: Implement.java ΠΈ ImplementProcessor.java. Π”ΡƒΠΌΠ°ΡŽ, ΠΎΠ± ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π²Ρ‹ ΡƒΠΆΠ΅ догадались.

PS. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ohotNik_alex ΠΈ Comdiv Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² исправлСнии ошибок.

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

ВрСмя выполнСния vs врСмя компиляции

ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π°Ρ‚ΡŒ ΠΌΠ½Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ компиляции?

24 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

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

врСмя компиляции

Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ, это Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ошибки:

Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ошибки, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ:

Π― Π΄ΡƒΠΌΠ°ΡŽ ΠΎΠ± этом с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ошибок, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ.

строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° int, поэтому компилятор Π·Π½Π°Π΅Ρ‚ Π²ΠΎ врСмя компиляции Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

здСсь Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, какая строка Π±Ρ‹Π»Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π° ReadLine(). НСкоторыС значСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² int, Π΄Ρ€ΡƒΠ³ΠΈΠ΅-Π½Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ врСмя

Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции: ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ свой ΠΊΠΎΠ΄.

врСмя: ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ запускаСт Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅?

(Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ относится ΠΊ C# ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языкам программирования. Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ).

Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, компилятор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ (at врСмя компиляции) ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции:

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ. Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сообщСниС ΠΎΠ± ошибкС / ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹).

Π½Π° составлСн ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹-c ΠΈ fortran):

Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ шагС, ΠΊΠ°ΠΊ говорят, происходят Π²ΠΎ врСмя» компиляции», Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ шагС, ΠΊΠ°ΠΊ говорят, происходят Π²ΠΎ врСмя»Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ».

Π½Π° понял ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ MicroSoft basic (Π½Π° dos) ΠΈ python (я Π΄ΡƒΠΌΠ°ΡŽ)):

Π² этом случаС Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ компиляции ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния довольно Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΌΠ΅Π½Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π° для программиста ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

сущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ случай, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° компилируСтся Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ запускаСтся Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ (ΠΊΠ°ΠΊ Π² awk ΠΈΠ»ΠΈ perl).

Π² основном, Ссли ваш компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «Π²ΠΎ врСмя компиляции», ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это Π² ΠΊΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ссли ваш ΠΊΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ вычислСния ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, поэтому, Ссли Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²ΠΎ врСмя компиляции, это Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅.

компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ†ΠΈΡŽ Π²ΠΎ врСмя компиляции, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ 2, ΠΈ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ MY_CONSTANT. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ избавляСт сСбя ΠΎΡ‚ выполнСния вычислСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния.

Π₯ΠΌ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ, срСда выполнСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для описания Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

врСмя компиляции ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для описания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ построСнии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ компилятором).

ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ±ΠΎ всСх ошибки программирования здСсь

ВрСмя ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ:

Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π·Π°Ρ‚Ρ€Π°Ρ‚ ΠΏΡ€ΠΈ запускС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Ρ‚Ρ€Π°Ρ‚ ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ВрСмя ВыполнСния:

Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ полная ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. НСбольшая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ построСнии, большС Π·Π°Ρ‚Ρ€Π°Ρ‚ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны; Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ сдСлано Π²ΠΎ врСмя компиляции, ΠΎΠ½ΠΎ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π° Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ выполняСтся, ΠΎΠ½ΠΎ выполняСтся Π½Π° Π²Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ… машина.

Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

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

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

Π² просто Ρ€Π°Π·Π½ΠΈΡ†Π΅ слов b / w врСмя компиляции ΠΈ врСмя выполнСния.

Π²ΠΎΡ‚ Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· Даниэля Ляна, Π°Π²Ρ‚ΠΎΡ€Π° «Π²Π²Π΅Π΄Π΅Π½ΠΈΡ Π² JAVA-ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅», ΠΏΠΎ вопросу компиляции:

«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, написанная Π½Π° языкС высокого уровня, называСтся исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈΠ»ΠΈ исходным ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, исходная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ Π½Π° ΠΊΠΎΠ΄ Π½Π° исполнСниС. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ инструмСнта программирования, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ компилятор.(Π”Π°Π½ΠΈΡΠ»ΡŒ Лян, «Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ JAVA», p8).

«ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ всю исходный ΠΊΠΎΠ΄ Π½Π° машина-ΠΊΠΎΠ΄ file, ΠΈ Ρ„Π°ΠΉΠ» машинного ΠΊΠΎΠ΄Π° Π·Π°Ρ‚Π΅ΠΌ выполняСтся»

ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΎΠ±ΠΈΠ²Π°Π΅ΠΌ высокоуровнСвый / Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΊΠΎΠ΄, это сначала бСсполСзно! Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ «ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹Ρ… событий» Π² ваш ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ процСссор! ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом Π² этом Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ являСтся компиляция.

ΠΏΡ€ΠΎΡ‰Π΅ говоря: ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции происходит Π½Π° этом этапС, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния происходит ΠΏΠΎΠ·ΠΆΠ΅.

ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅: просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° компилируСтся Π±Π΅Π· ошибок Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· ошибок.

Ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅ΠΉ части ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ «Π½ΠΎΠ²ΠΎΠ³ΠΎ» этапа ΠΆΠΈΠ·Π½ΠΈ Π΅Π·Π΄ΠΈΡ‚ΡŒ Π½Π° вСлосипСдС.

ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции:

синтаксичСская ошибка-ΠΊΠ°ΠΊ ваш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирован Π² инструкции машинного уровня, Ссли ΠΎΠ½ΠΈ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹?? Π’Π°Ρˆ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ 100% синтаксичСским ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ языка, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирован Π² working ΠΊΠΎΠ΄.

ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ошибки Π²ΠΎ врСмя выполнСния:

заканчиваСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ-Π²Ρ‹Π·ΠΎΠ² рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ стСка, учитывая ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ стСпСни! Как это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Ρ‚ΡŒ компилятор!? Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

ΠΈ Π² этом Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ошибкой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΈ ошибкой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния

Π² качСствС дополнСния ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌ, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ я Π±Ρ‹ объяснил это нСпрофСссионалу:

ваш исходный ΠΊΠΎΠ΄ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ корабля. Он опрСдСляСт, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сдСлан ΠΊΠΎΡ€Π°Π±Π»ΡŒ.

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

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

врСмя выполнСния ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

врСмя компиляции ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π·Π°Ρ‚Ρ€Π°Ρ‚ ΠΏΡ€ΠΈ запускС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Ρ‚Ρ€Π°Ρ‚ ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ВрСмя ВыполнСния:

Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ полная ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. НСбольшая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ построСнии, большС Π·Π°Ρ‚Ρ€Π°Ρ‚ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны; Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ сдСлано Π²ΠΎ врСмя компиляции, ΠΎΠ½ΠΎ запускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π° Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ выполняСтся, ΠΎΠ½ΠΎ запускаСтся Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

прСдставлСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° способствуСт ΠΊ своСму качСству ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±ΠΎΠ»Π΅Π΅ быстро. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π²ΠΎ врСмя компиляции способствуСт Π΅Π³ΠΎ своСврСмСнности Π·Π° счСт сокращСния Ρ†ΠΈΠΊΠ»Π° рСдактирования-компиляции-ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Однако ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎ врСмя выполнСния, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎ врСмя компиляции Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ Π² достиТСнии своСврСмСнного качСства. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²ΠΎ врСмя выполнСния ΠΈ Π²ΠΎ врСмя компиляции Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° это ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‰Π΅Π³ΠΎ качСства ΠΈ своСврСмСнности ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ.

большой источник для дальнСйшСго чтСния здСсь:

Π― всСгда Π΄ΡƒΠΌΠ°Π» ΠΎΠ± этом ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это влияСт Π½Π° ΠΏΡ€Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΊΠΎΠ΄Π΅, ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ x это Π·Π°Ρ‚Π΅ΠΌ Π² скомпилированной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запускаСтся, ΠΎΠ½Π° Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚, сколько памяти Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ для x.

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

ΠΊΠ°ΠΊ ΠΎΠ½ динамичСски обрабатываСтся, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ языка, компилятора, ОБ,вашСго ΠΊΠΎΠ΄Π° ΠΈ Ρ‚. Π΄.

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

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

основная Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ компиляции:

int a = 1 int b = a/0;

Π²ΠΎΡ‚ ΠΎΡ‡Π΅Π½ΡŒ простой ΠΎΡ‚Π²Π΅Ρ‚:

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

скомпилированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ, ΠΎΠ½ΠΎ называСтся runtime.

Ссли исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠΆΠ΅ Π±Ρ‹Π» скомпилирован Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅Ρ‚ΡŒ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ сбои ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΈ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ошибками выполнСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π²ΠΎ врСмя выполнСния.

ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ сказано Π²Ρ‹ΡˆΠ΅, я Ρ…ΠΎΡ‡Ρƒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° стоит 1000 слов:

CLR_diag врСмя компиляции, Π° Π·Π°Ρ‚Π΅ΠΌ runtime2 Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции;

3.2 Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими 3 Π²Π΅Ρ‰Π°ΠΌΠΈ: compile vs build vs runtime

https://www.quora.com/What-is-the-difference-between-build-run-and-compile Π€Π΅Ρ€Π½Π°Π½Π΄ΠΎ Падоан, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π΅Π½ для языкового Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠžΡ‚Π²Π΅Ρ‚ΠΈΠ» 23 ЀСвраля Π― Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡΡŒ Π½Π°Π·Π°Π΄ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌ:

врСмя компиляции: ВрСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для прСобразования исходного ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ стал исполняСмым, называСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ компиляции.

врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹: Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ, ΠΎΠ½ΠΎ называСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния.

ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции-это синтаксичСскиС ошибки, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ошибки ссылки Π½Π° Ρ„Π°ΠΉΠ». Ошибки выполнСния происходят послС компиляции исходного ΠΊΠΎΠ΄Π° Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сбои, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

посмотритС Π½Π° этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

тСст ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ класса <

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ скомпилирован ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, синтаксичСской ошибки Π½Π΅Ρ‚, ΠΎΠ½ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½. Но Π²ΠΎ врСмя выполнСния ΠΎΠ½ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

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

Π­Ρ‚ΠΎ Π½Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ вопрос для S. O. (Π­Ρ‚ΠΎ Π½Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ вопрос программирования), Π½ΠΎ это Π½Π΅ ΠΏΠ»ΠΎΡ…ΠΎΠΉ вопрос Π² Ρ†Π΅Π»ΠΎΠΌ.

Если Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ: ΠΊΠ°ΠΊ насчСт Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ чтСния ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции, ΠΈ ΠΊΠΎΠ³Π΄Π° это ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅? НасчСт языков, Π³Π΄Π΅ компилятор доступСн Π²ΠΎ врСмя выполнСния? Π“Π°ΠΉ Π‘Ρ‚ΠΈΠ» (Π½Π΅ ΠΌΠ°Π½Π΅ΠΊΠ΅Π½, ΠΎΠ½) написал 7 страниц Π² CLTL2 ΠΎΠ± EVAL-WHEN, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ программисты CL ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для управлСния этим. 2 прСдлоТСния Π΅Π΄Π²Π° Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам ΠΏΠΎ сСбС Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ объяснСниС.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, это слоТная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ языковыС Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹, казалось, ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ. Они часто просто говорят: «Π²ΠΎΡ‚ компилятор, ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ Π²Π΅Ρ‰ΠΈ Π²ΠΎ врСмя компиляции; всС послС этого Π²ΠΎ врСмя выполнСния, ΠΏΠΎΠ»ΡƒΡ‡Π°ΠΉΡ‚Π΅ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅». C Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ простым Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Π½Π΅ самой Π³ΠΈΠ±ΠΊΠΎΠΉ срСдой для вычислСний. Когда Ρƒ вас Π½Π΅Ρ‚ компилятора, доступного Π²ΠΎ врСмя выполнСния, ΠΈΠ»ΠΈ возмоТности Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ оцСниваСтся, Π²Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ с Ρ…Π°ΠΊΠΈ Π½Π° языкС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ использованиС макросов, ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Ρ… конструкций. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ язык ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ стоящСй Ρ†Π΅Π»ΡŒΡŽ, Π½ΠΎ это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это ΠΊΠΎΠ½Π΅Ρ† всСго Π΄ΠΈΠ·Π°ΠΉΠ½Π° языка программирования. (Π― Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ EVAL-ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Тизнь Π±Π΅Π· Π½Π΅Π³ΠΎ.)

ΠΈ problemspace Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния-это ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π½Π΅ΠΈΠ·Π²Π΅Π΄Π°Π½Π½Ρ‹ΠΉ. Π­Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ S. O.-ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ мСсто для обсуТдСния, Π½ΠΎ я ΠΏΡ€ΠΈΠ·Ρ‹Π²Π°ΡŽ людСй ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ‚Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΡ€ΠΈΡŽ дальшС, особСнно Ρ‚Π΅Ρ…, Ρƒ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚ прСдвзятых прСдставлСний ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ. Вопрос Π½Π΅ простой ΠΈ Π½Π΅ Π³Π»ΡƒΠΏΡ‹ΠΉ, ΠΈ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΡ€Ρƒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

ΠΊ соТалСнию, я Π½Π΅ знаю Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ссылок Π½Π° это. ΠŸΠ΅Ρ€Π΅Π³ΠΎΠ²ΠΎΡ€Ρ‹ CLTL2 ΠΎΠ± этом Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Π½Π΅ ΡƒΠ·Π½Π°Π² ΠΎΠ± этом.

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

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

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