Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ программирования: статичСская ΠΈ динамичСская типизация

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация

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

НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, я знаю, Ρ‡Ρ‚ΠΎ это всё Π·Π²ΡƒΡ‡ΠΈΡ‚ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎ, поэтому ΠΌΡ‹ Π½Π°Ρ‡Π½Ρ‘ΠΌ с основ. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Β«ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° соотвСтствия Ρ‚ΠΈΠΏΠΎΠ²Β» ΠΈ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚ΠΈΠΏ?

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

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

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° соотвСтствия Ρ‚ΠΈΠΏΠΎΠ²

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

Π₯отя Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках ΠΈ строки, ΠΈ числа ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ +, это Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам Ρ‚ΠΈΠΏΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° соотвСтствия Ρ‚ΠΈΠΏΠΎΠ², рассмотрим Π΄Π²Π° основных Π²ΠΈΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ.

БтатичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ²

Π―Π·Ρ‹ΠΊ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Ссли Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ извСстСн Π²ΠΎ врСмя компиляции, Π° Π½Π΅ выполнСния. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΡ… языков ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ada, C, C++, C#, JADE, Java, Fortran, Haskell, ML, Pascal, ΠΈ Scala.

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

ДинамичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ²

ДинамичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² β€” это процСсс подтвСрТдСния типобСзопасности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎ врСмя Π΅Ρ‘ выполнСния. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков ΡΠ²Π»ΡΡŽΡ‚ΡΡ Groovy, JavaScript, Lisp, Lua, Objective-C, PHP, Prolog, Python, Ruby, Smalltalk ΠΈ Tcl.

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

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

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

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ заблуТдСния

ΠœΠΈΡ„ 1: статичСская / динамичСская типизация == сильная / слабая типизация

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ являСтся ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ всС статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки ΡΠ²Π»ΡΡŽΡ‚ΡΡ сильно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, Π° динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ β€” слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎ, ΠΈ Π²ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

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

ΠœΡ‹ часто ассоциируСм статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Java ΠΈ C#, с сильно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ (ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… задаётся явно ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” ΠΊΠ°ΠΊ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° Java:

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ruby, Python ΠΈ JavaScript (всС ΠΎΠ½ΠΈ ΠΎΠ±Π»Π°Π΄aΡŽΡ‚ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ) Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ сильно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, хотя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ объявлСнии. Рассмотрим Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ написанный Π½Π° Ruby:

Оба языка ΡΠ²Π»ΡΡŽΡ‚ΡΡ сильно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². Π’Π°ΠΊΠΈΠ΅ языки, ΠΊΠ°ΠΊ Ruby, Python ΠΈ JavaScript Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ явного опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ·-Π·Π° Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ² β€” способности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² зависимости ΠΎΡ‚ Π΅Ρ‘ значСния. Π’Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ свойство языка, ΠΈ Π½Π΅ относится ΠΊ систСмам Ρ‚ΠΈΠΏΠΎΠ².

Π‘Π»Π°Π±ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык β€” это язык, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ привязаны ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…; Ρƒ Π½ΠΈΡ… всё Π΅Ρ‰Ρ‘ Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ, Π½ΠΎ ограничСния типобСзопасности Π³ΠΎΡ€Π°Π·Π΄ΠΎ слабСС. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π½Π° PHP:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PHP ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ошибки Π² этом ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ‚. Аналогично ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π½Π΅ всС слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки ΡΠ²Π»ΡΡŽΡ‚ΡΡ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ: PHP β€” это динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык, Π½ΠΎ Π²ΠΎΡ‚ C β€” Ρ‚ΠΎΠΆΠ΅ язык со слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ β€” воистину статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½.

Π₯отя статичСская / динамичСская ΠΈ сильная / слабая систСмы Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ, ΠΎΠ½ΠΈ ΠΎΠ±Π΅ связаны с Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠŸΡ€ΠΎΡ‰Π΅ всСго это Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ: пСрвая систСма Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° провСряСтся Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Π° вторая β€” ΠΊΠ°ΠΊ.

ΠœΠΈΡ„ 2: статичСская / динамичСская типизация == ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ / ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки

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

Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ языка, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ языкС ΠΊΠ°ΠΊ ΠΎ Ρ†Π΅Π»ΠΎΠΌ. НапримСр, Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Java Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ β€” ΠΎΠ½Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ случая, ΠΊΠΎΠ³Π΄Π° язык являСтся ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом случаС ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка. Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, любой язык ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ. Бамая популярная рСализация языка Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ JVM β€” Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ ΠΈΠ½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ.

Если это всё Π΅Ρ‰Ρ‘ нСпонятно, ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… статСй этого Ρ†ΠΈΠΊΠ»Π°.

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

Π― знаю, Ρ‡Ρ‚ΠΎ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ β€” Π½ΠΎ я Π²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΠ»ΠΈΡΡŒ. Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» вынСсти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ / ΡΠ»Π°Π±ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π½ΠΎ это Π½Π΅ такая ваТная Ρ‚Π΅ΠΌΠ°; ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΈΠΏΠΎΠ².

НСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° вопрос «какая типизация Π»ΡƒΡ‡ΡˆΠ΅?Β» β€” Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅ΡΡ‚ΡŒ свои прСимущСства ΠΈ нСдостатки. НСкоторыС языки β€” Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Perl ΠΈ C# β€” Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ статичСской ΠΈ динамичСской систСмами ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². ПониманиС этих систСм ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ошибок, Π° Ρ‚Π°ΠΊΠΆΠ΅ упростит Π±ΠΎΡ€ΡŒΠ±Ρƒ с Π½ΠΈΠΌΠΈ.

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

Π›ΠΈΠΊΠ±Π΅Π· ΠΏΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² языках программирования

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ содСрТит Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‚Π΅Ρ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ Π·Π»ΠΎΠΌ, Lisp β€” бСстиповым языком, Π° C β€” языком со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π’ ΠΏΠΎΠ»Π½ΠΎΠΉ вСрсии находится ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС всСх Π²ΠΈΠ΄ΠΎΠ² Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°, ссылками Π½Π° популярныС языки программирования ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сначала ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ТСлания ΠΈ ΠΏΠΎΠ»Π½ΡƒΡŽ.

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ вСрсия

Π―Π·Ρ‹ΠΊΠΈ программирования ΠΏΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ принято Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… лагСря β€” Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ (бСстиповыС). К ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ относятся C, Python, Scala, PHP ΠΈ Lua, Π° ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ β€” язык ассСмблСра, Forth ΠΈ Brainfuck.

Π’Π°ΠΊ ΠΊΠ°ΠΊ «бСстиповая типизация» ΠΏΠΎ своСй сути β€” проста ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±ΠΊΠ°, дальшС ΠΎΠ½Π° Π½ΠΈ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ Π½Π΅ дСлится. А Π²ΠΎΡ‚ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΅Ρ‰Π΅ Π½Π° нСсколько ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:
БтатичСская: C, Java, C#;
ДинамичСская: Python, JavaScript, Ruby.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:
Бильная: Java, Python, Haskell, Lisp;
Блабая: C, JavaScript, Visual Basic, PHP.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:
Явная: C++, D, C#
НСявная: PHP, Lua, JavaScript

Π’Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС эти ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ язык C ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ»Π°Π±ΡƒΡŽ ΡΠ²Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Π° язык Python β€” Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ Π½Π΅ΡΠ²Π½ΡƒΡŽ.

Π’Π΅ΠΌ-Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ языков со статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π₯отя забСгая Π²ΠΏΠ΅Ρ€Π΅Π΄ скаТу, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ я Π²Ρ€Ρƒ β€” ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, Π½ΠΎ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ вСрсия

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

БСстиповая типизация

Π’ бСстиповых языках программирования β€” всС сущности ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ просто ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ Π±ΠΈΡ‚, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

БСстиповая типизация ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ присуща Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ (язык ассСмблСра, Forth) ΠΈ эзотСричСским (Brainfuck, HQ9, Piet) языкам. Однако ΠΈ Ρƒ Π½Π΅Π΅, наряду с нСдостатками, Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСимущСства.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°
НСдостатки
Бильная бСзтиповая типизация?

Π”Π°, Ρ‚Π°ΠΊΠΎΠ΅ сущСствуСт. НапримСр Π² языкС ассСмблСра (для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Ρ…86/Ρ…86-64, Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π΅ знаю) нСльзя Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² рСгистр cx (16 Π±ΠΈΡ‚) Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· рСгистра rax (64 Π±ΠΈΡ‚Π°).

mov cx, eax ; ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ассСмблирования

Π’Π°ΠΊ получаСтся, Ρ‡Ρ‚ΠΎ Π² ассСмлСрС всС-Ρ‚Π°ΠΊΠΈ Π΅ΡΡ‚ΡŒ типизация? Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ этих ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ нСдостаточно. А Π’Π°ΡˆΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Вас.

БтатичСская ΠΈ динамичСская Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация

Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ (static) Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‚ динамичСской (dynamic) Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° этапС компиляции, Π° Π½Π΅ этапС выполнСния.

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ
ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ
ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

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

Как ΠΆΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΅Π΅ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ? РСшим Π΅Π΅ Π½Π° 3-Π΅Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… языках: ΠΎΠ΄Π½ΠΎΠΌ с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π΄Π²ΡƒΡ… со статичСской.

Алгоритм поиска я Π²ΠΎΠ·ΡŒΠΌΡƒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… β€” ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€. Ѐункция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ искомый элСмСнт, сам массив (ΠΈΠ»ΠΈ список) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ индСкс элСмСнта, ΠΈΠ»ΠΈ, Ссли элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ β€” (-1).

ДинамичСскоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (Python):

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, всС просто ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ список ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ…ΠΎΡ‚ΡŒ числа, Ρ…ΠΎΡ‚ΡŒ списки, Ρ…ΠΎΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ массивы Π½Π΅Ρ‚. ΠžΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΉΠ΄Π΅ΠΌ дальшС β€” Ρ€Π΅ΡˆΠΈΠΌ эту-ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° Π‘ΠΈ!

БтатичСскоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (Π‘ΠΈ):

Ну, каТдая функция Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΠ· Python, Π½ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΡ… Ρ‚Ρ€ΠΈ? НСуТСли статичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Π»ΠΎ?

И Π΄Π°, ΠΈ Π½Π΅Ρ‚. Π•ΡΡ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊ программирования, ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ сСйчас рассмотрим. Она называСтся ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ язык C++ Π΅Π΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ:

БтатичСскоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, C++):

Π₯ΠΎΡ€ΠΎΡˆΠΎ! Π­Ρ‚ΠΎ выглядит Π½Π΅ сильно слоТнСС Ρ‡Π΅ΠΌ вСрсия Π½Π° Python ΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для всСх массивов, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для 3-Π΅Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ!

Π­Ρ‚Π° вСрсия ΠΏΠΎΡ…ΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ β€” ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠ»ΡŽΡΡ‹ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ»ΡŽΡΡ‹ динамичСской.

Π—Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Ρ‡Ρ‚ΠΎ это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ красивСС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² языкС Haskell). Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ программирования Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΡƒΠΆΠ΅), ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ) ΠΈΠ»ΠΈ макросы.

Π‘Ρ‚Π°Ρ‚ΠΈΠΊΠ° Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅

Π’Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ статичСскиС языки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Бильная ΠΈ слабая Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация

Π―Π·Ρ‹ΠΊΠΈ с сильной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ сущности Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² выраТСниях ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… автоматичСских ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. Π’Π°ΠΊΠΆΠ΅ ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «языки с строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉΒ». Английский Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для этого β€” strong typing.

Π‘Π»Π°Π±ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ всячСски ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ программист смСшивал Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ компилятор сам ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ всС ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. Π’Π°ΠΊΠΆΠ΅ ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «языки с нСстрогой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉΒ». Английский Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для этого β€” weak typing.

Π‘Π»Π°Π±ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ часто ΠΏΡƒΡ‚Π°ΡŽΡ‚ с динамичСской, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎ. ДинамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ слабо ΠΈ сильно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½.

Однако ΠΌΠ°Π»ΠΎ, ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строгости Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Часто Π·Π°ΡΠ²Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ссли язык статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚ΠΎ Π’Ρ‹ смоТСтС ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ мноТСство ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок ΠΏΡ€ΠΈ компиляции. Они Π’Π°ΠΌ Π²Ρ€ΡƒΡ‚!

Π―Π·Ρ‹ΠΊ ΠΏΡ€ΠΈ этом Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. И ΠΏΡ€Π°Π²Π΄Π°, Ссли компилятор вмСсто сообщСния ΠΎΠ± ошибкС Π±ΡƒΠ΄Π΅Ρ‚ просто ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΡ‚ΡŒ строку ΠΊ числу, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅, Π²Ρ‹Ρ‡Ρ‚Π΅Ρ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΊΠ°ΠΊΠΎΠΉ Π½Π°ΠΌ Ρ‚ΠΎΠ»ΠΊ, Ρ‡Ρ‚ΠΎ всС Β«ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΒ» Ρ‚ΠΈΠΏΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ Π½Π° этапС компиляции? ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ β€” слабая статичСская типизация Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ сильная динамичСская! (Ну, это ΠΌΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅)

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ-ΠΆΠ΅ Ρƒ слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚ плюсов? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ выглядит, ΠΎΠ΄Π½Π°ΠΊΠΎ нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я ярый сторонник сильной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρƒ слабой Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ прСимущСства.

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅?

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° сильной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ
ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π²Π°.

НСявноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², Π² ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Ρ… ситуациях ΠΈ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…

Ух… Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ я Π±ΡƒΠ΄Ρƒ дальшС ΡΠΎΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄ΠΎ Β«ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β» Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚ однозначная ситуация ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…?

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

ΠŸΠΎΡ‚Π΅Ρ€Ρ Π΄Π°Π½Π½Ρ‹Ρ… это Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅. Если ΠΌΡ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ вСщСствСнноС число 3.5 Π² Ρ†Π΅Π»ΠΎΠ΅ β€” ΠΌΡ‹ потСряСм Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π° самом Π΄Π΅Π»Π΅ эта опСрация Π΅Ρ‰Π΅ ΠΈ нСоднозначная β€” ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅? Π’ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ сторону? Π’ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ? ΠžΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части?).

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Ρ… ситуациях ΠΈ прСобразования с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… β€” это ΠΎΡ‡Π΅Π½ΡŒ, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ. НичСго Ρ…ΡƒΠΆΠ΅ этого Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅Ρ‚.

Если Π²Ρ‹ ΠΌΠ½Π΅ Π½Π΅ Π²Π΅Ρ€ΠΈΡ‚Π΅, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ язык PL/I ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ просто ΠΏΠΎΠΈΡ‰ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ. Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° прСобразования ΠΌΠ΅ΠΆΠ΄Ρƒ Π’Π‘Π•ΠœΠ˜ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…! Π­Ρ‚ΠΎ просто Π°Π΄!

Π›Π°Π΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ вспомним ΠΏΡ€ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅. Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ языки? Π”Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Pascal Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ число Π² вСщСствСнноС, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π΅ΡΡ‚ΡŒ Π² C#, Groovy ΠΈ Common Lisp.

Π›Π°Π΄Π½ΠΎ, я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ плюсов слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² сильном языкС. И Π΄Π°, ΠΎΠ½ Π΅ΡΡ‚ΡŒ ΠΈ называСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ конструкторов.

Π― поясню Π΅Π³ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ языка Haskell.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ конструкторы появились Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ наблюдСния, Ρ‡Ρ‚ΠΎ Ρ‡Π°Ρ‰Π΅ всСго бСзопасныС нСявныС прСобразования Π½ΡƒΠΆΠ½Ρ‹ ΠΏΡ€ΠΈ использовании числовых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ².

И это сдСлано Π² Haskell, благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρƒ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° 1 Π½Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎ Π½ΠΈ Ρ†Π΅Π»ΠΎΠ΅, Π½ΠΈ вСщСствСнноС, Π½ΠΈ комплСксноС. Π­Ρ‚ΠΎ ΠΆΠ΅ просто число!

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ спасаСт этот ΠΏΡ€ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с числовыми Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ, Π° это лишь Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΠ° айсбСрга.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ балансированиС Π½Π° Π³Ρ€Π°Π½ΠΈ, ΠΌΠ΅ΠΆΠ΄Ρƒ сильной ΠΈ слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Но ΠΏΠΎΠΊΠ° ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ баланс Π½Π΅ Π΄Π΅Ρ€ΠΆΠΈΡ‚ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ язык, поэтому я большС склоняюсь ΠΊ сильно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языкам (Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Haskell, Java, C#, Python), Π° Π½Π΅ ΠΊ слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ (Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ C, JavaScript, Lua, PHP).

Π›Π°Π΄Π½ΠΎ, ΠΏΠΎΠΉΠ΄Π΅ΠΌ дальшС?

Явная ΠΈ нСявная Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация

Π―Π·Ρ‹ΠΊ с явной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ программист Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ всСх ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚. Английский Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для этого β€” explicit typing.

Π―Π·Ρ‹ΠΊ с нСявной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π’Π°ΠΌ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ² Π½Π° компилятор ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Английски Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для этого β€” implicit typing.

По-Π½Π°Ρ‡Π°Π»Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ нСявная типизация Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Π° динамичСской, Π° явная β€” статичСской, Π½ΠΎ дальшС ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ.

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΏΠ»ΡŽΡΡ‹ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΈ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΈ Π΅ΡΡ‚ΡŒ Π»ΠΈ языки с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΎΠ±ΠΎΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²?

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° явной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ
ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° нСявной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ
Явная типизация ΠΏΠΎ-Π²Ρ‹Π±ΠΎΡ€Ρƒ

Π•ΡΡ‚ΡŒ языки, с нСявной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ нСобходимости. Настоящий Ρ‚ΠΈΠΏ выраТСния транслятор Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ автоматичСски. Один ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… языков β€” Haskell, Π΄Π°Π²Π°ΠΉΡ‚Π΅ я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для наглядности:

* Бпасибо int_index Π·Π° Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ошибки.

Π₯ΠΌ. Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, это ΠΎΡ‡Π΅Π½ΡŒ красиво ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ. Π—Π°ΠΏΠΈΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго 18 символов Π½Π° ΠΎΠ΄Π½ΠΎΠΉ строчкС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹!

Однако автоматичСский Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² довольно слоТная Π²Π΅Ρ‰ΡŒ, ΠΈ Π΄Π°ΠΆΠ΅ Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΊΡ€ΡƒΡ‚ΠΎΠΌ языкС ΠΊΠ°ΠΊ Haskell, ΠΎΠ½ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ справляСтся. (ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ½ΠΎΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°)

Π•ΡΡ‚ΡŒ Π»ΠΈ языки с явной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ нСявной ΠΏΠΎ-нСобходимости? Кон
Π΅Ρ‡Π½ΠΎ.

НСявная типизация ΠΏΠΎ-Π²Ρ‹Π±ΠΎΡ€Ρƒ

Π’ Π½ΠΎΠ²ΠΎΠΌ стандартС языка C++, Π½Π°Π·Π²Π°Π½Π½ΠΎΠΌ C++11 (Ρ€Π°Π½Π΅Π΅ назывался C++0x), Π±Ρ‹Π»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово auto, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ компилятор вывСсти Ρ‚ΠΈΠΏ, исходя ΠΈΠ· контСкста:

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

Π£Ρ… Ρ‚Ρ‹! Π’ΠΎΡ‚ это сокращСниС. Π›Π°Π΄Π½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄ΡƒΡ…Π΅ Haskell, Π³Π΄Π΅ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²?

И ΠΎΠΏΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π΄Π°, благодаря ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову decltype Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с auto:

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ эта Ρ„ΠΎΡ€ΠΌΠ° записи Π½Π΅ сильно Ρ…ΠΎΡ€ΠΎΡˆΠ°, Π½ΠΎ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (templates / generics) нСявная типизация ΠΈΠ»ΠΈ автоматичСский Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² творят чудСса.

НСкоторыС языки программирования ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ классификации

Π― ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ нСбольшой список ΠΈΠ· популярных языков ΠΈ Π½Π°ΠΏΠΈΡˆΡƒ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ β€œΡ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΉβ€.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ я Π³Π΄Π΅-Ρ‚ΠΎ ошибся, особСнно с CL, PHP ΠΈ Obj-C, Ссли ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ языку Ρƒ Вас Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ β€” Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях.

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

ОкСй. Π£ΠΆΠ΅ скоро Π±ΡƒΠ΄Π΅Ρ‚ свСтло ΠΈ я Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ большС Π½Π΅Ρ‡Π΅Π³ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ. Ой ΠΊΠ°ΠΊ? Π’Π΅ΠΌΠ° бСздонная? ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ нСдосказано? ΠŸΡ€ΠΎΡˆΡƒ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ.

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

БтатичСская ΠΈ динамичСская типизация

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация

Π’ΠΈΠΏ β€” это коллСкция Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π¦Π΅Π»ΠΎΠ΅ число ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ значСниями 0, 1, 2, 3 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π‘ΡƒΠ»Π΅Π²ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ истиной ΠΈΠ»ΠΈ лоТью. МоТно ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ свой Ρ‚ΠΈΠΏ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΈΠΏ «Π”Π°ΠΉΠŸΡΡ‚ΡŒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ значСния «Π΄Π°ΠΉ» ΠΈ «5», ΠΈ большС Π½ΠΈΡ‡Π΅Π³ΠΎ. Π­Ρ‚ΠΎ Π½Π΅ строка ΠΈ Π½Π΅ число, это Π½ΠΎΠ²Ρ‹ΠΉ, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.

ДинамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ значСния Ρ‚ΠΈΠΏΠ°ΠΌΠΈ: язык Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ 1 это integer, 2 это integer, Π½ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ пСрСмСнная x всСгда содСрТит integer.

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

БтатичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки

БтатичСскиС языки ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²ΠΎ врСмя компиляции, Π΅Ρ‰Π΅ Π΄ΠΎ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π›ΡŽΠ±Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΈΠΏΡ‹ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° языка, считаСтся Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ. НапримСр, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ статичСских языков ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ «a» + 1 (язык Π‘ΠΈ β€” это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π°). ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ «a» β€” это строка, Π° 1 β€” это Ρ†Π΅Π»ΠΎΠ΅ число, ΠΈ Ρ‡Ρ‚ΠΎ + Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° лСвая ΠΈ правая Ρ‡Π°ΡΡ‚ΡŒ относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ сущСствуСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. КаТдоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС относится ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π΅Π· запуска ΠΊΠΎΠ΄Π°.

Π­Ρ‚ΠΎ Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ «ΡΡ‚Π°Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ» систСмы Ρ‚ΠΈΠΏΠΎΠ². БистСма Ρ‚ΠΈΠΏΠΎΠ² Π² Haskell Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Π° своСй ΡΡ‚Π°Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, ΡΡ‚Ρ€ΠΎΠ³ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΈ Π² ΠΏΠΎ всСм этим Ρ„Ρ€ΠΎΠ½Ρ‚Π°ΠΌ Haskell ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ Java.

ДинамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки

ДинамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ, Π½ΠΎ ΠΈ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π΅Π³ΠΎ сами. Π’ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… нСизвСстны Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ значСния ΠΏΡ€ΠΈ запускС. НапримСр, функция Π² Python

ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ†Π΅Π»Ρ‹Ρ… числа, ΡΠΊΠ»Π΅ΠΈΠ²Π°Ρ‚ΡŒ строки, списки ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΈ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ происходит, ΠΏΠΎΠΊΠ° Π½Π΅ запустим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ с двумя строками, ΠΈ с двумя числами Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС x ΠΈ y Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ говорят, Ρ‡Ρ‚ΠΎ значСния Π² динамичСских языках ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΠΎΠΌ, Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Π½Π΅Ρ‚. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ integer, Π½ΠΎ x ΠΈ y ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ динамичСских языков Π²Ρ‹Π΄Π°Π΄ΡƒΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ (JavaScript β€” извСстноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅; ΠΎΠ½ пытаСтся Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для любого выраТСния, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла). ΠŸΡ€ΠΈ использовании динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков Π΄Π°ΠΆΠ΅ простая ошибка Π²ΠΈΠ΄Π° «a» + 1 ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² Π±ΠΎΠ΅Π²ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. БтатичСскиС языки ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ ошибки, Π½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ прСдотвращСния зависит ΠΎΡ‚ мощности систСмы Ρ‚ΠΈΠΏΠΎΠ².

Бильная ΠΈ слабая типизация

ΠŸΠΎΠ½ΡΡ‚ΠΈΡ «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΈ «ΡΠ»Π°Π±Ρ‹ΠΉ» β€” ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Π΅. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… использования:

Иногда «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «ΡΡ‚атичСский».
Π’ΡƒΡ‚ всС просто, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «ΡΡ‚атичСский», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΅Π³ΠΎ.

Иногда «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ строгиС ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² языкС.

Π”Π°Π²Π°ΠΉΡ‚Π΅ остановимся. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ языки ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ этим опрСдСлСниям. Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Haskell ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΏΠΎ всСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅.

ЯзыкБтатичСский?НСявныС прСобразования?Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°?БСзопасный для памяти?
CΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΠšΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠ‘Π»Π°Π±Ρ‹ΠΉΠ‘Π»Π°Π±Ρ‹ΠΉ
JavaΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΠšΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ
HaskellΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ
PythonΠ‘Π»Π°Π±Ρ‹ΠΉΠšΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠ‘Π»Π°Π±Ρ‹ΠΉΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ
JavaScriptΠ‘Π»Π°Π±Ρ‹ΠΉΠ‘Π»Π°Π±Ρ‹ΠΉΠ‘Π»Π°Π±Ρ‹ΠΉΠ‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ

(«ΠšΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ» Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ «ΠΠ΅ΡΠ²Π½Ρ‹Π΅ прСобразования» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈ слабым зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ прСобразования ΠΌΡ‹ считаСм ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌΠΈ).

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΈ «ΡΠ»Π°Π±Ρ‹ΠΉ» относятся ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π²Ρ‹ΡˆΠ΅, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… здСсь ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ. Π’Π΅ΡΡŒ этот бСспорядок Π΄Π΅Π»Π°Π΅Ρ‚ слова «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΈ «ΡΠ»Π°Π±Ρ‹ΠΉ» практичСски бСссмыслСнными. Когда хочСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ имССтся Π²Π²ΠΈΠ΄Ρƒ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ «JavaScript Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° складываСтся строка с числом, Π½ΠΎ Python Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ». Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ свои силы Π½Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΊ соглашСнию ΠΎ мноТСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ слова «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ». Или, Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅: ΠΏΡ€ΠΈΠ΄Π΅ΠΌ ΠΊ Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠΌΡƒ нСпониманию ΠΈΠ·-Π·Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.

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

Бильная типизация: БистСма Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я люблю ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ½Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ.

Блабая типизация: БистСма Ρ‚ΠΈΠΏΠΎΠ², которая бСспокоит мСня ΠΈΠ»ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ½Π΅ Π½Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ.

ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½Π°Ρ типизация (gradual typing)

ΠΠ΅ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ β€” это Π·Π°Π΄Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ eval() Ρ‚ΠΈΠΏ Any, Ρ‡Ρ‚ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Object Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках программирования ΠΈΠ»ΠΈ интСрфСйс interface <> Π² Go: это Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ удовлСтворяСт любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ ΠΈΠ»ΠΈ постСпСнная типизация (gradual typing): ΠΎΠ½ΠΈ динамичСскиС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ статичСскиС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Π’ Python Π½Π΅Π΄Π°Π²Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹; TypeScript β€” это надстройка Π½Π°Π΄ JavaScript, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹; Flow ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ статичСский Π°Π½Π°Π»ΠΈΠ· старого Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° JavaScript.

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ статичСских языков ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ быстрый ΠΊΠΎΠ΄, Ρ‡Π΅ΠΌ компиляторы динамичСских. НапримСр, Ссли компилятор Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция add ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ†Π΅Π»Ρ‹Π΅ числа, Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ADD Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора. ДинамичСский язык Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ, выбирая ΠΎΠ΄ΠΈΠ½ ΠΈΠ· мноТСства Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ add Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² (складываСм integers ΠΈΠ»ΠΈ floats ΠΈΠ»ΠΈ склСиваСм строки ΠΈΠ»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, списки?) Или Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка ΠΈ Ρ‚ΠΈΠΏΡ‹ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ. ВсС эти ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ врСмя. Π’ динамичСских языках ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Ρ€ΡŽΠΊΠΈ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ JIT-компиляция (just-in-time), Π³Π΄Π΅ ΠΊΠΎΠ΄ пСрСкомпилируСтся ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ послС получСния всСй Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Однако, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ динамичСский язык Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ с Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ написанным статичСским ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° языкС Π²Ρ€ΠΎΠ΄Π΅ Rust.

АргумСнты Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ статичСских ΠΈ динамичСских Ρ‚ΠΈΠΏΠΎΠ²

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΊΠΈ статичСской систСмы Ρ‚ΠΈΠΏΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Π΅Π· систСмы Ρ‚ΠΈΠΏΠΎΠ² простыС ошибки ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, ΠΏΡ€Π°Π²Π΄Π°. Π›ΡŽΠ±ΠΎΠΉ, ΠΊΡ‚ΠΎ использовал динамичСский язык, испытал это Π½Π° сСбС.

ΠŸΠ»ΡŽΡΡ‹ ΠΈ минусы статичСских ΠΈ динамичСских систСм Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ всС Π΅Ρ‰Π΅ ΠΏΠ»ΠΎΡ…ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ зависят ΠΎΡ‚ языка ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ уровнями бСзопасности, Π½ΠΎ Python ΠΈ JavaScript ΠΎΠ±Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ языками.

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

Haskell ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ integer ΠΈ float Π±Π΅Π· явного прСобразования ΠΏΠ΅Ρ€Π΅Π΄ этим. Π‘ΠΈ ΠΈ Haskell ΠΎΠ±Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π΅ смотря Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ большиС отличия.

Π•ΡΡ‚ΡŒ мноТСство Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ динамичСских ΠΈ статичСских языков. Π›ΡŽΠ±ΠΎΠ΅ Π±Π΅Π·ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‡Π½ΠΎΠ΅ высказываниС Π²ΠΈΠ΄Π° «ΡΡ‚атичСскиС языки Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ динамичСскиС, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ касаСтся Π₯» β€” это ΠΏΠΎΡ‡Ρ‚ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π΅Ρ€ΡƒΠ½Π΄Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°Π²Π΄ΠΎΠΉ Π² случаС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… языков, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ «Haskell Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Python ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ касаСтся Π₯».

Π Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ статичСских систСм Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° Π΄Π²Π° Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков: Go ΠΈ Haskell. Π’ систСмС Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Go Π½Π΅Ρ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΈΠΏΠΎΠ² с «ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ» ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой Ρ‚ΠΈΠΏ для списков MyList, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ Π΄Π°Π½Π½Ρ‹Π΅. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ MyList Ρ†Π΅Π»Ρ‹Ρ… чисСл, MyList строк ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Π½Π΅ мСняя исходный ΠΊΠΎΠ΄ MyList. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ: Ссли Π΅ΡΡ‚ΡŒ MyList Ρ†Π΅Π»Ρ‹Ρ… чисСл, ΠΈ ΠΌΡ‹ случайно добавляСм Ρ‚ΡƒΠ΄Π° строку, Ρ‚ΠΎ компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Go ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» спроСктирован Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π²Ρ€ΠΎΠ΄Π΅ MyList. Π›ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ MyList «ΠΏΡƒΡΡ‚Ρ‹Ρ… интСрфСйсов»: MyList ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ компилятор просто Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΈΡ… Ρ‚ΠΈΠΏ. Когда ΠΌΡ‹ достаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· MyList, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ компилятору ΠΈΡ… Ρ‚ΠΈΠΏ. Если ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ «Π― Π΄ΠΎΡΡ‚Π°ΡŽ строку», Π½ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” это число, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ошибка исполнСния, ΠΊΠ°ΠΊ Π² случаС с динамичСскими языками.

Π’ Go Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅Ρ‚ мноТСства Π΄Ρ€ΡƒΠ³ΠΈΡ… возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² соврСмСнных статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах 1970-Ρ… Π³ΠΎΠ΄ΠΎΠ²). Π£ создатСлСй Go Π±Ρ‹Π»ΠΈ свои ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для этих Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ людСй со стороны ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π²ΡƒΡ‡Π°Ρ‚ΡŒ Ρ€Π΅Π·ΠΊΠΎ.

Haskell ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΈΠ΄Π΅ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. НапримСр, Num a => MyList a ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «MyList Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ чисСл». Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ список integer’ΠΎΠ², float’ΠΎΠ² ΠΈΠ»ΠΈ дСсятичных чисСл с фиксированной Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, Π½ΠΎ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ списком строк, Ρ‡Ρ‚ΠΎ провСряСтся ΠΏΡ€ΠΈ компиляции.

Если Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚ΠΈΠΏΠ΅ Π½Π΅Ρ‚ IO, Ρ‚ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, измСняСт Π»ΠΈ функция Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, просто взглянув Π½Π° Π΅Π΅ Ρ‚ΠΈΠΏ. НикакиС динамичСскиС ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ статичСскиС языки Π½Π΅ способы Π½Π° Ρ‚Π°ΠΊΠΎΠ΅. Π­Ρ‚ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языков с самой ΠΌΠΎΡ‰Π½ΠΎΠΉ систСмой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

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

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ эту ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ с Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ способСн Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ идСю MyList, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ «Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΈ ΠΎΠ½ΠΈ ΠΎΠ±Π° числСнныС ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ которая Π΄Π΅Π»Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄».

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

Go ΠΈ Haskell Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ языки, Ρ‡Ρ‚ΠΎ ΠΈΡ… Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ класс «ΡΡ‚атичСских языков» ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½Π΅ смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Если ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ практичСскиС прСимущСства бСзопасности, Ρ‚ΠΎ Go Π±Π»ΠΈΠΆΠ΅ ΠΊ динамичСских языкам, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΊ Haskell’Ρƒ.

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

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ отличия Π² возмоТностях систСм Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

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

Π’ Go ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ «Ρ„ункция add ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° integer’Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ integer»:

Π’ Haskell ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ «Ρ„ункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любой числСнный Ρ‚ΠΈΠΏ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°»:

Π’ Idris ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ «Ρ„ункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° integer’Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ integer, Π½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ мСньшС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°»:

Π’ Haskell Π½Π΅Ρ‚ эквивалСнта Ρ‚Π°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с Idris Π²Ρ‹ΡˆΠ΅, Π° Π² Go Π½Π΅Ρ‚ эквивалСнта Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ с Haskell, Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ с Idris. Π’ ΠΈΡ‚ΠΎΠ³Π΅, Idris ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ мноТСство Π±Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ смоТСт ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Haskell, Π° Haskell смоТСт ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ мноТСство Π±Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ Go. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности систСмы Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ΄Π΅Π»Π°ΡŽΡ‚ язык Π±ΠΎΠ»Π΅Π΅ слоТным.

БистСмы Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… статичСских языков

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

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

Π“Ρ€ΡƒΠΏΠΏΠ° Π΄Π²Π° (Java ΠΈ C#) β€” это мэйнстримовыС языки, Π·Ρ€Π΅Π»Ρ‹Π΅ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅.

Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‚Ρ€ΠΈ находится Π½Π° ΠΏΠΎΡ€ΠΎΠ³Π΅ Π²Ρ…ΠΎΠ΄Π° Π² мэйнстрим, с большой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ со стороны Mozilla (Rust) ΠΈ Apple (Swift).

Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ (Idris and Agda) Π΄Π°Π»Π΅ΠΊΠΈ ΠΎΡ‚ мэйнстрима, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. Π―Π·Ρ‹ΠΊΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Ρ€ΠΈ Π±Ρ‹Π»ΠΈ Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡ‚ мэйнстрима Π΅Ρ‰Π΅ Π΄Π΅ΡΡΡ‚ΡŒ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄.

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

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

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