Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ Π²ΡΠΎΡΡΡ ΡΠ°ΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π² 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-ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² Π‘-ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ 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