ΠŸΡŠΡ‚ΡΡ‚ към ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ 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 ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°Ρ€Π°Π΄ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π°Ρ‚Π° ΠΌΡƒ типизация, Π° всичко Ρ‚ΠΎΠ²Π° Π²ΠΈ разстройва. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ към стойността Π½Π° статичната типизация Π΅ ΠΌΠ°Ρ‰Π°Π±Π° Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π°: ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-голям Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π²ΠΈ, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-силно сС насочватС към статичната типизация, ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΠΈ Π΅ наистина Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅ достигнал Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈ ΠΎΡ‚ дСсСтки хиляди Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄ ΠΈ Π΅ установСно, Ρ‡Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π½Π΅Π³ΠΎ работят няколко програмисти. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΡ‚ ΠΎΠΏΠΈΡ‚, Ρ‡Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π° ΠΌΡƒ Ρ‰Π΅ бъдС ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅Ρ‚ΠΎ Π½Π° продуктивността Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅. Π‘Π΅Π· Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ чСсто Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠ²ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ трябва Π΄Π° ΠΏΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π½Π° функцията, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ стойности ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Ρ€ΡŠΡ‰Π° функцията. Π•Ρ‚ΠΎ някои Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π±Π΅Π· Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ:

  • МоТС Π»ΠΈ Ρ‚Π°Π·ΠΈ функция Π΄Π° Π²ΡŠΡ€Π½Π΅ Няма?
  • Какъв Ρ‚ΠΈΠΏ трябва Π΄Π° бъдС Ρ‚ΠΎΠ·ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ items?
  • Какъв Π΅ Ρ‚ΠΈΠΏΡŠΡ‚ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΠ΄: int Π»ΠΈ Π΅ Ρ‚ΠΎΠΉ, str, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π΅ някакъв потрСбитСлски Ρ‚ΠΈΠΏ?
  • Врябва Π»ΠΈ Ρ‚ΠΎΠ·ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄Π° бъдС списък? МоТС Π»ΠΈ Π΄Π° сС ΠΏΠΎΠ΄Π°Π΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ?

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ слСдния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ ΠΊΠΎΠ΄, снабдСн с Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, ΠΈ сС ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, Ρ‰Π΅ установитС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ проста Π·Π°Π΄Π°Ρ‡Π°:

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

  • read_metadata Π½Π΅ Π²Ρ€ΡŠΡ‰Π° Няма, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Π½ΠΈΡΡ‚ Ρ‚ΠΈΠΏ Π½Π΅ Π΅ Optional[…].
  • АргумСнт items β€” Ρ‚ΠΎΠ²Π° Π΅ послСдоватСлност ΠΎΡ‚ Π½ΠΈΠ·ΠΎΠ²Π΅. НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΡ‚Π΅Ρ€ΠΈΡ€Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Ρ€Π΅Π΄.
  • ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ ΠΈΠ΄ β€” Ρ‚ΠΎΠ²Π° Π΅ Π±Π°ΠΉΡ‚ΠΎΠ²Π° Π½ΠΈΠ·.

Π’ идСалния свят ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡ‡Π°ΠΊΠ²Π°ΠΌΠ΅, Ρ‡Π΅ всички ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ нюанси Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ описани Π² Π²Π³Ρ€Π°Π΄Π΅Π½Π° докумСнтация (docstring). Но ΠΎΠΏΠΈΡ‚ΡŠΡ‚ ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° докумСнтация Π² ΠΊΠΎΠ΄Π°, с ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ, чСсто липсва. Π”ΠΎΡ€ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°Π²Π° докумСнтация ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°, няма ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°ΠΌΠ΅ Π½Π° Π½Π΅ΠΉΠ½Π°Ρ‚Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π° точност. Π’Π°Π·ΠΈ докумСнтация ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС нСясна, Π½Π΅Ρ‚ΠΎΡ‡Π½Π° ΠΈ прСдоставя ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π’ Π³ΠΎΠ»Π΅ΠΌΠΈ Π΅ΠΊΠΈΠΏΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° станС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ остро.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Python ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π² Ρ€Π°Π½Π½ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Python, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ‚ с ТизнСноваТния Π²ΡŠΠΏΡ€ΠΎΡ: β€žΠ’Ρ€ΡΠ±Π²Π° Π»ΠΈ Π΄Π° ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅ΠΌ всичко Π½Π° Π΅Π·ΠΈΠΊ със статични Ρ‚ΠΈΠΏΠΎΠ²Π΅?β€œ

БистСмитС Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΊΠ°Ρ‚ΠΎ mypy, Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ горСпосочСната ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, прСдоставяйки Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° описаниС Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ провСрявайки, Ρ‡Π΅ описанията ΠΈΠΌ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° рСализацията Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ (ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, провСрявайки тяхното ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅). ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π΅, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ систСми Π½ΠΈ прСдоставят Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ стриктно ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° докумСнтация.

Има ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ прСдимства Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ систСми, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ Π½Π΅ са Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ:

  • БистСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ някои ΠΌΠ°Π»ΠΊΠΈ (ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π΅ особСно ΠΌΠ°Π»ΠΊΠΈ) Π³Ρ€Π΅ΡˆΠΊΠΈ. Π’ΠΈΠΏΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π°Π±Ρ€Π°Π²ΠΈΠΌ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ стойност Няма ΠΈΠ»ΠΈ някакво Π΄Ρ€ΡƒΠ³ΠΎ спСциално условиС.
  • Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΡŠΡ‚ Π½Π° ΠΊΠΎΠ΄Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ сС опростява, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ систСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ чСсто ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠΊΠ°Π·Π²Π° какъв ΠΊΠΎΠ΄ трябва Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½. Π’ допълнСниС, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°ΠΌΠ΅ Π½Π° 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]  # Π£Ρ„

ΠšΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ с Ρ‚ΠΈΠΏΠΎΠ²Π΅, освСн Ρ‚ΠΎΠ²Π°, сС ΠΎΠΊΠ°Π·Π°Ρ…Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Python 2, Π² ΠΊΠΎΠΉΡ‚ΠΎ няма Π²Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅:

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

Оказа сС, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ) компромиси Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ нямат особСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” прСдимствата Π½Π° статичната типизация Π΄ΠΎΠ²Π΅Π΄ΠΎΡ…Π° Π΄ΠΎ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π·Π°Π±Ρ€Π°Π²ΠΈΡ…Π° Π·Π° Π½Π΅ съвсСм идСалния синтаксис. Въй ΠΊΠ°Ρ‚ΠΎ сСга Π² Python ΠΊΠΎΠ΄, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ…Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…Π° спСциални синтактични конструкции, ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ инструмСнти ΠΈ процСси Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ…Π° Π΄Π° работят Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ улСсни усвояванСто Π½Π° новия инструмСнт ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅.

Π“Π²ΠΈΠ΄ΠΎ, освСн Ρ‚ΠΎΠ²Π°, ΠΌΠ΅ ΡƒΠ±Π΅Π΄ΠΈ Π΄Π° сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½Ρ към Dropbox слСд ΠΊΠ°Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ… Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Π°Ρ‚Π° си Ρ€Π°Π±ΠΎΡ‚Π°. Π’ΡƒΠΊ Π·Π°ΠΏΠΎΡ‡Π²Π° Π½Π°ΠΉ-интСрСсното Π² историята Π½Π° mypy.

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ слСдва…

Π£Π²Π°ΠΆΠ°Π΅ΠΌΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Python, моля, сподСлСтС какъв ΠΌΠ°Ρ‰Π°Π± Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ.

ΠŸΡŠΡ‚ΡΡ‚ към ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ 4 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° Python ΠΊΠΎΠ΄. Част 1
ΠŸΡŠΡ‚ΡΡ‚ към ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ 4 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° Python ΠΊΠΎΠ΄. Част 1

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster