Π Π°Π·Π½ΠΎΠ΅

Бтрогая типизация это: Π›ΠΈΠΊΠ±Π΅Π· ΠΏΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² языках программирования / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ типизация

Если у языка сильная типизация (Π΅Ρ‘Β Π΅Ρ‰Ρ‘ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ строгой), это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Β Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ строго слСдовали ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с типами: Ссли Π²Ρ‹Β ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число, Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π΄ΠΎΠ±Ρ€Ρ‹ с ним Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с цСлым числом.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’Β JavaScript, языкС со слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ строку с числом, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π˜Β ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку Β«21Β».

А в Java Ρ‚Π°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСльзя: появится ошибка.

БтатичСская типизация Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ на этапС компиляции. Π’ΠΎΒ Π΅ΡΡ‚ΡŒ ошибки Π²Β Ρ‚ΠΈΠΏΠ°Ρ… Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄Π½Ρ‹ Π΅Ρ‰Ρ‘ Π΄ΠΎΒ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запустится.

В языках с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ во врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Π°ΠΊ, в динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС ΡƒΒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΒ Ρ‚ΠΎΠΉΒ ΠΆΠ΅Β ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚Β Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π²Β Ρ€Π°Π·Π½Ρ‹Ρ… частях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, а в статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ, Ссли Π²Ρ‹Β Π·Π°Π΄Π°Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏ string, ΡƒΒ Π½Π΅Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ string.

НапримСр, Π²Β Python (динамичСская типизация) ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π°Β ΠΏΠΎΡ‚ΠΎΠΌ Ρ‚Π°ΠΊ:

Π˜Β ΡΠ·Ρ‹ΠΊ Π½Π΅Β Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Ρ€Π°ΠΆΠ°Ρ‚ΡŒ. Π’Β Java (статичСская типизация) Ρ‚Π°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСльзя.

Π•Ρ‰Ρ‘ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ дСлят Π½Π°Β ΡΠ²Π½ΡƒΡŽ ΠΈΒ Π½Π΅ΡΠ²Π½ΡƒΡŽ. Когда типизация нСявная, Ρ‚ΠΈΠΏ опрСдСляСтся сам Π²Β ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° вы записываСтС Π²Β ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

НапримСр, Ссли Π²Β Python Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠžΠ½Β ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вы записали Π²Β ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ b Ρ†Π΅Π»ΠΎΠ΅ число, ΠΈΒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ b ΠΊΠ°ΠΊ integer (int).

Явная типизация Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ написан. НапримСр, в Б пСрСмСнная записываСтся Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π‘Π°ΠΌΠΎ по сСбС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΡΠ²Π½ΡƒΡŽ ΠΈΒ Π½Π΅ΡΠ²Π½ΡƒΡŽ Π½Π΅Β ΡΡ‚ΠΎΠ»ΡŒ Π²Π°ΠΆΠ½ΠΎ: в статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках ΠΎΠ½Π° ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда явная, а в динамичСски — нСявная.

Бтрогая типизация — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Бтрогая типизация?

Бтрогая типизация — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² языках программирования.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ условия

Бтрогая типизация ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… условий:

  1. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… (пСрСмСнная, константа, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π² языкС всСгда ΠΈΠΌΠ΅Π΅Ρ‚ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ фиксируСтся Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (статичСская типизация) ΠΈΠ»ΠΈ опрСдСляСтся Π²ΠΎ врСмя выполнСния (динамичСская типизация).
  2. ДопускаСтся присваиваниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ строго Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΈ пСрСмСнная, Ρ‚Π΅ ΠΆΠ΅ ограничСния Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  3. КаТдая опСрация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².
  4. НСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ допускаСтся (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ транслятор воспринимаСт Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» описан для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ).

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

Випизация Π² языках программирования

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ языков программирования со строгой статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉΒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ языки, ΠΊΠ°ΠΊ Ада, ΠΈΠ»ΠΈ Java. Π’Π°ΠΊ, Π² частности, Π² спСцификации Π½Π° язык Java 7 сказано, Ρ‡Ρ‚ΠΎ язык Java являСтся строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком [1]. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ большоС число распространённых языков программирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π΅ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. К Ρ‚Π°ΠΊΠΈΠΌ языкам относятся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Pascal, ΠœΠΎΠ΄ΡƒΠ»Π°-2, Fortran. Π’ Π½ΠΈΡ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ описаниС Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½ΠΎ допускаСтся нСявноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²Β β€” Π² случаС, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Ρ‚ΠΎ компилятор автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ для прСобразования значСния Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ†Π΅Π»ΠΎΠ΅ число ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, объявлСнной ΠΊΠ°ΠΊ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ присваиваниС Π±Π΅Π· явного привСдСния Ρ‚ΠΈΠΏΠΎΠ² Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ с высокой Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкС.

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

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

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

Python являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² языка со строгой динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ[2].

Бсылки

  1. ↑ JLS 7. Chapter 4. Types, Values, and Variables
  2. ↑ Why is Python a dynamic language and also a strongly typed language β€” PythonInfo Wiki

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

БтатичСская ΠΈ динамичСская типизация / Π₯Π°Π±Ρ€

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

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

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

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

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

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

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

МногиС статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ. Ѐункция Π² Java public int add(int x, int y) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Ρ†Π΅Π»Ρ‹Ρ… числа ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число. Π”Ρ€ΡƒΠ³ΠΈΠ΅ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ автоматичСски. Π’Π° ΠΆΠ΅ самая функция слоТСния Π² Haskell выглядит Ρ‚Π°ΠΊ: add x y = x + y. ΠœΡ‹ Π½Π΅ сообщаСм языку Ρ‚ΠΈΠΏΡ‹, Π½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… сам, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ + Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° числах, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ x ΠΈ y Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ числами, Π·Π½Π°Ρ‡ΠΈΡ‚ функция add ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° числа ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

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

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

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

def f(x, y):
    return x + y

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

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

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

БтатичСскиС ΠΈ динамичСскиС языки построСны Π½Π° Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… идСях ΠΎ коррСктности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’ динамичСском языкС "a" + 1 это коррСктная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°: ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΈ появится ошибка Π² срСдС исполнСния. Однако, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ "a" + 1 β€” это Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°: ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ скомпилирована ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. Π­Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ случайных символов !&%^@*&%^@* β€” это Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ понятиС ΠΎ коррСктности ΠΈ нСкоррСктности Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ эквивалСнта Π² динамичСских языках.

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

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

  • Иногда «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «ΡΡ‚атичСский».

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

  • Иногда «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²».

    НапримСр, JavaScript позволяСт Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ "a" + 1, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ «ΡΠ»Π°Π±ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ». Но ΠΏΠΎΡ‡Ρ‚ΠΈ всС языки ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ нСявного прСобразования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт автоматичСски ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΊ числам с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой Π²Ρ€ΠΎΠ΄Π΅ 1 + 1.1. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ слово «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» для опрСдСлСния Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌ ΠΈ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. НСт ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ общСпринятой Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΎΠ½ΠΈ всС Π½Π΅Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ зависят ΠΎΡ‚ мнСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

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

  • Иногда «ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ бСзопасный для памяти (memory-safe).

    Π‘ΠΈ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ нСбСзопасного для памяти языка. Если xs β€” это массив Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… чисСл, Ρ‚ΠΎ Π‘ΠΈ с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΊΠΎΠ΄ xs[5] ΠΈΠ»ΠΈ xs[1000], возвращая ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· памяти, которая находится сразу Π·Π° xs.

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







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

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

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

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

Как написал ΠšΡ€ΠΈΡ Π‘ΠΌΠΈΡ‚:

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

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

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

МоТно Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ статичСскиС Ρ‚ΠΈΠΏΡ‹ Π² динамичСскиС языки? Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях β€” Π΄Π°. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… это слоТно ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Бамая очСвидная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” это eval ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ возмоТности динамичСских языков. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 1 + eval("2") Π² Python Π΄Π°Π΅Ρ‚ 3. Но Ρ‡Ρ‚ΠΎ даст 1 + eval(read_from_the_network())? Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² сСти Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния. Если ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ число, Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Если строку, Ρ‚ΠΎ Π½Π΅Ρ‚. НСвозмоТно ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΄ΠΎ запуска, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ статичСски.

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

ЗначСния Ρ‚ΠΈΠΏΠ° Any Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Π½ΠΈΡ‡Π΅ΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ исчСзаСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ систСмы Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ Π½Π°ΠΌ Π² ΠΊΠΎΠ΄Π΅ с eval. Π―Π·Ρ‹ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ ΠΈ eval ΠΈ систСма Ρ‚ΠΈΠΏΠΎΠ², Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ бСзопасности Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ использовании eval.

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

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

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

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

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

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

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

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΊΠΈ динамичСских языков ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠΈΡ… языках, каТСтся, Π»Π΅Π³Ρ‡Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ справСдливо для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ пишСм, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ с eval. Π­Ρ‚ΠΎ спорноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для рСгулярной Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΈ здСсь ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ слово «Π»Π΅Π³ΠΊΠΎ». Π ΠΈΡ‡ Π₯ΠΈΠΊΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ рассказал ΠΏΡ€ΠΎ слово «Π»Π΅Π³ΠΊΠΎ», ΠΈ Π΅Π³ΠΎ связь со словом «ΠΏΡ€ΠΎΡΡ‚ΠΎ». ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π² этот Π΄ΠΎΠΊΠ»Π°Π΄ Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слово «Π»Π΅Π³ΠΊΠΎ». ΠžΠΏΠ°ΡΠ°ΠΉΡ‚Π΅ΡΡŒ «Π»Π΅Π³ΠΊΠΎΡΡ‚ΠΈ».

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

JavaScript пытаСтся ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π΄Π°ΠΆΠ΅ Ссли это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±Π΅ΡΡΠΌΡ‹ΡΠ»Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡŽ (Π²Ρ€ΠΎΠ΄Π΅ "a" + 1, Π΄Π°ΡŽΡ‰Π΅Π΅ «a1»). Python Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ стараСтся Π±Ρ‹Ρ‚ΡŒ консСрвативным ΠΈ часто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ошибки, ΠΊΠ°ΠΊ Π² случаС с "a" + 1.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ уровнями бСзопасности, Π½ΠΎ 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, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½ΠΎΠΉ систСмой Ρ‚ΠΈΠΏΠΎΠ². Если Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ MyList, Ρ‚ΠΎ Ρ‚ΠΈΠΏ «ΡΠΏΠΈΡΠΊΠ° чисСл» это просто MyList Integer. Haskell Π½Π΅ даст Π½Π°ΠΌ случайно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку Π² список, ΠΈ удостовСрится, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ элСмСнт ΠΈΠ· списка Π² ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

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

МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ add, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ числСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π£ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΈΠΏ Num a => (a -> a -> a). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚:

  • a ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ числСнным Ρ‚ΠΈΠΏΠΎΠΌ (Num a =>).
  • Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° a ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ a (a -> a -> a).

ПослСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Если Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ это String -> String, Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строку ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку. Но Ссли это String -> IO String, Ρ‚ΠΎ ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ диску, ΠΊ сСти, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

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

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

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

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

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

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

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

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

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

func add(x int, y int) int {
    return x + y
}

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

f :: Num a => a -> a -> a
add x y = x + y

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

add : (x : Nat) -> (y : Nat) -> {auto smaller : LT x y} -> Nat
add x y = x + y

Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ add 2 1, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ большС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ, Ρ‚ΠΎ компилятор ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²ΠΎ врСмя компиляции. НСвозмоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ большС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ. Π Π΅Π΄ΠΊΠΈΠΉ язык ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков такая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° происходит ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ: ΠΌΡ‹ Π±Ρ‹ написали Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ if x >= y: raise SomeError().

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

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

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

  • C (1972), Go (2009): Π­Ρ‚ΠΈ систСмы совсСм Π½Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅, Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². НСвозмоТно Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ MyList, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π» «ΡΠΏΠΈΡΠΎΠΊ Ρ†Π΅Π»Ρ‹Ρ… чисСл», «ΡΠΏΠΈΡΠΎΠΊ строк» ΠΈ Ρ‚.Π΄. ВмСсто этого придСтся Π΄Π΅Π»Π°Ρ‚ΡŒ «ΡΠΏΠΈΡΠΎΠΊ Π½Π΅ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ». ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ «ΡΡ‚ΠΎ список строк» ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° строка извлСкаСтся ΠΈΠ· списка, ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС ΠΏΡ€ΠΈ исполнСнии.
  • Java (1995), C# (2000): Оба языка ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ MyList<String> ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список строк, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ компилятор Π·Π½Π°Π΅Ρ‚ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° соблюдСниСм ΠΏΡ€Π°Π²ΠΈΠ» Ρ‚ΠΈΠΏΠΎΠ². Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ· списка Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠΌ String, компилятор Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΎΡ€ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€ΠΈ компиляции ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ошибки ΠΏΡ€ΠΈ исполнСнии ΠΌΠ΅Π½Π΅Π΅ вСроятны.
  • Haskell (1990), Rust (2010), Swift (2014): ВсС эти языки ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ нСсколькими ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ возмоТностями, Π² Ρ‚ΠΎΠΌ числС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, алгСбраичСскими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (ADTs), ΠΈ классами Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ (Ρ‚ΠΈΠΏΡ‹ классов, ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ (traits) ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, соотвСтствСнно). Rust ΠΈ Swift Π±ΠΎΠ»Π΅Π΅ популярны, Ρ‡Π΅ΠΌ Haskell, ΠΈ ΠΈΡ… ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ (Mozilla ΠΈ Apple, соотвСтствСнно).
  • Agda (2007), Idris (2011): Π­Ρ‚ΠΈ языки ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ зависимыС Ρ‚ΠΈΠΏΡ‹, позволяя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π²Ρ€ΠΎΠ΄Π΅ «Ρ„ункция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Ρ†Π΅Π»Ρ‹Ρ… числа Ρ… ΠΈ y, Π³Π΄Π΅ y большС, Ρ‡Π΅ΠΌ x». Π”Π°ΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ «y большС, Ρ‡Π΅ΠΌ x» форсируСтся ΠΏΡ€ΠΈ компиляции. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ y Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ x, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π½ΠΈ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. ΠžΡ‡Π΅Π½ΡŒ Ρ‚ΠΎΠ½ΠΊΠΈΠ΅, Π½ΠΎ Π²Π°ΠΆΠ½Ρ‹Π΅ свойства систСмы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ статичСски Π² этих языках. Π˜Ρ… ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ программистов, Π½ΠΎ эти языки Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρƒ Π½ΠΈΡ… ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ энтузиазм.

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

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

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

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

Бтрогая типизация

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈΠ· Seo Wiki — Поисковая ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Бтрогая типизация β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² языках программирования.

Бтрогая типизация ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… условий:

  1. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… (пСрСмСнная, константа, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π² языкС всСгда ΠΈΠΌΠ΅Π΅Ρ‚ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ фиксируСтся Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (статичСская типизация) ΠΈΠ»ΠΈ опрСдСляСтся Π²ΠΎ врСмя выполнСния (динамичСская типизация).
  2. ДопускаСтся присваиваниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ строго Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΈ пСрСмСнная, Ρ‚Π΅ ΠΆΠ΅ ограничСния Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  3. КаТдая опСрация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².
  4. НСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ допускаСтся (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ транслятор воспринимаСт Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» описан для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ).

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

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

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

↓

Випизация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” рассказываСм простыми словами

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ, поТалуйста:

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – нСпростая дисциплина. Π’Π΅Π³ΠΈ ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ – ΠΈ всС это ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ языкС. А Π½Π° ΠΊΠ°ΠΊΠΎΠΌ? ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ язык ΠΈΠΌΠ΅Π΅Ρ‚ свои характСристики, ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… – типизация.

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

Как ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏ

КаТдая пСрСмСнная, нСзависимо ΠΎΡ‚ языка, – это источник ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π° Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ опрСдСляСт, какая информация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записана Π² Π½Π΅ΠΉ: Ρ‡Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ с Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π’ΠΈΠ΄Ρ‹ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

ВсС языки дСлятся Π½Π° Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°ΠΌ:

  • Π΅ΡΡ‚ΡŒ Π»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ типизация ΠΈΠ»ΠΈ язык бСстиповый;
  • статистичСская ΠΎΠ½Π° ΠΈΠ»ΠΈ динамичСская;
  • сильная ΠΈΠ»ΠΈ слабая;
  • явная ΠΈΠ»ΠΈ нСявная.

ΠŸΠΎΠΉΠ΄Π΅ΠΌΡ‚Π΅ посмотрим Π² Ρ‡Π΅ΠΌ отличия ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ прСимущСства Π΄Π°Π΅Ρ‚ Ρ‚Π° ΠΈΠ»ΠΈ иная типизация.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎ бСстиповой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π”Π°ΠΆΠ΅ Ссли Π½Π΅Ρ‚ Ρ‚ΠΈΠΏΠ°, язык ΠΈΠΌΠ΅Π΅Ρ‚ Π±Π΅ΡΡ‚ΠΈΠΏΠΎΠ²ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. Π‘Π»ΠΎΠΆΠ½ΠΎ? БСйчас разбСрСмся.

БСстиповая типизация Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Π° для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΈΠ»ΠΈ эзотСричСских языков. НапримСр, Fort ΠΈΠ»ΠΈ Brainfuck. Главная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… языков – Π² Π½ΠΈΡ… всС сущности Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΠΈΡ‚ с Ρ€Π°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° использования бСстиповых языков:

  • ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ всС сдСлано ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ;
  • ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΌ Π·Π½Π°Π½ΠΈΠΈ языка Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ быстро разбСрСтся, Ρ‡Ρ‚ΠΎ ΠΊ Ρ‡Π΅ΠΌΡƒ, ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ этот ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‚ кусок ΠΊΠΎΠ΄Π°.

НСдостатки:

  • слабая абстракция. Π­Ρ‚ΠΎ отягчаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ со слоТными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

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

Π˜Ρ… основноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ – способ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². Π’ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполняСтся ΠΏΡ€ΠΈ компиляции, Π° ΠΏΡ€ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ – ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСтся.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ:

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

ΠŸΠ»ΡŽΡΡ‹ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ:

  • ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, Π»Π΅Π³ΠΊΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ сортировку массивов, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…;
  • Π»Π΅Π³ΠΊΠΎΠ΅ освоСниС. ДинамичСскиС языки ΠΏΡ€ΠΎΡ‰Π΅ ΡƒΡ‡ΠΈΡ‚ΡŒ.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… статичСских языках ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ:

  • C# – Π΅ΡΡ‚ΡŒ псСвдотип dynamic;
  • Delphi – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ посрСдством variant;
  • F# – ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«?Β».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π² динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со статикой. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Common Lisp ΠΈ Perl.

О слабой ΠΈ сильной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π―Π·Ρ‹ΠΊΠΈ с сильной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ программиста ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ смСшивания Ρ€Π°Π·Π½Ρ‹Ρ… сущностСй Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π° со слабой – Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ дСйствиям.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° strong typing:

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° weak typing:

  • ΠΊΡ€Π°Ρ‚ΠΊΠΈΠ΅ записи;
  • удобство Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΌΠΈ выраТСниями;
  • ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Π° ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ.

Явная ΠΈ нСявная типизация

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

Какой язык Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΅ΡΡ‚ΡŒ свои прСимущСства, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²Π°ΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ языки.

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

ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ популярным ΠΈ вострСбованным статичСским языкам:

β†’ ВОП-9 курсов для JAVA-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²;

β†’ Π’ΠΎΠΏ-7 курсов ΠΏΠΎ профСссии Π‘#-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ (си ΡˆΠ°Ρ€ΠΏ).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ динамичСским:

β†’ Π’ΠΎΠΏ-10 курсов ΠΏΠΎ JavaScript;

β†’ ВОП-10 курсов для Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

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

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ, поТалуйста:

ДинамичСская типизация β€” это Π½Π΅ инструмСнт для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ Ρ‡Π΅ΠΏΡƒΡ…Π° (ΠΏΠ°Ρ€ΡˆΠΈΠ²Π°Ρ)

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π΅Ρ‰Π΅ΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ. ΠΠ°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ мСня ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ β€” Π° Π² Ρ‡Π΅ΠΌ Ρ‚Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΡˆΡŒΡΡ?

Π― Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡΡŒ Π² Ρ‚ΠΈΠΏΠ°Ρ… ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ АПИ. Но для Π΄ΠΎΠ±Ρ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΠ² эти Π²Π΅Ρ‰ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Ρ‡Π°Ρ‚. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΈ понятия Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Π·Π°Ρ‡Π΅ΠΌ я Ρ€Π΅ΡˆΠ°ΡŽ.

Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΆΠΈΠ·Π½ΠΈ я просто ΠΌΠ°Ρ…Π°Π» Π½Π° Π½ΠΈΡ… Ρ€ΡƒΠΊΠΎΠΉ ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ» ΠΌΠΈΠΌΠΎ. Π­Ρ‚ΠΈ Π³Π»ΡƒΠΏΡ†Ρ‹ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΈ я Π½Π΅ нанимался Ρ€Π°Π·ΡŠΡΡΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ js-Π½ΠΈΠΊΡƒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΅Π³ΠΎ ΠΊΠΎΠ΄ β€” это Π½Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π° ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Но врСмя ΠΈΠ΄Ρ‘Ρ‚, Π° количСство ΠΈΠ΄ΠΈΠΎΡ‚ΠΎΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΈ Π½Π΅ Π΄ΡƒΠΌΠ°Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всСй своСй Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ индустриСй ΠΏΠ΅Ρ€Π΅Π΅Ρ…Π°Ρ‚ΡŒ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π½Π° статичСский тайпскрипт, эти ослы Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всякиС ΠΊΠ»ΠΎΠΆΡƒΡ€Ρ‹, ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ½Π½Ρ‹ тСстов, ΠΈ ΠΈΠ΄Ρ‚ΠΈ Π½Π° всС мыслимыС ухищрСния β€” лишь Π±Ρ‹ Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΈΠΏΠ°Ρ….


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

Но сСгодня я ΠΏΡ€ΠΈΡˆΡ‘Π» сюда, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ:

ДинамичСская типизация β€” адскоС Π³ΠΎΠ²Π½ΠΈΡ‰Π΅, Π° ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вСрят Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ ΠΎΡˆΠΈΠ±Π°ΡŽΡ‚ΡΡ.

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

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ говорят, Ρ‡Ρ‚ΠΎ всС эти Π²Π΅Ρ‰ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Они говорят ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ

Π‘Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹, Π½Π΅ стоят усилий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ этих Ρ‚ΠΈΠΏΠΎΠ².

Π‘Π΅Ρ€ΡŒΠ΅Π·Π½ΠΎ? Π‘Π΅Ρ€ΡŒΠ΅Π·Π½ΠΎ? Нам лСнь ΠΏΠΈΡΠ°Ρ‚ΡŒ символы? Π‘Ρ€Π°Ρ‚Π°Π½. Π’Ρ‹ Π΄ΡƒΠΌΠ°Π΅ΡˆΡŒ ΠΏΡΡ‚ΡŒ часов, Π° ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΡˆΡŒ Π΄Π΅ΡΡΡ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚. Π’Ρ‹ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΎ ΠΊΠ°ΠΊΠΎΠΌ эфортС Ρ‚Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡˆΡŒ. И Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒ, Ρ‡Ρ‚ΠΎ со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΈΠ»ΠΈ Π±Π΅Π· Π½Π΅Π΅, Ρ‚Ρ‹ Π½Π΅ Ρ€Π°Π· Π² своСй ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ опишСшь структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±ΡƒΠ΄Π΅ΡˆΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Но Ссли Π±ΡƒΠ΄Π΅ΡˆΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡΡ статикой, компилятор ΠΈ IDE смогут Π΄Π΅Π»Π°Ρ‚ΡŒ эту Ρ€Π°Π±ΠΎΡ‚Ρƒ Π·Π° тСбя. И ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚Π²ΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° ошибки описания этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Если Ρ‚Π΅Π±Π΅ лСнь ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΊ функциям β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ЯП с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Ρ‚ΠΈΠΏΠΎΠ², ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΊ IDE.

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

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ говорят, Ρ‡Ρ‚ΠΎ Ρ€Π°Π½Π½ΠΈΠΉ ΠΎΡ‚Π»ΠΎΠ² ошибок Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ Π²Π°ΠΆΠ΅Π½.

Ало. Π’Π°ΡˆΠ° доска с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ Π½Π°Π±ΠΈΡ‚Π° Π±Π°Π³Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ допустили Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. Π§ΠΈΠ½ΠΈΡ‚ΡŒ Π±Π°Π³ΠΈ β€” большая Ρ‡Π°ΡΡ‚ΡŒ всСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² индустрии. ΠœΡ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Ρ‹ чСловСкочасов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ„ΠΈΠΊΡΠΈΡ‚ΡŒ Π΄ΠΎ нСлСпости ΡΠΌΠ΅ΡˆΠ½Ρ‹Π΅ ошибки. Π’Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄ Π±Π΅Π· Π±Π°Π³ΠΎΠ²? ΠΈΠ»ΠΈ Ρƒ вас Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΌΠ½Ρ‹Π΅ Π±Π°Π³ΠΈ? Π”Π° Ρ…Ρ€Π΅Π½ Ρ‚Π°ΠΌ ΠΏΠ»Π°Π²Π°Π». Если Π±Ρ‹ компилятор Π½Π΅ провСрял Π·Π° вас, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°ΠΊΡ€Ρ‹Π»ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½ΡƒΡŽ скобку, ΠΏΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΌΠ½Π΅, Ρƒ нас Π±Ρ‹Π»ΠΈ Π±Ρ‹ сотни Π±Π°Π³ΠΎΠ² с Π½Π΅Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ скобкой.

Когда Π΄ΡƒΠΌΠ°Π΅ΡˆΡŒ ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ Π±Π°Π³ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ, Π° Π³Π΄Π΅ Π½Π΅Ρ‚, появляСтся опасная иллюзия, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ Π΄Π΅Ρ€ΠΆΠΈΡˆΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ, ΠΈ прСдусмотрСл всС кСйсы. Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ сСмь Π»Π΅Ρ‚, Π΅Ρ‰Ρ‘ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ я прСдусмотрСл всС кСйсы. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это частный случай Π·Π°Π΄Π°Ρ‡ΠΈ коммивояТСра β€” Ρ‚Ρ‹ ΠΠ˜ΠšΠžΠ“Π”Π Π½Π΅ моТСшь ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС кСйсы. Π’Ρ‹ Π΄Π°ΠΆΠ΅ самыС распространСнныС ΠΈ вСроятныС Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π΅ моТСшь. Когда, ΠΊΡ‚ΠΎ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ ситуации Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄ с ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΌ Π±Π°Π³ΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ это сдСлаСт β€” Ρ‚Ρ‹, Π±Π»ΠΈΠ½, понятия Π½Π΅ имССшь. ВсС, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ моТСшь ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡˆΠ°Π½ΡΡ‹ Π½Π° появлСниС Π±Π°Π³Π°. Π’ΠΎΡ‚ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΠΉ, Ρ‚Π΅Π±Π΅ Π·Π° это платят Π±Π΅ΡˆΠ΅Π½Ρ‹Π΅ дСньги.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹ тСстам.

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

Π‘ΠΎΠ»Π²Π°Π½Ρ‹ ΠΈΠ· динамичСского ΠΌΠΈΡ€Π° говорят, Ρ‡Ρ‚ΠΎ статичСская типизация Π»ΠΈΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠ΄ гибкости.

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

JS-подростки говорят, Ρ‡Ρ‚ΠΎ статичСская типизация смСщаСт Π°ΠΊΡ†Π΅Π½Ρ‚ с Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° описаниС Ρ‚ΠΈΠΏΠΎΠ².

А я Π³ΠΎΠ²ΠΎΡ€ΡŽ, Ρ‡Ρ‚ΠΎ описаниС Ρ‚ΠΈΠΏΠΎΠ² β€” ΠΈ Π΅ΡΡ‚ΡŒ описаниС процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΡˆΡŒ. Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΡ‹ описываСм Π²Π΅Ρ‰ΠΈ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, ΠΈ наш ΠΊΠΎΠ΄ содСрТит Ρ‚Π΅ знания ΠΎ Π½ΠΈΡ…, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ Π½Π΅ смоТСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’Ρ‹ всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅ΡˆΡŒ ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ эту Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Если систСма Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ЯПа Π½Π΅ позволяСт Ρ‚Π΅Π±Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ свой Π΄ΠΎΠΌΠ΅Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ΠΎ β€” это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ языка, Π° Π½Π΅ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ. Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π° этом языкС Ρ‚Ρ‹ мСстами ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒ всякиС object ΠΈ dynamic, Π½ΠΎ Π²Π΅Π·Π΄Π΅ Π³Π΄Π΅ моТСшь ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ β€” Ρ‚Ρ‹ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΡˆΡŒ.

Π― писал ΠΊΠΎΠ΄ ΠΈ с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΈ со статичСской. Π‘ΠΎ строгой ΠΈ нСстрогой, со структурной ΠΈ Π½ΠΎΠΌΠΈΠ½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ.

Волько динамичСская Π²Ρ‹Π·Ρ‹Π²Π°Π»Π° Ρƒ мСня стойкоС ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я ΠΏΠΈΡˆΡƒ дСтский псСвдокод, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сработаСт, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли сойдутся Π·Π²Π΅Π·Π΄Ρ‹.

ДинамичСская типизация β€” это ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ°, ΡˆΡ‚ΡƒΠΊΠ°, которая ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ‹ Ρ€Π΅ΡˆΠΈΠ» Π·Π°ΠΊΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠ³ΠΎ, ΠΈ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎΠ± этом. Когда Ρ‚Ρ‹ собрался вСсти Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΊΠΎΠ³Π΄Π° с Ρ‚Π²ΠΎΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ люди, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π²Ρ‹Π»Π΅Π·Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΎΠ΄ ΠΈ Π½Π°Ρ‡Π½Π΅Ρ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, обновляясь Ρ€Π°Π· Π² нСдСлю β€” динамичСская типизация Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π°Ρ…Ρ€Π΅Π½ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠ°. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈ это ΠΈ ΠΈΠ΄ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ своих Ρ„Π°ΠΉΠ»ΠΎΠ² с .js Π½Π° .ts.


И посмотри ΠΌΠΎΠΉ подкаст β€” Ρ‚Π°ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ выпуск

Бтрогая типизация JS, Typescript, Javascriptβ€Š: Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ

Богласно опросу Global Developer Hiring Landscape Survey report 2017, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Stack Overflow, JavaScript являСтся самым вострСбованным языком программирования срСди Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΠΎ всСму ΠΌΠΈΡ€Ρƒ. Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° своСго создания Π² 1995 Π³ΠΎΠ΄Ρƒ JavaScript Π·Π°Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» сСбя ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык Ρ€Π°Π±ΠΎΡ‚Ρ‹ с интСрфСйсами для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΈ Π²Π΅Π±-страниц. Благодаря Π±ΠΎΠ³Π°Ρ‚ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ обСспСчил Π½ΠΎΠ²Ρ‹Π΅ возмоТности для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Angular[.js], Ember.js ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ прСдоставили JS Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ возмоТности.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ опроса

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

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

Бтатистика GitHub

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ JavaScriptβ€Š

Mosaic ΠΎΡ‚ NCSA Π±Ρ‹Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹ΠΌ Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ Π΅Ρ‰Π΅ Π² 1993 Π³ΠΎΠ΄Ρƒ. А Π² 1994 Netscape прСдставила свой популярный Π·Π°ΠΏΠ°Ρ‚Π΅Π½Ρ‚ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Netscape Navigator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считался СдинствСнным Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Π² 90-Ρ… Π³ΠΎΠ΄Π°Ρ…. Netscape наняла Π‘Ρ€Π΅Π½Π΄Π°Π½Π° Π­ΠΉΡ…Π° Π² 1995 Π³ΠΎΠ΄Ρƒ, ΠΈ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π³ΠΎΠ΄Ρƒ ΠΈΠΌ Π±Ρ‹Π» основан JavaScript. По словам Π­ΠΉΡ…Π°:

Β«ΠœΡ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΠ»ΠΈΡΡŒ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ «язык-ΠΊΠ»Π΅ΠΉΒ» для Π²Π΅Π±-Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ программистов Π½Π° Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ дСнь, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ строят Π²Π΅Π±-ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ изобраТСния, ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΈ ΠΌΠΈΠ½ΠΈ-прилоТСния Π½Π° Java. ΠœΡ‹ рассматривали Java ΠΊΠ°ΠΊ Β«ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ язык», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π±ΠΎΠ»Π΅Π΅ дорогостоящими программистами, Π³Π΄Π΅ «программисты-склСйщики» — Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²Π΅Π±-страниц — собирали Π±Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JSΒ».

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

JavaScript динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык ΠΈ позволяСт ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±Π΅Π· объявлСния Ρ‚ΠΈΠΏΠ°. Π₯отя эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ использованиС языка, это Π½Π΅ всСгда ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ языков программирования, ΠΈ появлялись TypeScript ΠΈ Flow.

ЦСль ΡΡ‚Π°Ρ‚ΡŒΠΈ – Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² контСкстС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Javascript. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому ΠΌΡ‹ рассмотрим TypeScript ΠΈ Flow, Π° Ρ‚Π°ΠΊΠΆΠ΅ сравним ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΊΠΎΠ½Ρ†Π΅ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ: стоит Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ свои ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Β«Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ JavaScriptΒ».

Π—Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ

ВспомнитС Coffeescript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ популярСн. Но, хотя я ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ²Π°ΠΆΠ°ΡŽ Π΅Π³ΠΎ изобрСтатСля, Ρ„Π°ΠΊΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ этого языка Π±Ρ‹Π»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ (ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ пСрСписки Π½Π° ycombinator). Π—Π°Ρ‚Π΅ΠΌ появился ES6.

Из-Π·Π° нСобходимости ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ старыС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΈ для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° ES6 Ρƒ нас стали ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ транспайлСры, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Babel. Coffeescript ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с Π½ΠΈΠΌ ΠΈ Ρ‚ΠΎΠΆΠ΅ являСтся транспайлСром.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² CoffeeScript ΠΈ Babel Π±Ρ‹Π»ΠΎ нСдостаточно, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΎ сообщСство Π² строну TypeScript ΠΈ Flow. ВзглянитС Π½Π° Ρ‚Ρ€Π΅Π½Π΄Ρ‹ (Π·Π° Flow Π½Π΅ Ρ€ΡƒΡ‡Π°ΡŽΡΡŒ, Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ошибка, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² нСсколько Ρ€Π°Π· мСньшС).

Бтатистика Google Trends

TypeScript – это язык программирования с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Microsoft, являСтся супСрсСтом JS. По Π΄Ρ€ΡƒΠ³ΡƒΡŽ сторону – Flow, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Facebook.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Flow ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ TypeScript, ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ постСпСнно Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠ° Π² Π½Π΅ΠΌ, просто Π΄ΠΎΠ±Π°Π²ΠΈΠ² // @flow Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°. ВсС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° коммСнтариях.

Flow vs Typescript — сходства ΠΈ отличия

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈ TypeScript, ΠΈ Flow ΠΏΠΎΠ»Π΅Π·Π½Ρ‹. ΠœΡ‹, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Π½Π΅ΠΌ сравнСниС с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

TypeScript

TypeScript, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎ названию, ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ (.ts) ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ (.js) Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅. БущСствуСт Ρ„Π»Π°Π³ компилятора nolmplicitAny, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Ссли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ вас ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния для всСх ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Активация noImplicitAny ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ послСдствия для вашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹, особСнно ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с малоизвСстными сторонними модулями. Помимо Ρ‚ΠΎΠ³ΠΎ, я ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании noImplicitAny я стал ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ компилятор TypeScript.

Доступно мноТСство описаний интСрфСйсов для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ JS. Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ популярном, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρƒ вас Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Однако, Π½Π΅Ρ‚ увСрСнности, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написал Ρ„Π°ΠΉΠ» .d.ts, сдСлал это Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ. Плюс ΠΊΠΎ всСму, Π²Π°ΠΌ потрСбуСтся ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для вашСй ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π“ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ своим Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎ встроСнной дСмонстрации ошибок Π΄ΠΎ компиляции, ΠΏΡ€ΠΈ использовании TypeScript с IDE Π½Π° ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠΈ WebStorm ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ откроСтся пСрСкрСстная навигация ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Flow

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ TypeScript, Flow лишь сканируСт ваши .js-Ρ„Π°ΠΉΠ»Ρ‹ для обнаруТСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ошибок. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ дСйствуСт ΠΊΠ°ΠΊ ΡƒΠΌΠ½Ρ‹ΠΉ Π»ΠΈΠ½Ρ‚Π΅Ρ€.

Если ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Flow, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ для Atom Nuclide.

ВсС ΠΆΠ΅, ΠΊΡ‚ΠΎ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅?

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ являСтся вашим Ρ„Π°Π²ΠΎΡ€ΠΈΡ‚ΠΎΠΌ: TypeScript ΠΈΠ»ΠΈ Flow, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² – это Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ JS. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Flow ΠΈ TypeScript являСтся Ρ‚ΠΎ, насколько ΠΏΠ»Π°Π²Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ TypeScript Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТнСС, Flow ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ внСдряСм, прСдупрСТдая ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ провСряСт мСньшС вашСго ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΈ оТидаСтся. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° Angular, Ρ‚ΠΎ Π²Ρ‹Π±ΠΎΡ€ Ρƒ вас нСбольшой.

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° использования статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок Π½Π° Π»Π΅Ρ‚Ρƒ

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тСстирования Ρ‚ΠΈΠΏΠΎΠ² Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π΅Ρ‰Π΅ Π΄ΠΎ Π΅Π³ΠΎ выполнСния.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ Π² JavaScript, Π½ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ бонус Π² typescript, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

static.ts hosted with ❀ by GitHub

Π‘ΠΎΠ»Π΅Π΅ точная ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° смысла Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

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

Если Π²Ρ‹ считаСтС, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π²Ρ‹ Π½Π΅ ΠΎΡˆΠΈΠ±Π°Π΅Ρ‚Π΅ΡΡŒ. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ, ΠΎΠ½ΠΈ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΎΠ±Ρ‰ΡƒΡŽ структуру ΠΊΠΎΠ΄Π°, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ — это слСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΡΠΏΡ€Π°Π²ΠΈΠ»ΠΈΡΡŒ с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ смысла ΠΊΠΎΠ΄Π° Π² синтаксисС Π΅Π³ΠΎ языка (интСрСсная ΠΊΠ½ΠΈΠ³Π° Π½Π° эту Ρ‚Π΅ΠΌΡƒ: Чистый ΠΊΠΎΠ΄ Π ΠΎΠ±Π΅Ρ€Ρ‚Π° ΠœΠ°Ρ€Ρ‚ΠΈΠ½Π°).

Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ошибок

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

Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ

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

pressure.ts hosted with ❀ by GitHub

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ вСроятности возникновСния ошибок Π²ΠΎ врСмя выполнСния

Ошибки Ρ‚ΠΈΠΏΠ° Π²ΠΎ врСмя выполнСния становятся катастрофичСскими, Π½Π° Ρ‡Π΅ΠΌ ΠΈ ΠΆΠΈΠ²ΡƒΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ сСрвисы ΠΊΠ°ΠΊ Sentry.

НапримСр, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² JavaScript, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции: строка Π½Π΅ сущСствуСт.

helloworld.js hosted with ❀ by GitHub

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ модСлирования (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IDE)

Одна ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… особСнностСй статичСских Ρ‚ΠΈΠΏΠΎΠ². Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² Visual Studio Π½Π° языкС ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ C#, Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΎ Ρ‡Π΅ΠΌ я. Π­Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (Ρƒ вас Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ получится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с субдомСнами):

App.subapp.somefunction

НСдостатки использования статичСских Ρ‚ΠΈΠΏΠΎΠ²

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

Одна ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ – Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ обучСния ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° сопровоТдСниС Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

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

Π‘ использованиСм TypeScript ΠΈΠ»ΠΈ Flow ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° увСличится Π½Π° 30% ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ. ΠŸΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° сниТаСтся. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ruby ΠΈΠ»ΠΈ Java πŸ™‚

ИспользованиС статичСских Ρ‚ΠΈΠΏΠΎΠ² Π² JavaScriptβ€Šβ€”β€Š Π”Π° ΠΈΠ»ΠΈ НСт?

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

  • Достаточно большой ΠΈ комплСксный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Если ваша ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ с большой Π±Π°Π·ΠΎΠΉ ΠΊΠΎΠ΄Π°, TypeScript ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ мноТСство ошибок. А Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта Π±Π°Π·Π° ΠΊΠΎΠ΄Π° сСйчас Π±Ρ‹Π»Π° малСнькой ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π°Π²Π½ΡΠ»Π°ΡΡŒ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎΠ³Π΄Π° Π²Ρ‹ смоТСтС ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ.

  • Над Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ большая ΠΊΠΎΠΌΠ°Π½Π΄Π°

Π§Π΅ΠΌ большС людСй, Ρ‚Π΅ΠΌ слоТнСС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΈΡˆΡƒΡ‚. Π’Π°ΠΌ Π»Π΅Π³Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π±ΠΎΠ»ΠΈ машинС.

  • Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² пСрспСктивС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ TypeScript, Ссли Π²Ρ‹ считаСтС, Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ потрСбуСтся большой Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³. НС Π²Π·Π²Π°Π»ΠΈΠ²Π°ΠΉΡ‚Π΅ Π½Π° сСбя Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅ брСмя, Ссли ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π΄Π΅Π»ΠΎ с краткосрочным Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ.

  • Π’Π°ΡˆΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π½Π°ΠΊΠΎΠΌΠ° со статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком

Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ TypeScript, – это прСкрасный Π²Ρ‹Π±ΠΎΡ€, Ссли Π²Ρ‹ ΠΈΠ»ΠΈ ваши Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰ΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ языками, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Java ΠΈΠ»ΠΈ

C# ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’Π°ΠΊ ΠΊΠ°ΠΊ TypeScript Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π΅Π» C#, ΠΎΠ±Π° эти языка ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ элСмСнты.

  • Π’Ρ‹ ΠΈΡ‰ΠΈΡ‚Π΅ Π·Π°ΠΌΠ΅Π½Ρƒ babel

TS+ES6 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти Π½Π° ES5 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TS-транспайлСра. Π’Ρ‹ смоТСтС ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ babel.

  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°/Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ TypeScript

Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Angular 2+ ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΠΉ TypeScript, слСдуСт ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ вряд Π»ΠΈ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΡŒ Π½Π°Π·Π°Π΄. Однако всС это зависит ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ объСма ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ вСдСтся Ρ€Π°Π±ΠΎΡ‚Π°. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своими мыслями, оставляйтС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π΄Ρ‹ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ вашС ΠΌΠ½Π΅Π½ΠΈΠ΅ :).

ΠžΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ€ Книга, Software Engineer Π² Weblab Technology

Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ Π”ΠΌΠΈΡ‚Ρ€ΠΈΠ΅Π½ΠΊΠΎ, Brand Specialist Π² Weblab Technology

Π¨Π°Ρ€ΠΌΠΈΠ½ Π₯аят, Data Specialist Π² Weblab Technology

строгая типизация — это … Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ строгая типизация?

  • Бтрогая типизация — Starke Typisierung (Π°Π½Π³Π». Бтрогая типизация, daher oft auch strenge Typisierung) bezeichnet ein Schema der Typisierung von Programmiersprachen. Bei der starken Typisierung bleibt eine einmal durchgefΓΌhrte Bindung zwischen Variable und Datentyp…… Deutsch Wikipedia

  • строгая типизация — ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ БистСма, которая Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ ограничСния Π½Π° взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….ΠœΡƒΡ€Π°Π²Π΅ΠΉ: свободный Π½Π°Π±ΠΎΡ€ тСкста, слабый Π½Π°Π±ΠΎΡ€ тСкста… Π’ΠΈΠΊΠΈΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

  • Strong Bad — ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆ Homestar Runner ΠŸΠ΅Ρ€Π²ΠΎΠ΅ появлСниС Homestar Runner участвуСт Π² конкурсС Π½Π° Π·Π²Π°Π½ΠΈΠ΅ самого сильного Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π² ΠΌΠΈΡ€Π΅ Π‘ΠΎΠ·Π΄Π°Π½ΠΎ b… Wikipedia

  • Π£Ρ‚ΠΈΠ½Ρ‹ΠΉ Π²Π²ΠΎΠ΄ — Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ систСмы Виповая Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠ»ΠΈ манифСстичСский ДинамичСский ΠΈΠ»ΠΈ статичСский Π‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ слабый ΠΠΎΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ структурный Зависимый Π½Π°Π±ΠΎΡ€ Π£Ρ‚ΠΈΠ½Ρ‹ΠΉ Π²Π²ΠΎΠ΄ Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π²Π²ΠΎΠ΄ Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Π²Π²ΠΎΠ΄ Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ тСкста… ВикипСдия

  • Блабая типизация — Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ слабая типизация (a.k.a. свободная типизация) — это свойство, приписываСмоС систСмам Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языков программирования. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «слабая типизация» ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΡΠΊΠΎΠ»ΡŒΠΊΠΎβ€¦β€¦ Wikipedia

  • Випизация манифСста — БистСмы Ρ‚ΠΈΠΏΠΎΠ² Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ ΠΈ манифСстичСский ДинамичСский ΠΈ статичСский Π‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ слабый ΠΠΎΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ структурный Зависимый Ρ‚ΠΈΠΏ Π£Ρ‚ΠΈΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏΠΈΠ½Π³ Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈβ€¦ ВикипСдия

  • Виповая систСма — Виповая систСма Виповая Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠ°Ρ vs.ΠŸΡ€ΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ динамичСского ΠΈ статичСского Ρ‚ΠΈΠΏΠΎΠ². БильноС ΠΈ слабоС. НоминальноС ΠΈ структурноС. Зависимая типизация. Утиная типизация. Бкрытая типизация. ЛинСйная типизация. Уникальная типизация… Wikipedia

  • .

  • Π―Π·Ρ‹ΠΊ программирования со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ — Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ строгая типизация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для описания Ρ‚Π΅Ρ… ситуаций, ΠΊΠΎΠ³Π΄Π° языки программирования ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со значСниями, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒβ€¦β€¦ ВикипСдия

  • Π―Π·Ρ‹ΠΊ программирования — списки Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС ΠΏΠΎ катСгориям Π² хронологичСском порядкС ПоколСния Π―Π·Ρ‹ΠΊ программирования — это искусствСнный язык, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ инструкций машинС, особСнно ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ.Π―Π·Ρ‹ΠΊΠΈ программирования ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, которыС…… Wikipedia

  • Schwache Typisierung — Die Artikel Typsystem und Typisierung (Informatik) ΓΌberschneiden sich tematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Beteilige dich dazu an der Diskussion ΓΌber diese Überschneidungen. Bitte entferne diesen…… Deutsch Wikipedia

  • Typisierung (Informatik) — Eine Typisierung (Π°Π½Π³Π». Випизация), dient in der Informatik dazu, dass die Objekte (hier Objekte im Mathematisch abstrakten Sinne verstanden) der Programmiersprachen, wie z.B. Variablen, Funktionen oder Objekte (im Sinne der objektorientierten…… Deutsch Wikipedia

  • .

    Π―Π·Ρ‹ΠΊ со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ — learn.adacore.com

    • Около
    • ΠšΡƒΡ€ΡΡ‹
      • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Ada
        • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
          • Π˜ΡΡ‚ΠΎΡ€ΠΈΡ
          • Ада сСгодня
          • Ѐилософия
          • ИБКРА
        • Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык
          • ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
          • Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык — If / Then / Else
          • Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык — Ρ†ΠΈΠΊΠ»Ρ‹
          • Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык — выписка ΠΈΠ· рСгистра
          • Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык — Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ области
          • Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык — условныС выраТСния
        • ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
          • ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
          • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ²
          • Π’Ρ‹Π·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
          • ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅
        • ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
          • ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹
          • ИспользованиС ΠΏΠ°ΠΊΠ΅Ρ‚Π°
          • ΠšΠΎΡ€ΠΏΡƒΡ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ
          • ДСтскиС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
          • ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅
        • Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык
          • Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΈΠΏ?
          • Π¦Π΅Π»Ρ‹Π΅ числа
          • Π‘Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹
          • ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ
          • Π’ΠΈΠΏΡ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой
          • Π‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€
          • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹
          • ΠŸΠΎΠ΄Ρ‚ΠΈΠΏΡ‹
        • Записи
          • ОбъявлСниС Ρ‚ΠΈΠΏΠ° записи
          • АгрСгаты
          • Π’Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²
        • ΠœΠ°ΡΡΠΈΠ²Ρ‹
          • ОбъявлСниС Ρ‚ΠΈΠΏΠ° массива
          • Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
          • Π‘ΠΎΠ»Π΅Π΅ простыС объявлСния массивов
          • Атрибут Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°
          • НСограничСнныС массивы
          • ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ массива: Π‘Ρ‚Ρ€ΠΎΠΊΠ°
          • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ
          • Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… массивов
          • ОбъявлСниС массивов (2)
          • Π‘Ρ€Π΅Π·Ρ‹ массива
          • ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅
        • ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ…
          • Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΠΈ: Π³Ρ€ΡƒΠ½Ρ‚ΠΎΠ²ΠΊΠ°
          • ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½Ρ‹Π΅ выраТСния
          • Π’ΠΈΠΏΡ‹ доступа (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ)
          • Π’Π·Π°ΠΈΠΌΠ½ΠΎ рСкурсивныС Ρ‚ΠΈΠΏΡ‹
          • ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ записях
          • Π’ΠΈΠΏΡ‹ фиксированной Ρ‚ΠΎΡ‡ΠΊΠΈ
          • Π’ΠΈΠΏΡ‹ символов
        • ΠšΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
          • Базовая инкапсуляция
          • АбстрактныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…
          • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹
          • ДСтскиС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
        • ΠžΠ±Ρ‰ΠΈΠ΅
          • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
          • ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ объявлСниС Ρ‚ΠΈΠΏΠ°
          • ОбъявлСниС Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
          • ΠžΠ±Ρ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π»Π°
          • ΠžΠ±Ρ‰ΠΈΠΉ экзСмпляр
          • ΠžΠ±Ρ‰ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
          • Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
          • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: экзСмпляры Π²Π²ΠΎΠ΄Π° / Π²Ρ‹Π²ΠΎΠ΄Π°
          • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ADT
          • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: своп
          • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: рСвСрсированиС
          • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ВСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
        • Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
          • ЗаявлСниС ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ…
          • Π’Ρ‹Π·ΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
          • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
          • ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
        • Π—Π°Π΄Π°Ρ‡ΠΈ
          • Π—Π°Π΄Π°Ρ‡ΠΈ
          • ΠžΡ…Ρ€Π°Π½ΡΠ΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
          • Π—Π°Π΄Π°Ρ‡ΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹
        • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ
          • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ постусловия
          • ΠŸΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹
          • Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚ΠΈΠΏΠΎΠ²
        • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ с C
          • ΠœΠ½ΠΎΠ³ΠΎΡΠ·Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
          • УсловноС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
          • Π—Π°Ρ€ΡƒΠ±Π΅ΠΆΠ½Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
          • Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅
          • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ привязок
        • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
          • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹
          • Π Π°Π·ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹
          • ΠžΠ±Ρ‰Π΅ΠΊΠ»Π°ΡΡΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹
          • ДиспСтчСрскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
          • ВочСчная запись
          • Private & Limited
          • Π’ΠΈΠΏΡ‹ общСклассового доступа
        • Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°: ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹

    .

    Π½ΠΎΠ²Π΅ΠΉΡˆΠΈΡ… вопросов ΠΎ строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ — Stack overflow Π½Π° русском

    ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

    1. Около
    2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

    3. Для ΠΊΠΎΠΌΠ°Π½Π΄
    1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
      ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

    2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
      Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

    3. Вакансии
      ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

    4. Π’Π°Π»Π°Π½Ρ‚
      НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

    5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
      ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

    6. О компании

    Загрузка…

    .

    Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π‘Π˜Π›Π¬ΠΠžΠ™ ΠΈ Π‘Π’ΠΠ’Π˜Π§Π•Π‘ΠšΠžΠ™ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ

    ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

    1. Около
    2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

    3. Для ΠΊΠΎΠΌΠ°Π½Π΄
    1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
      ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

    2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
      Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

    3. Вакансии
      ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

    4. Π’Π°Π»Π°Π½Ρ‚
      НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

    5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
      ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

    6. О компании

    .

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

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