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

БСгодня ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π² Dropbox ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² строк Python-ΠΊΠΎΠ΄Π°.

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

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

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² (PEP 484)

ΠœΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Π΅ экспСримСнты с mypy Π² Dropbox Π²ΠΎ врСмя Hack Week 2014. Hack Week β€” это мСроприятиС, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Dropbox Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Π½Π΅Π΄Π΅Π»ΠΈ. Π’ это врСмя сотрудники ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Ρ‡Π΅ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ! НСкоторыС ΠΈΠ· самых Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹Ρ… тСхнологичСских ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Dropbox Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈΡΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… мСроприятиях. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого экспСримСнта ΠΌΡ‹ сдСлали Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ mypy выглядит ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‰Π΅, хотя этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠΊΠ° Π΅Ρ‰Ρ‘ Π½Π΅ Π±Ρ‹Π» Π³ΠΎΡ‚ΠΎΠ² для ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ использования.

Π’ Ρ‚ΠΎ врСмя Π² Π²ΠΎΠ·Π΄ΡƒΡ…Π΅ Π²ΠΈΡ‚Π°Π»Π° идСя ΠΎ стандартизации систСм Π²Ρ‹Π΄Π°Ρ‡ΠΈ подсказок ΠΏΠΎ Ρ‚ΠΈΠΏΠ°ΠΌ Python. Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», начиная с Python 3.0 ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ аннотациями Ρ‚ΠΈΠΏΠΎΠ² для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½ΠΎ это Π±Ρ‹Π»ΠΈ всСго лишь ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ выраТСния, Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… синтаксиса ΠΈ сСмантики. Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ эти Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, ΠΏΠΎ большСй части, просто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ. ПослС Hack Week ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ стандартизациСй сСмантики. Π­Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ появлСнию PEP 484 (Π½Π°Π΄ этим Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ совмСстно Ρ‚Ρ€ΡƒΠ΄ΠΈΠ»ΠΈΡΡŒ Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум, Π›ΡƒΠΊΠ°Ρˆ Π›Π°Π½Π³Π° ΠΈ я).

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

ΠŸΡ€ΠΈΠ½ΡΡ‚Ρ‹ΠΉ Π² ΠΈΡ‚ΠΎΠ³Π΅ синтаксис подсказок ΠΏΠΎ Ρ‚ΠΈΠΏΠ°ΠΌ Π±Ρ‹Π» ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ Π² Ρ‚ΠΎ врСмя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» mypy. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ PEP 484 Π²Ρ‹ΡˆΠ΅Π» вмСстС с Python 3.5 Π² 2015 Π³ΠΎΠ΄Ρƒ. Python большС Π½Π΅ Π±Ρ‹Π» языком, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. МнС нравится Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом событии ΠΊΠ°ΠΊ ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ…Π΅ Π² истории Python.

Начало ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

Π’ ΠΊΠΎΠ½Ρ†Π΅ 2015 Π³ΠΎΠ΄Π° Π² Dropbox, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ mypy, Π±Ρ‹Π»Π° создана ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. Π’ΡƒΠ΄Π° Π²Ρ…ΠΎΠ΄ΠΈΠ»ΠΈ Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум, Π“Ρ€Π΅Π³ ΠŸΡ€Π°ΠΉΡ ΠΈ Дэвид Π€ΠΈΡˆΠ΅Ρ€. Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ситуация Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΡ€Π°ΠΉΠ½Π΅ быстро. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ прСпятствиСм Π½Π° ΠΏΡƒΡ‚ΠΈ роста mypy стала ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Как я ΡƒΠΆΠ΅ Π½Π°ΠΌΠ΅ΠΊΠ°Π» Π²Ρ‹ΡˆΠ΅, Π² Ρ€Π°Π½Π½ΠΈΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ развития ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° я Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»ΡΠ» ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСвСсти Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ mypy Π½Π° язык C, Π½ΠΎ эта идСя Π±Ρ‹Π»Π° ΠΏΠΎΠΊΠ° Π²Ρ‹Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Π° ΠΈΠ· списков. ΠœΡ‹ застряли Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для запуска систСмы использовался ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ CPython, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ отличаСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, достаточной для инструмСнтов Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ mypy. (ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ PyPy, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ рСализация Python с JIT-компилятором, Ρ‚ΠΎΠΆΠ΅ Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³.)

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

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

Π­Ρ‚ΠΎ Π±Ρ‹Π» ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ быстрого ΠΈ СстСствСнного внСдрСния систСмы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π² Dropbox. Π£ нас, ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ 2016 Π³ΠΎΠ΄Π°, Π±Ρ‹Π»ΠΎ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 420000 строк Python-ΠΊΠΎΠ΄Π° с аннотациями Ρ‚ΠΈΠΏΠΎΠ². МногиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ с энтузиазмом ΠΎΡ‚Π½Π΅ΡΠ»ΠΈΡΡŒ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΈΠΏΠΎΠ². Π’ Dropbox mypy пользовались всё большС ΠΊΠΎΠΌΠ°Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

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

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ!

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

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

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

Π•Ρ‰Ρ‘ большС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ!

ВмСстС с ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я рассказывал Π²Ρ‹ΡˆΠ΅, Π΄Π΅ΠΌΠΎΠ½ mypy практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° программист часто запускаСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ², внося измСнСния Π² нСбольшоС количСство Ρ„Π°ΠΉΠ»ΠΎΠ². Однако ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы Π² Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ благоприятном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π΅Ρ‘ использования всё Π΅Ρ‰Ρ‘ Π±Ρ‹Π»Π° Π΄Π°Π»Π΅ΠΊΠ° ΠΎΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ. Чистый запуск mypy ΠΌΠΎΠ³ Π·Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ 15 ΠΌΠΈΠ½ΡƒΡ‚. А это Π±Ρ‹Π»ΠΎ ΠΊΡƒΠ΄Π° большС, Ρ‡Π΅ΠΌ нас устроило Π±Ρ‹. ΠšΠ°ΠΆΠ΄ΡƒΡŽ нСдСлю ситуация ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ всё Ρ…ΡƒΠΆΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ программисты ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Наши ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ всё Π΅Ρ‰Ρ‘ ΠΆΠ°ΠΆΠ΄Π°Π»ΠΈ большСй ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΌΡ‹ ΠΆΠ΅ с ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠΉΡ‚ΠΈ ΠΈΠΌ навстрСчу.

ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ€Π°Π½Π½ΠΈΡ… ΠΈΠ΄Π΅ΠΉ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ mypy. А ΠΈΠΌΠ΅Π½Π½ΠΎ β€” ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ Python-ΠΊΠΎΠ΄Π° Π² C-ΠΊΠΎΠ΄. ЭкспСримСнты с Cython (это β€” систСма, которая позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, написанный Π½Π° Python, Π² C-ΠΊΠΎΠ΄) Π½Π΅ Π΄Π°Π»ΠΈ Π½Π°ΠΌ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ ускорСния, поэтому ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π²ΠΎΠ·Ρ€ΠΎΠ΄ΠΈΡ‚ΡŒ идСю написания собствСнного компилятора. Π’Π°ΠΊ ΠΊΠ°ΠΊ кодовая Π±Π°Π·Π° mypy (написанная Π½Π° Python) ΡƒΠΆΠ΅ содСрТала Π² сСбС всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ², Π½Π°ΠΌ казалось стоящСй ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы. Π― быстро создал ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ этой ΠΈΠ΄Π΅ΠΈ. Он ΠΏΠΎΠΊΠ°Π·Π°Π» Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΈΠΊΡ€ΠΎ-Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°Ρ… Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 10-ΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΉ рост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Наша идСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² Π‘-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ срСдствами Cython, ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ², ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ систСмами ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ²). ΠœΡ‹, фактичСски, ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ пСрСвСсти Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ mypy с Python Π½Π° язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» создан статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ выглядСл (ΠΈ, ΠΏΠΎ большСй части, Ρ€Π°Π±ΠΎΡ‚Π°Π» Π±Ρ‹) Π² точности Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Python. (Π­Ρ‚Π° Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΡŠΡΠ·Ρ‹ΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ стала Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° mypy. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ рСализация mypy Π±Ρ‹Π»Π° написана Π½Π° Alore, ΠΏΠΎΡ‚ΠΎΠΌ Π±Ρ‹Π» синтаксичСский Π³ΠΈΠ±Ρ€ΠΈΠ΄ Java ΠΈ Python).

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ mypyc (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½, Π² качСствС Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для Π°Π½Π°Π»ΠΈΠ·Π° Ρ‚ΠΈΠΏΠΎΠ² mypy), оказался ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ вСсьма ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ. Π’ Ρ†Π΅Π»ΠΎΠΌ β€” ΠΌΡ‹ достигли ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 4-ΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ускорСния частых запусков mypy Π±Π΅Π· использования ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ядра ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° mypyc заняла Ρƒ малСнькой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ…ΠΎΠ΄ΠΈΠ»ΠΈ Майкл Π‘Π°Π»Π»ΠΈΠ²Π°Π½, Иван ЛСвкивский, Π₯ью Π₯Π°Π½ ΠΈ я, ΠΎΠΊΠΎΠ»ΠΎ 4 ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€Π½Ρ‹Ρ… мСсяцСв. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌ Ρ€Π°Π±ΠΎΡ‚ Π±Ρ‹Π» ΠΊΡƒΠ΄Π° ΠΌΠ΅Π½Π΅Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ понадобился для пСрСписывания mypy, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° C++ ΠΈΠ»ΠΈ Π½Π° Go. Π”Π° ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ внСсти Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ внСсти ΠΏΡ€ΠΈ пСрСписывании Π΅Π³ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС. ΠœΡ‹, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, надСялись Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ смоТСм довСсти mypyc Π΄ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ уровня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌ смогли Π±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, для компиляции ΠΈ ускорСния своСго ΠΊΠΎΠ΄Π°, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ программисты ΠΈΠ· Dropbox.

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

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

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

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! КакиС впСчатлСния Ρƒ вас Π²Ρ‹Π·Π²Π°Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ mypy Π² Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ Π΅Π³ΠΎ сущСствовании?

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

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

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