ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΈΠΏΠΎΠ² 4 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² строк Python-ΠΊΠΎΠ΄Π°. Π§Π°ΡΡ‚ΡŒ 1

БСгодня ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π² Dropbox Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ² Python-ΠΊΠΎΠ΄Π°.

ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΈΠΏΠΎΠ² 4 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² строк Python-ΠΊΠΎΠ΄Π°. Π§Π°ΡΡ‚ΡŒ 1

Π’ Dropbox ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΈΡˆΡƒΡ‚ Π½Π° Python. Π­Ρ‚ΠΎ β€” язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ β€” ΠΊΠ°ΠΊ для бэкСнд-сСрвисов, Ρ‚Π°ΠΊ ΠΈ для Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… клиСнтских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π•Ρ‰Ρ‘ ΠΌΡ‹ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠ°Ρ… примСняСм Go, TypeScript ΠΈ Rust, Π½ΠΎ Python β€” это наш Π³Π»Π°Π²Π½Ρ‹ΠΉ язык. Если ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ наши ΠΌΠ°ΡΡˆΡ‚Π°Π±Ρ‹, Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°Ρ… строк Python-ΠΊΠΎΠ΄Π°, оказалось, Ρ‡Ρ‚ΠΎ динамичСская типизация Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎ услоТнила Π΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π½Π°Ρ‡Π°Π»Π° ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π°. Для смягчСния этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΡ‹ приступили ΠΊ постСпСнному ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ нашСго ΠΊΠΎΠ΄Π° Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² с использованиСм mypy. Π­Ρ‚ΠΎ, вСроятно, самая популярная ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Π°Ρ систСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² для Python. Mypy β€” это опСнсорсный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π΅Π³ΠΎ основныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ трудятся Π² Dropbox.

Dropbox оказалась ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, которая Π²Π½Π΅Π΄Ρ€ΠΈΠ»Π° ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² Π² Python-ΠΊΠΎΠ΄Π΅ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅. Π’ наши Π΄Π½ΠΈ mypy ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² тысячах ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎΡ‚ инструмСнт бСсчислСнноС количСство Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ называСтся, Β«ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ Π² бою». Нам, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ ΠΌΡ‹ находимся сСйчас, ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠ»Π³ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ. На этом ΠΏΡƒΡ‚ΠΈ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΌΠ°Π»ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΠ²ΡˆΠΈΡ…ΡΡ экспСримСнтов. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» повСствуСт ΠΎΠ± истории статичСской ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π² Python β€” с самого Π΅Ρ‘ нСпростого Π½Π°Ρ‡Π°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΌΠΎΠ΅Π³ΠΎ Π½Π°ΡƒΡ‡Π½ΠΎΠ³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π΄ΠΎ сСгодняшнСго дня, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ подсказки ΠΏΠΎ Ρ‚ΠΈΠΏΠ°ΠΌ стали ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ для бСсчислСнного количСства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΈΡˆΡƒΡ‚ Π½Π° Python. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ мноТСством инструмСнтов β€” Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ IDE ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π°.

β†’ Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ

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

Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ пользовались динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Python β€” Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠΊΡ€ΡƒΠ³ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ mypy Π² послСднСС врСмя поднялся Ρ‚Π°ΠΊΠΎΠΉ ΡˆΡƒΠΌ. А ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Python Π²Π°ΠΌ нравится ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·-Π·Π° Π΅Π³ΠΎ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° происходящСС попросту вас расстраиваСт. ΠšΠ»ΡŽΡ‡ ΠΊ цСнности статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” это ΠΌΠ°ΡΡˆΡ‚Π°Π± Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ: Ρ‡Π΅ΠΌ большС ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€” Ρ‚Π΅ΠΌ сильнСС Π²Ρ‹ ΡΠΊΠ»ΠΎΠ½ΡΠ΅Ρ‚Π΅ΡΡŒ ΠΊ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², Ρ‚Π΅ΠΌ сильнСС Π²Π°ΠΌ это ΠΏΠΎ-настоящСму Π½ΡƒΠΆΠ½ΠΎ.

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

  • ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ эта функция Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ None?
  • Π§Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ items?
  • Каков Ρ‚ΠΈΠΏ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° id: int Π»ΠΈ это, str, ΠΈΠ»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ?
  • Π”ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π±Ρ‹Ρ‚ΡŒ списком? МоТно Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ?

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

class Resource:
Β Β Β Β id: bytes
Β Β Β Β ...
Β Β Β Β def read_metadata(self,Β 
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β items: Sequence[str]) -> Dict[str, MetadataItem]:
Β Β Β Β Β Β Β Β ...

  • read_metadata Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ Π½Π΅ являСтся Optional[…].
  • АргумСнт items β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ строк. Π•Ρ‘ нСльзя ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС.
  • Атрибут id β€” это строка Π±Π°ΠΉΡ‚ΠΎΠ².

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

Π₯отя Python ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя Π½Π° Ρ€Π°Π½Π½ΠΈΡ… ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… стадиях ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Python, ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΌ вопросом: «НуТно Π»ΠΈ Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ всё Π½Π° статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС?Β».

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

Π£ примСнСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСм Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прСимущСства, ΠΈ ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹:

  • БистСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ (Π° Ρ‚Π°ΠΊ ΠΆΠ΅ β€” ΠΈ Π½Π΅ особо ΠΌΠ΅Π»ΠΊΠΈΠ΅) ошибки. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” это ΠΊΠΎΠ³Π΄Π° Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ None ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ особоС условиС.
  • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упрощаСтся Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ систСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² часто ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ сообщаСт ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. ΠŸΡ€ΠΈ этом Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ Π½Π° 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами, Ρ‡Ρ‚ΠΎ, Π² любом случаС, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎ. Нам Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² трассировки стСка для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ.
  • Π”Π°ΠΆΠ΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… mypy часто ΠΌΠΎΠΆΠ΅Ρ‚ провСсти ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² Π·Π° Π΄ΠΎΠ»ΠΈ сСкунды. А Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ тСстов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ дСсятки сСкунд ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. БистСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Ρ‘Ρ‚ программисту ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ связь ΠΈ позволяСт Π΅ΠΌΡƒ быстрСС Π΄Π΅Π»Π°Ρ‚ΡŒ своё Π΄Π΅Π»ΠΎ. Π•ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ большС ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠ΅ ΠΈ тяТёлыС Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сущности ΠΌΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΠ°Ρ‚Ρ‡Π°ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π΄ΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстрСС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ испытаний ΠΊΠΎΠ΄Π°.

IDE ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ PyCharm ΠΈΠ»ΠΈ Visual Studio Code, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ возмоТности Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² для прСдоставлСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ возмоТностСй ΠΏΠΎ автоматичСскому Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°, ΠΏΠΎ подсвСткС ошибок, ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… языковых конструкций. И это β€” лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· плюсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Ρ‘Ρ‚ типизация. Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… программистов всё это β€” Π³Π»Π°Π²Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ приносит ΠΏΠΎΠ»ΡŒΠ·Ρƒ сразу ΠΆΠ΅ послС внСдрСния Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ примСнСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ mypy, хотя Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ mypy ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ соотвСтствиС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΊΠΎΠ΄Π°.

ΠŸΡ€Π΅Π΄Ρ‹ΡΡ‚ΠΎΡ€ΠΈΡ mypy

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ mypy Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π² Π’Π΅Π»ΠΈΠΊΠΎΠ±Ρ€ΠΈΡ‚Π°Π½ΠΈΠΈ, Π² ΠšΠ΅ΠΌΠ±Ρ€ΠΈΠ΄ΠΆΠ΅, Π·Π° нСсколько Π»Π΅Ρ‚ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я присоСдинился ΠΊ Dropbox. Π― занимался, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… провСдСния докторского исслСдования, вопросом ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈ динамичСских языков. МСня вдохновляла ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ постСпСнной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π”ΠΆΠ΅Ρ€Π΅ΠΌΠΈ Π‘ΠΈΠ΅ΠΊΠ° ΠΈ Π’Π°Π»ΠΈΠ΄Π° Π’Π°Ρ…Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Typed Racket. Π― пытался Π½Π°ΠΉΡ‚ΠΈ способы использования ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ языка программирования для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² β€” ΠΎΡ‚ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… скриптов, Π΄ΠΎ ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π·, состоящих ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² строк. ΠŸΡ€ΠΈ этом ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ любого ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠ΄Ρ‚ΠΈ Π½Π° слишком большиС компромиссы. Π’Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ всСго этого Π±Ρ‹Π»Π° идСя ΠΎ постСпСнном ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊ всСстороннС протСстированному статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ. Π’ наши Π΄Π½ΠΈ эти ΠΈΠ΄Π΅ΠΈ, Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ΅, Π½ΠΎ Π² 2010 Π³ΠΎΠ΄Ρƒ это Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ всё Π΅Ρ‰Ρ‘ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ исслСдовали.

Моя ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° Π² области ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ Π±Ρ‹Π»Π° Π½Π°Ρ†Π΅Π»Π΅Π½Π° Π½Π° Python. ВмСсто Π½Π΅Π³ΠΎ я использовал малСнький Β«ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹ΠΉΒ» язык Alore. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ β€” ΠΎ Ρ‡Ρ‘ΠΌ ΠΈΠ΄Ρ‘Ρ‚ Ρ€Π΅Ρ‡ΡŒ (Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² здСсь Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹):

def Fib(n as Int) as Int
Β Β if n <= 1
Β Β Β Β return n
Β Β else
Β Β Β Β return Fib(n - 1) + Fib(n - 2)
Β Β end
end

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

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

На самом Π΄Π΅Π»Π΅, язык, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΅ΠΉ систСмой Ρ‚ΠΈΠΏΠΎΠ², Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Python: это Π±Ρ‹Π» Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Python ΠΈΠ·-Π·Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ синтаксиса Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² Python 3.

ВыглядСло это ΠΊΠ°ΠΊ смСсь Java ΠΈ Python:

int fib(int n):
Β Β Β Β if n <= 1:
Β Β Β Β Β Β Β Β return n
Β Β Β Β else:
Β Β Β Β Β Β Β Β return fib(n - 1) + fib(n - 2)

Одна ΠΈΠ· ΠΌΠΎΠΈΡ… ΠΈΠ΄Π΅ΠΉ Π² Ρ‚ΠΎ врСмя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡƒΡ‚Ρ‘ΠΌ компиляции этой разновидности Python Π² C, ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ JVM. Π― продвинулся Π΄ΠΎ стадии написания ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° компилятора, Π½ΠΎ оставил эту Π·Π°Ρ‚Π΅ΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² ΠΈ сама ΠΏΠΎ сСбС выглядСла достаточно ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ.

Π―, Π² ΠΈΡ‚ΠΎΠ³Π΅, прСдставил ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ PyCon 2013 Π² Π‘Π°Π½Ρ‚Π°-ΠšΠ»Π°Ρ€Π΅. Π’Π°ΠΊ ΠΆΠ΅ я ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ» ΠΎΠ± этом с Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россумом, с Π²Π΅Π»ΠΈΠΊΠΎΠ΄ΡƒΡˆΠ½Ρ‹ΠΌ ΠΏΠΎΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Π΄ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Python. Он ΡƒΠ±Π΅Π΄ΠΈΠ» мСня ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ собствСнного синтаксиса ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ стандартного синтаксиса Python 3. Python 3 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

def fib(n: int) -> int:
Β Β Β Β if n <= 1:
Β Β Β Β Β Β Β Β return n
Β Β Β Β else:
Β Β Β Β Β Β Β Β return fib(n - 1) + fib(n - 2)

МнС понадобилось ΠΏΠΎΠΉΡ‚ΠΈ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ компромиссы (Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ…ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ я ΠΈΠ·ΠΎΠ±Ρ€Ρ‘Π» собствСнный синтаксис ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому). Π’ частности, Python 3.3, самая свСТая вСрсия языка Π½Π° Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π― обсудил с Π“Π²ΠΈΠ΄ΠΎ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ возмоТности синтаксичСского оформлСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ позволяло Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ поставлСнной Ρ†Π΅Π»ΠΈ, Π½ΠΎ выглядСло нСсколько Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ (Python 3.6 Π΄Π°Π» Π½Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ приятный синтаксис):

products = []Β  # type: List[str]Β  # Eww

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Python 2, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Ρ‚ встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ²:

f fib(n):
Β Β Β Β # type: (int) -> int
Β Β Β Β if n <= 1:
Β Β Β Β Β Β Β Β return n
Β Β Β Β else:
Β Β Β Β Β Β Β Β return fib(n - 1) + fib(n - 2)

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

Π“Π²ΠΈΠ΄ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡƒΠ±Π΅Π΄ΠΈΠ» мСня ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ Dropbox послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я Π·Π°Ρ‰ΠΈΡ‚ΠΈΠ» Π²Ρ‹ΠΏΡƒΡΠΊΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ΡƒΡ‚ начинаСтся самоС интСрСсноС Π² истории mypy.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ слСдуСт…

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Если Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Python β€” просим Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ Π½Π° этом языкС.

ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΈΠΏΠΎΠ² 4 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² строк Python-ΠΊΠΎΠ΄Π°. Π§Π°ΡΡ‚ΡŒ 1
ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΈΠΏΠΎΠ² 4 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² строк Python-ΠΊΠΎΠ΄Π°. Π§Π°ΡΡ‚ΡŒ 1

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

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