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

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

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

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

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

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

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

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

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

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

ВрСмя компиляции / Ρ€Π°Π½Π½Π΅Π΅ связываниС ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

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

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

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

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

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

Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ функция Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции Π² C ++?

Π― искал этот вопрос здСсь (Π½Π° SO), ΠΈ, насколько я знаю, всС вопросы ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции, Π½ΠΎ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ рСсурсы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это довольно Ρ€Π΅Π΄ΠΊΠΎ.

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

МнС каТСтся, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π° способа Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции Π² C ++

Π― ΠΏΡ€ΠΎΡˆΠ΅Π» Ρ‡Π΅Ρ€Π΅Π· ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΡ… ΠΎΠ±ΠΎΠΈΡ…, Π½ΠΎ я понятия Π½Π΅ имСю, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ здСсь.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции с достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π»Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ?

2 ΠΎΡ‚Π²Π΅Ρ‚Π°

Π‘ΠΊΠ°Π·Π°Π² всС это, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции max :

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для вычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ, Π½Π°Π±ΠΎΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… «шаблонноС ΠΌΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β». Π­Ρ‚ΠΎ Π² основном случайно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для этой Ρ†Π΅Π»ΠΈ, ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ ΡΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠΉ синтаксис ΠΈ Π±ΠΎΡ€ΡŒΠ±Π° со старыми компиляторами. Но Π² C ++ 03 ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅ это всС, Ρ‡Ρ‚ΠΎ Ρƒ нас Π±Ρ‹Π»ΠΎ.

constexpr Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² C ++ 11 послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡƒΠ²ΠΈΠ΄Π΅Π» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ вычислСний Π²ΠΎ врСмя компиляции, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π½Π° нСсколько Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΡƒΡŽ Ρ‚Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€ инструмСнтов Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ, позволяя Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС большС ΠΈ большС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ выглядящСго ΠΊΠΎΠ΄Π° Π²ΠΎ врСмя компиляции, просто вставив constexpr Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ мСсто.

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

ВрСмя выполнСния ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции

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

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

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

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ, это ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния :

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

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

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° int, поэтому компилятор Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚, Ρƒ этого ΠΊΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

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

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

ВрСмя выполнСния: ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ запускаСт вашС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС.

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

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

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

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

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ исходного ΠΊΠΎΠ΄Π° Π² Π²Π΅Ρ‰ΠΈ, происходящиС Π½Π° экранС [screen | disk | network], ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ) двумя способами; Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… составлСниСм ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ.

Π’ скомпилированной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ c ΠΈ fortran):

Говорят, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС, происходит Π²ΠΎ «врСмя компиляции», Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ этапС, происходит Π²ΠΎ «врСмя выполнСния».

Π’ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MicroSoft Basic (Π½Π° DOS) ΠΈ Python (я Π΄ΡƒΠΌΠ°ΡŽ)):

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

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

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

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

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

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

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

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

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

Run-Time:

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

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

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

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

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎΠ±ΠΎ всСх ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… программирования здСсь

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

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

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

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

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

ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° слов Ρ‡ / Π± врСмя компиляции ΠΈ врСмя выполнСния.

Π’ΠΎΡ‚ Ρ†ΠΈΡ‚Π°Ρ‚Π° Даниэля Ляна, Π°Π²Ρ‚ΠΎΡ€Π° Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° JAVAΒ», Π½Π° Ρ‚Π΅ΠΌΡƒ компиляции:

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

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° скомпилирована Π±Π΅Π· ошибок, Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· ошибок.

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

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

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

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

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

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

Π’Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции, Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π·Π°Ρ‚Ρ€Π°Ρ‚ ΠΏΡ€ΠΈ запускС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Π»Π΅Ρ‡ΡŒ Π·Π° собой большиС Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ ΠΏΡ€ΠΈ сборкС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Run-Time:

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

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

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

ВрСмя выполнСния: ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΎΠ½ΠΎ называСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния.

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

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

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ источник для дальнСйшСго чтСния здСсь :

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

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

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

Π’ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ обрабатываСтся динамичСски, зависит ΠΎΡ‚ языка, компилятора, ОБ, вашСго ΠΊΠΎΠ΄Π° ΠΈ Ρ‚. Π”.

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

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

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

int a = 1 int b = a/0;

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

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

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

ИМΠ₯О, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ссылок, рСсурсов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ прСдставлСниС ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ компиляции, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ слоТная Ρ‚Π΅ΠΌΠ°. Π£ мСня Π΅ΡΡ‚ΡŒ список Π½ΠΈΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· этих Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ / ссылок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ.

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

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

ВрСмя выполнСния, врСмя выполнСния ΠΈΠ»ΠΈ врСмя выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ:

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, процСсс выполнСния инструкций ΠΎΠ΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΎ врСмя Ρ„Π°Π·Ρ‹ выполнСния

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции Бписок компиляторов https://en.wikipedia.org/wiki/List_of_compilersΠ§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ врСмя компиляции

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

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

3.2 Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими 3 Π²Π΅Ρ‰Π°ΠΌΠΈ: компиляция ΠΏΡ€ΠΎΡ‚ΠΈΠ² сборки ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния

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

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

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

ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ класс RuntimeVsCompileTime <

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ структуру компиляции ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π½Π΅ ясна, Ссли Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» использован.

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

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

К соТалСнию, я Π½Π΅ знаю Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ссылок Π½Π° это. CLTL2 Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± этом, Π½ΠΎ это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ для изучСния.

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

Аннотации Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ @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 Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² исправлСнии ошибок.

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

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

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