ΠΠ½Π΅Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π²ΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π° Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π² Dropbox ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Ρ Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ Π² Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΡΠ΅Π΄Π° Python ΠΊΠΎΠ΄.
β
ΠΡΠΈΡΠΈΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ (PEP 484)
ΠΠΈΠ΅ ΠΏΡΠΎΠ²Π΅Π΄ΠΎΡ ΠΌΠ΅ ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ Ρ mypy Π² Dropbox ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Hack Week 2014. Hack Week Π΅ ΡΡΠ±ΠΈΡΠΈΠ΅, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΎΡ Dropbox Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π½Π° ΡΠ΅Π΄ΠΌΠΈΡΠ°. ΠΡΠ΅Π· ΡΠΎΠ²Π° Π²ΡΠ΅ΠΌΠ΅ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Π²ΡΡΡ Ρ ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ ΠΈΠΌ ΠΆΠ΅Π»Π°Π΅! ΠΡΠΊΠΎΠΈ ΠΎΡ Π½Π°ΠΉ-ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° Dropbox Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΡ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ·ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠ΅ mypy ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΠ±Π΅ΡΠ°Π²Π°ΡΠΎ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π±Π΅ΡΠ΅ Π³ΠΎΡΠΎΠ² Π·Π° ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.
ΠΠΎ ΡΠΎΠ²Π° Π²ΡΠ΅ΠΌΠ΅ Π²ΠΈΡΠ°Π΅ΡΠ΅ ΠΈΠ΄Π΅ΡΡΠ° Π·Π° ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π·Π° ΡΠΈΠΏΠΎΠ²Π΅ Python. ΠΠ°ΠΊΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ , ΠΎΡ Python 3.0 Π±Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π°Π½ΠΎΡΠ°ΡΠΈΠΈ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ Π·Π° ΡΡΠ½ΠΊΡΠΈΠΈ, Π½ΠΎ ΡΠ΅ Π±ΡΡ Π° ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ, Π±Π΅Π· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅Π·ΠΈ Π°Π½ΠΎΡΠ°ΡΠΈΠΈ Π³Π»Π°Π²Π½ΠΎ ΡΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Ρ Π°. Π‘Π»Π΅Π΄ Hack Week Π·Π°ΠΏΠΎΡΠ½Π°Ρ ΠΌΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌ Π²ΡΡΡ Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°ΡΠ°. Π’Π°Π·ΠΈ ΡΠ°Π±ΠΎΡΠ° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΠΎΡΠ²Π°ΡΠ° Π½Π° (ΡΠΎΠ·ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π±Π΅ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΡΡΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΎΡ ΠΠ²ΠΈΠ΄ΠΎ Π²Π°Π½ Π ΠΎΡΡΡΠΌ, ΠΡΠΊΠ°Ρ ΠΠ°Π½Π³Π° ΠΈ ΠΌΠ΅Π½).
ΠΠ°ΡΠΈΡΠ΅ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΎΡ Π΄Π²Π΅ ΡΡΡΠ°Π½ΠΈ. ΠΡΡΠ²ΠΎ, Π½ΠΈΠ΅ ΡΠ΅ Π½Π°Π΄ΡΠ²Π°Ρ ΠΌΠ΅, ΡΠ΅ ΡΡΠ»Π°ΡΠ° Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° 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 ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² C ΠΌΠΎΠ΄ΡΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° 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, ΠΊΠΎΠ³Π°ΡΠΎ Π·Π° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ ΡΡΡ ΡΠ΅ Π·Π° Π½Π΅Π³ΠΎ?
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
