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

ДнСс ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌΠ΅ Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° част ΠΎΡ‚ ΠΏΡ€Π΅Π²ΠΎΠ΄Π° Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Dropbox сС справя с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° Ρ‚ΠΈΠΏΠ° Π½Π° ΠΊΠΎΠ΄Π° Π½Π° Python.

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

Dropbox пишС ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° Python. Π’ΠΎΠ²Π° Π΅ Π΅Π·ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° back-end услуги, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° настолни клиСнтски прилоТСния. НиС ΡΡŠΡ‰ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Go, TypeScript ΠΈ Rust, Π½ΠΎ Python Π΅ основният Π½ΠΈ Π΅Π·ΠΈΠΊ. Имайки ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ нашия ΠΌΠ°Ρ‰Π°Π±, Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄ Π½Π° Python, сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΡ‚ΠΎ писанС Π½Π° Ρ‚Π°ΠΊΡŠΠ² ΠΊΠΎΠ΄ Π½Π΅Π½ΡƒΠΆΠ½ΠΎ услоТнява Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π° сСриозно Π΄Π° влияС Π²ΡŠΡ€Ρ…Ρƒ производитСлността Π½Π° Ρ‚Ρ€ΡƒΠ΄Π°. Π—Π° Π΄Π° смСкчим Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½ΠΈΠ΅ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ постСпСнно Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ нашия ΠΊΠΎΠ΄ към статична ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° mypy. Π’ΠΎΠ²Π° Π΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π°ΠΉ-популярната самостоятСлна систСма Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° Π·Π° Python. Mypy Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, основнитС ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ работят Π² Dropbox.

Dropbox бСшС Π΅Π΄Π½Π° ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ…Π° статична ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° Π² Python ΠΊΠΎΠ΄ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠ°Ρ‰Π°Π±. Mypy сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² хиляди ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π² наши Π΄Π½ΠΈ. Π’ΠΎΠ·ΠΈ инструмСнт Π±Π΅Π·Π±Ρ€ΠΎΠΉ ΠΏΡŠΡ‚ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ сС ΠΊΠ°Π·Π²Π°, "тСстван Π² Π±ΠΈΡ‚ΠΊΠ°". Π˜Π·ΠΌΠΈΠ½Π°Ρ…ΠΌΠ΅ дълъг ΠΏΡŠΡ‚, Π·Π° Π΄Π° стигнСм Π΄ΠΎ мястото, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ смС сСга. По ΠΏΡŠΡ‚Ρ имашС ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ начинания ΠΈ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ СкспСримСнти. Π’Π°Π·ΠΈ публикация ΠΎΠ±Ρ…Π²Π°Ρ‰Π° историята Π½Π° статичната ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² Python, ΠΎΡ‚ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ моя изслСдоватСлски ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π΄ΠΎ наши Π΄Π½ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ подсказванСто Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ са станали ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΈ Π·Π° Π±Π΅Π·Π±Ρ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΈΡˆΠ°Ρ‚ Π½Π° Python. Π’Π΅Π·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ сСга сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ инструмСнти ΠΊΠ°Ρ‚ΠΎ IDE ΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ.

β†’ ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° част

Π—Π°Ρ‰ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ°?

Ако някога стС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ въвСдСн Python, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ извСстно ΠΎΠ±ΡŠΡ€ΠΊΠ²Π°Π½Π΅ Π·Π°Ρ‰ΠΎ напослСдък ΠΈΠΌΠ° Ρ‚Π°ΠΊΡŠΠ² ΡˆΡƒΠΌ ΠΎΠΊΠΎΠ»ΠΎ статичното въвСТданС ΠΈ mypy. Или ΠΌΠΎΠΆΠ΅ Π±ΠΈ харСсватС Python ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°Ρ€Π°Π΄ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΡ‚ΠΎ ΠΌΡƒ писанС ΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС случва, просто Π²ΠΈ разстройва. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ към стойността Π½Π° статичното писанС Π΅ ΠΌΠ°Ρ‰Π°Π±ΡŠΡ‚ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π°: ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-голям Π΅ Π²Π°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡ‚Π΅ към статичното писанС ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ наистина ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π½Π΅Π³ΠΎ.

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

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

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

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

  • read_metadata Π½Π΅ сС Π²Ρ€ΡŠΡ‰Π° None, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Π½ΠΈΡΡ‚ Ρ‚ΠΈΠΏ Π½Π΅ Π΅ Optional[…].
  • Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ items Π΅ послСдоватСлност ΠΎΡ‚ Ρ€Π΅Π΄ΠΎΠ²Π΅. НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈ Π½Π° случаСн ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ.
  • Атрибут id Π΅ Π½ΠΈΠ· ΠΎΡ‚ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅.

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

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

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

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° систСми ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ прСдимства ΠΈ Ρ‚Π΅ Π²Π΅Ρ‡Π΅ са напълно Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΈ:

  • БистСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ някои ΠΌΠ°Π»ΠΊΠΈ (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΈ) Π³Ρ€Π΅ΡˆΠΊΠΈ. Π’ΠΈΠΏΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ забравят Π΄Π° обработят стойност None ΠΈΠ»ΠΈ някакво Π΄Ρ€ΡƒΠ³ΠΎ спСциално условиС.
  • Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΡŠΡ‚ Π½Π° ΠΊΠΎΠ΄Π° Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ опростСн, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ систСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° чСсто Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΡ‡Π½Π° Π·Π° Ρ‚ΠΎΠ²Π° какъв ΠΊΠΎΠ΄ трябва Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС надявамС Π½Π° 100% ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π° с тСстовС, ΠΊΠΎΠ΅Ρ‚ΠΎ във всСки случай ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π΅ ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΈΠΌΠΎ. НС Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° Π½Π°Π²Π»ΠΈΠ·Π°ΠΌΠ΅ Π² Π΄ΡŠΠ»Π±ΠΈΠ½ΠΈΡ‚Π΅ Π½Π° прослСдяванСто Π½Π° стСка, Π·Π° Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.
  • Π”ΠΎΡ€ΠΈ ΠΏΡ€ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ mypy чСсто ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ пълна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° Π·Π° част ΠΎΡ‚ сСкундата. А ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° тСстовС ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΎΡ‚Π½Π΅ΠΌΠ° дСсСтки сСкунди ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. БистСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° Π΄Π°Π²Π° Π½Π° програмиста ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΈ ΠΌΡƒ позволява Π΄Π° Π²ΡŠΡ€ΡˆΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ. Π’ΠΎΠΉ Π²Π΅Ρ‡Π΅ няма Π½ΡƒΠΆΠ΄Π° Π΄Π° пишС ΠΊΡ€Π΅Ρ…ΠΊΠΈ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ тСстовС, ΠΊΠΎΠΈΡ‚ΠΎ замСнят Ρ€Π΅Π°Π»Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ с Ρ„Π°Π»ΡˆΠΈΠ²ΠΈ ΠΈ ΠΊΡ€ΡŠΠΏΠΊΠΈ, само Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ тСстовСтС Π½Π° ΠΊΠΎΠ΄Π°.

IDE ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΈ ΠΊΠ°Ρ‚ΠΎ PyCharm ΠΈΠ»ΠΈ Visual Studio Code ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ силата Π½Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π·Π° Π΄Π° осигурят Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π΄ΠΎΠ²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ конструкции. И Ρ‚ΠΎΠ²Π° са само част ΠΎΡ‚ прСдимствата Π½Π° писанСто. Π—Π° някои програмисти всичко Ρ‚ΠΎΠ²Π° Π΅ основният Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΠΎΠ»Π·Π° Π½Π° писанСто. Π’ΠΎΠ²Π° Π΅ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ носи ΠΏΠΎΠ»Π·ΠΈ Π²Π΅Π΄Π½Π°Π³Π° слСд внСдряванСто. Π’ΠΎΠ·ΠΈ случай Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½Π΅ изисква ΠΎΡ‚Π΄Π΅Π»Π½Π° систСма Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° ΠΊΠ°Ρ‚ΠΎ mypy, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ трябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ mypy ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΈΠΏΠ° Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с ΠΊΠΎΠ΄Π°.

ΠŸΡ€Π΅Π΄ΠΈΡΡ‚ΠΎΡ€ΠΈΡ Π½Π° mypy

Π˜ΡΡ‚ΠΎΡ€ΠΈΡΡ‚Π° Π½Π° mypy Π·Π°ΠΏΠΎΡ‡Π½Π° Π² ΠžΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΎΡ‚ΠΎ кралство, Π² ΠšΠ΅ΠΉΠΌΠ±Ρ€ΠΈΠ΄ΠΆ, няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½Ρ към Dropbox. Участвал съм, ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ ΠΌΠΎΠΈΡ‚Π΅ докторски изслСдвания, Π² обСдиняванСто Π½Π° статично Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ. Бях Π²Π΄ΡŠΡ…Π½ΠΎΠ²Π΅Π½ ΠΎΡ‚ статия Π·Π° ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎΡ‚ΠΎ въвСТданС Π½Π° тСкст ΠΎΡ‚ Jeremy Siek ΠΈ Walid Taha ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Typed Racket. ΠžΠΏΠΈΡ‚Π°Ρ… сС Π΄Π° намСря Π½Π°Ρ‡ΠΈΠ½ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ - ΠΎΡ‚ ΠΌΠ°Π»ΠΊΠΈ скриптовС Π΄ΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ, ΡΡŠΡΡ‚ΠΎΡΡ‰ΠΈ сС ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ исках Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌ, Ρ‡Π΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΡ‚ всякакъв ΠΌΠ°Ρ‰Π°Π± няма Π΄Π° сС Π½Π°Π»Π°Π³Π° Π΄Π° сС правят Ρ‚Π²ΡŠΡ€Π΄Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈ компромиси. Π’Π°ΠΆΠ½Π° част ΠΎΡ‚ всичко Ρ‚ΠΎΠ²Π° бСшС идСята Π·Π° постСпСнно ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ ΠΎΡ‚ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ към цялостно тСстван статично Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Π’ наши Π΄Π½ΠΈ Ρ‚Π΅Π·ΠΈ ΠΈΠ΄Π΅ΠΈ Π΄ΠΎ голяма стСпСн сС ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ Π·Π° дадСност, Π½ΠΎ ΠΏΡ€Π΅Π· 2010 Π³. Ρ‚ΠΎΠ²Π° бСшС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ всС ΠΎΡ‰Π΅ сС ΠΏΡ€ΠΎΡƒΡ‡Π²Π°ΡˆΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ.

ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° Π½Π΅ бСшС насочСна към Python. ВмСсто Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… малък β€žΠ΄ΠΎΠΌΠ°ΡˆΠ΅Π½β€œ Π΅Π·ΠΈΠΊ АлорС. Π•Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ (Ρ‚ΡƒΠΊ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΈΠΏ Π½Π΅ са Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ):

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, Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΏΠΎ Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅, Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. ΠžΠ±ΡΡŠΠ΄ΠΈΡ… с Guido ΠΏΠΎ ΠΈΠΌΠ΅ΠΉΠ» Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° синтактичСн Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Π Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Π’ΠΎΠ²Π° изпълни ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π°Ρ‚Π° Ρ†Π΅Π», Π½ΠΎ бСшС донякъдС Ρ‚Ρ€ΠΎΠΌΠ°Π²ΠΎ (Python 3.6 Π½ΠΈ Π΄Π°Π΄Π΅ ΠΏΠΎ-Ρ…ΡƒΠ±Π°Π² синтаксис):

products = []  # type: List[str]  # Eww

Π’ΠΈΠΏΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ ΡΡŠΡ‰ΠΎ бяха ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Python 2, ΠΊΠΎΠΉΡ‚ΠΎ няма Π²Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ:

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

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

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

Π—Π° Π΄Π° сС ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ ...

Π£Π²Π°ΠΆΠ°Π΅ΠΌΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Python, моля, Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π½ΠΈ Π·Π° ΠΌΠ°Ρ‰Π°Π±Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ.

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€