ΠΠ½Π΅Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π²ΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π° Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π² 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 Π³. Π²Π΅ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Ρ ΠΌΠ΅ Ρ ΠΎΠΊΠΎΠ»ΠΎ 420 000 ΡΠ΅Π΄Π° Python ΠΊΠΎΠ΄ Ρ Π°Π½ΠΎΡΠ°ΡΠΈΠΈ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅. ΠΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈenthusiΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠ΅Ρ Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅. Π Dropbox mypy Π±Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΅ΠΊΠΈΠΏΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ.
ΠΡΠΈΡΠΊΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°ΡΠ΅ Π΄ΠΎΠ±ΡΠ΅ ΡΠΎΠ³Π°Π²Π°, Π½ΠΎ Π½ΠΈ ΠΎΡΡΠ°Π²Π°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ°. ΠΠ°ΠΏΠΎΡΠ½Π°Ρ ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΈ Π²ΡΡΡΠ΅ΡΠ½ΠΈ Π°Π½ΠΊΠ΅ΡΠΈ ΡΡΠ΅Π΄ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅, Π·Π° Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠΎΠΈ Π²ΡΠΏΡΠΎΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΠ΅Π½ΠΈ ΠΏΡΡΠ²ΠΎ (ΡΠ°Π·ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° ΠΈ Π΄Π½Π΅Ρ). ΠΠ°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡΠ΅, ΠΊΠ°ΠΊΡΠΎ ΡΡΠ°Π½Π° ΡΡΠ½ΠΎ, Π±ΡΡ Π° Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ. ΠΡΡΠ²Π°ΡΠ° - Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π° Ρ ΡΠΈΠΏΠΎΠ²Π΅, Π²ΡΠΎΡΠ°ΡΠ° - Π΄Π° Π½Π°ΠΊΠ°ΡΠ°ΠΌΠ΅ mypy Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ. Π‘ΡΠ²ΡΠ΅ΠΌ ΡΡΠ½ΠΎ Π±Π΅ΡΠ΅, ΡΠ΅ Π½Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° mypy ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π·Π°Π²ΡΡΡΠ΅Π½Π°. Π‘ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΡΡΠ·Π½Π°ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π·ΠΈ Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ, ΡΠ΅ Π·Π°Ρ Π²Π°Π½Π°Ρ ΠΌΠ΅ Ρ ΡΡΡ Π½ΠΎΡΠΎ ΡΠ΅ΡΠ°Π²Π°Π½Π΅.
ΠΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ!
ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠΊΠΎΡΠΈΡ Π° mypy, Π½ΠΎ ΡΠΎΠ·ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π±Π΅ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π±ΡΡΠ·. ΠΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΠ½Π΅ΠΌΠ°Ρ Π° ΠΎΠΊΠΎΠ»ΠΎ ΠΌΠΈΠ½ΡΡΠ°. ΠΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΡΠΎΠ²Π° Π±ΡΡ Π° ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈ. Π’ΠΎΠ²Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½ΡΠΌΠ° Π΄Π° ΠΈΠ·Π½Π΅Π½Π°Π΄Π° Π½ΠΈΠΊΠΎΠ³ΠΎ, ΡΠ°Π±ΠΎΡΠΈΠ» Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Python. ΠΠΌΠ°Ρ ΠΌΠ΅ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ ΡΡΠΎΡΠΈΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΊΠΎΡΠ²Π΅Π½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ²Π°ΡΠ΅ ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅. ΠΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΡΠ°ΠΉΠ» Π² ΡΠΈΠΊΡΠ»Π° Π½Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ΅ Π±Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½, mypy ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π²Π»ΠΈΠ·Π°Ρ Π² ΡΠΎΠ·ΠΈ ΡΠΈΠΊΡΠ», Π° ΡΠ΅ΡΡΠΎ ΠΈ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΎΡ ΡΠΎΠ·ΠΈ ΡΠΈΠΊΡΠ». ΠΠ΄ΠΈΠ½ ΠΎΡ ΡΠ΅Π·ΠΈ ΡΠΈΠΊΠ»ΠΈ Π±Π΅ΡΠ΅ ΠΏΠ΅ΡΠ°Π»Π½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡΡ βΠ²ΡΠ·Π΅Π» Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅β, ΠΊΠΎΠΉΡΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΠΈ Π² Dropbox. ΠΠ΅Π΄Π½ΡΠΆ ΡΠ°Π·ΠΈ ΡΡΡΡΠΊΡΡΡΠ° ΡΡΠ΄ΡΡΠΆΠ°ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΎΡΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠ°ΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΡΠΎ ΡΠ΅ΡΡΠΎΠ²Π΅ Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Ρ Π°, ΠΏΡΡΠΊΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΡΠ²Π΅Π½ΠΎ, ΠΈ ΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΈ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΡΠ½ ΠΊΠΎΠ΄Π°.
ΠΠΈΠ΅ ΠΎΠ±ΠΌΠΈΡΠ»ΡΡ
ΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° βΡΠ°Π·ΠΏΠ»ΠΈΡΠ°Π½Π΅β Π½Π° ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π½ΠΎ Π½ΡΠΌΠ°Ρ
ΠΌΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΡΠΎΠ²Π°. ΠΠΌΠ°ΡΠ΅ ΡΠ²ΡΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄, Ρ ΠΊΠΎΠΉΡΠΎ Π½Π΅ Π±ΡΡ
ΠΌΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ. Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΏΡΠΈΠ±Π΅Π³Π½Π°Ρ
ΠΌΠ΅ Π΄ΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄. Π Π΅ΡΠΈΡ
ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ°ΠΊΠ°, ΡΠ΅ mypy Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π±ΡΡΠ·ΠΎ Π΄ΠΎΡΠΈ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° βΠ²ΡΠ·Π»ΠΈ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅β. ΠΠΎΡΡΠΈΠ³Π°Ρ
ΠΌΠ΅ ΡΠ°Π·ΠΈ ΡΠ΅Π» Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π΄Π΅ΠΌΠΎΠ½Π° mypy. ΠΠ΅ΠΌΠΎΠ½ΡΡ Π΅ ΡΡΡΠ²ΡΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° Π΄Π²Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΡΡΠ²ΠΎ β ΡΠΎΠΉ Π΄ΡΡΠΆΠΈ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠ»Π°ΡΠ° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΡΠΈ Π²ΡΠ΅ΠΊΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° mypy Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π°Ρ ΠΊΠ΅ΡΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Ρ
ΠΈΠ»ΡΠ΄ΠΈ ΠΈΠΌΠΏΠΎΡΡΠ½Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎΡΠΎ β ΡΠΎΠΉ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ, Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΡΡΡΡΠΊΡΡΡΠ½ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠΈ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΡΠ΅ ΡΡΠ±Π΅ΠΊΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π’ΡΡΠ±Π²Π° Π»ΠΈ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ»Π° ΡΠΎΠ»Ρ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»? ΠΠ»ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΠ»ΡΠΌΠ° ΡΠΎΠ»Ρ Π·Π° Π²ΡΠΈΡΠΊΠΎ? Π Π°ΠΊΠΎ Π½Π΅ Π΅ ΡΠΎΠ»Ρ, ΡΠΎ ΠΊΡΠ΄Π΅ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ β Π² pre ΠΈΠ»ΠΈ Π² post? ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° bar, ΡΠΎ ΠΈΠΌΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ Π’ΡΡΠ±Π²Π° Π»ΠΈ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ»Π° ΡΠΎΠ»Ρ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»? ΠΠ»ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΠ»ΡΠΌΠ° ΡΠΎΠ»Ρ Π·Π° Π²ΡΠΈΡΠΊΠΎ? Π Π°ΠΊΠΎ Π½Π΅ Π΅ ΡΠΎΠ»Ρ, ΡΠΎ ΠΊΡΠ΄Π΅ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ β Π² pre ΠΈΠ»ΠΈ Π² post? ΠΎΡ bar. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΉΠ»ΡΡ Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ β Π΄Π΅ΠΌΠΎΠ½ΡΡ ΠΏΡΡΠ²ΠΎ, Π² ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ». Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠΎΠΉ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ», Π²ΠΈΠ΄ΠΈΠΌΠΈ Π½Π°Π²ΡΠ½, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈΡΠ΅ ΡΠΈΠ³Π½Π°ΡΡΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅. ΠΠ΅ΠΌΠΎΠ½ΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄Π΅ΡΠ°ΠΉΠ»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΌΠΎ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΡΠΈ ΡΠ°ΠΊΡΠ² ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π½Π΅ Π±Π΅ΡΠ΅ Π»Π΅ΡΠ½Π° ΡΠ°Π±ΠΎΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° mypy Π±Π΅ΡΠ΅ ΡΠΈΠ»Π½ΠΎ Π½Π°ΡΠΎΡΠ΅Π½Π° ΠΊΡΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ. Π’ΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΠΌΠ΅ Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΡΠ°Π½ΠΈΡΠ½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π² ΠΊΠΎΠ΄Π° Π½Π΅ΡΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ²Π° ΡΠ΅ ΡΠ»ΡΡΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π° ΠΊΠ»Π°Ρ Π±ΡΠ΄Π΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ Π½ΠΎΠ² ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΊΠ»Π°Ρ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»Π½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠ° Π½Π°Ρ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ Π³ΠΎΠ»ΡΠΌΠ° ΠΏΠΎΠ±Π΅Π΄Π°.
ΠΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ!
ΠΠΌΠ΅ΡΡΠΎ Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅, Π·Π° ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΏΠΎ-Π³ΠΎΡΠ΅, Π΄Π΅ΠΌΠΎΠ½ΡΡ mypy ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ΅ΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡ ΡΠ΅ΡΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅, ΠΏΡΠ°Π²Π΅ΠΉΠΊΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΌΠ°Π»ΡΠΊ Π±ΡΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π² Π½Π°ΠΉ-Π½Π΅Π±Π»Π°Π³ΠΎΠΏΡΠΈΡΡΠ½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π²ΡΠ΅ ΠΎΡΠ΅ Π΄Π°Π»Π΅Ρ Π½Π΅ Π±Π΅ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½Π°. Π§ΠΈΡΡΠΎΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° mypy ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ½Π΅ΠΌΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 15 ΠΌΠΈΠ½ΡΡΠΈ. Π ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ Π΄ΠΎΡΡΠ° ΠΏΠΎΠ²Π΅ΡΠ΅, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π±ΠΈΡ ΠΌΠ΅ ΠΆΠ΅Π»Π°Π»ΠΈ. Π‘ Π²ΡΡΠΊΠ° ΠΈΠ·ΠΌΠΈΠ½Π°Π»Π° ΡΠ΅Π΄ΠΌΠΈΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡΡΠ° ΡΡΠ°Π²Π°ΡΠ΅ Π²ΡΠ΅ ΠΏΠΎ-Π»ΠΎΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°Ρ Π° Π΄Π° ΠΏΠΈΡΠ°Ρ Π½ΠΎΠ² ΠΊΠΎΠ΄ ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡ Π°Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΊΡΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡ ΠΊΠΎΠ΄. ΠΠ°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΆΠ°Π΄ΡΠ²Π°Ρ Π° Π·Π° ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΈ Π½ΠΈΠ΅ Ρ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΠ²ΠΈΠ΅ Π±ΡΡ ΠΌΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΠΈΠΌ ΡΠ΅ ΠΎΡΠ·ΠΎΠ²Π΅ΠΌ.
Π Π΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ Π΅Π΄Π½Π° ΠΎΡ ΡΠ°Π½Π½ΠΈΡΠ΅ ΠΈΠ΄Π΅ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ mypy. Π ΠΈΠΌΠ΅Π½Π½ΠΎ β ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Python ΠΊΠΎΠ΄ Π² C ΠΊΠΎΠ΄. ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ΅ Ρ Cython (ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΠ°Π½ΡΠ»Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Python Π² C ΠΊΠΎΠ΄) Π½Π΅ Π½ΠΈ Π΄ΠΎΠ½Π΅ΡΠΎΡ Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° Π²ΡΠ·ΡΠΎΠ΄ΠΈΠΌ ΠΈΠ΄Π΅ΡΡΠ° Π·Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π½Π° mypy (Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Python) Π²Π΅ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ Π°Π½ΠΎΡΠ°ΡΠΈΠΈ, Π½ΠΈ ΡΠ΅ ΡΡΠΎΡΠΈ, ΡΠ΅ Π΅ Π΄ΠΎΡΡΠΎΠΉΠ½ΠΎ Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅Π·ΠΈ Π°Π½ΠΎΡΠ°ΡΠΈΠΈ Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΡΡΠ·ΠΎ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΈΠ΄Π΅Ρ. Π’ΠΎΠΉ ΠΏΠΎΠΊΠ°Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΄Π΅ΡΠ΅ΡΠΊΡΠ°ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΏΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠΈΠΊΡΠΎ-Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅. ΠΠ΄Π΅ΡΡΠ° Π½ΠΈ Π±Π΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ 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
