Hanyar da za a bi don bincika layin 4 miliyan na lambar Python. Kashi na 3

Muna gabatar wa hankalinku kashi na uku na fassarar abu game da hanyar da Dropbox ya ɗauka lokacin aiwatar da tsarin duba nau'in lambar Python.

Hanyar da za a bi don bincika layin 4 miliyan na lambar Python. Kashi na 3

→ Abubuwan da suka gabata: na farko и na biyu

Isar da layin miliyan 4 na lambar da aka buga

Wani babban ƙalubale (kuma na biyu mafi yawan damuwa tsakanin waɗanda aka bincika a ciki) shine ƙara adadin lambar da aka rufe ta nau'in cak a cikin Dropbox. Mun gwada hanyoyi da yawa don magance wannan matsalar, daga haɓaka girman nau'in codebase da aka buga a zahiri zuwa mayar da hankali kan ƙoƙarin ƙungiyar mypy akan tsayayyen nau'in ƙima mai ƙarfi da ƙarfi. A ƙarshe, ya zama kamar babu wata dabarar nasara mai sauƙi, amma mun sami damar samun ci gaba cikin sauri a cikin ƙarar lambar bayanin ta hanyar haɗa hanyoyin da yawa.

Sakamakon haka, ma'ajiyar mu ta Python mafi girma (tare da lambar baya) tana da kusan layiyoyi miliyan 4 na lambar bayanin martaba. An kammala aikin buga lambar a tsaye cikin kusan shekaru uku. Mypy yanzu yana goyan bayan nau'ikan rahotannin ɗaukar hoto daban-daban waɗanda ke sauƙaƙa sa ido kan ci gaban buga rubutu. Musamman, zamu iya samar da rahotanni akan lambar tare da shubuha a cikin nau'ikan, kamar, alal misali, yin amfani da nau'in bayyane. Any a cikin bayanan da ba za a iya tantancewa ba, ko tare da abubuwa kamar shigo da dakunan karatu na ɓangare na uku waɗanda ba su da nau'in annotations. A matsayin wani ɓangare na aikin don inganta daidaiton nau'in dubawa a Dropbox, mun ba da gudummawa don inganta nau'in ma'anar (abin da ake kira fayilolin stub) don wasu shahararrun ɗakunan karatu na buɗewa a cikin ma'ajin Python na tsakiya. buga.

Mun aiwatar da (da daidaitacce a cikin PEPs na gaba) sabbin fasalulluka na nau'in tsarin waɗanda ke ba da damar ƙarin daidaitattun nau'ikan wasu takamaiman tsarin Python. Babban misali na wannan shine TypeDict, wanda ke ba da nau'ikan ƙamus masu kama da JSON waɗanda ke da kafaffen saitin maɓallan kirtani, kowanne yana da ƙimar nau'insa. Za mu ci gaba da fadada tsarin nau'in. Wataƙila matakinmu na gaba shine haɓaka tallafi ga iyawar lambobi na Python.

Hanyar da za a bi don bincika layin 4 miliyan na lambar Python. Kashi na 3
Adadin layukan lambar da aka bayyana: uwar garken

Hanyar da za a bi don bincika layin 4 miliyan na lambar Python. Kashi na 3
Adadin layukan lambar da aka bayyana: abokin ciniki

Hanyar da za a bi don bincika layin 4 miliyan na lambar Python. Kashi na 3
Jimlar adadin layukan lambar da aka bayyana

Anan ga bayyani na manyan fasalulluka na abubuwan da muka yi don haɓaka adadin lambar da aka bayyana a Dropbox:

Tsananin annotation. Mun ƙara ƙayyadaddun buƙatun don ƙaƙƙarfan bayanin sabon lamba. Mun fara da nasihohi masu ban sha'awa waɗanda ke ba da shawarar ƙara bayanai zuwa fayiloli waɗanda tuni suna da wasu bayanai. Yanzu muna buƙatar nau'in annotations a cikin sabbin fayilolin Python da kuma a yawancin fayilolin da ake da su.

Buga rahotanni. Muna aika rahotanni na mako-mako kan matakin buga lambar su kuma muna ba da shawara kan abin da ya kamata a fara bayyanawa.

Popularization na mypy. Muna magana game da mypy a abubuwan da suka faru kuma muna magana da ƙungiyoyi don taimaka musu farawa da nau'in bayanan.

Zabe. Muna gudanar da binciken masu amfani lokaci-lokaci don gano manyan matsaloli. A shirye muke mu yi nisa wajen magance waɗannan matsalolin (har ma da ƙirƙirar sabon harshe don hanzarta mypy!).

Ayyuka. Mun inganta aikin mypy sosai ta hanyar amfani da daemon da mypyc. An yi hakan ne don warware matsalolin da suka taso yayin aikin tantancewa, da kuma don samun damar yin aiki tare da adadi mai yawa.

Haɗin kai tare da masu gyara. Mun gina kayan aiki don tallafawa gudanar da mypy a cikin masu gyara waɗanda suka shahara akan Dropbox. Wannan ya haɗa da PyCharm, Vim da VS Code. Wannan ya sauƙaƙa sosai wajen aiwatar da bayanin lambar da duba ayyukan sa. Waɗannan nau'ikan ayyuka sun zama ruwan dare yayin bayyana lambar data kasance.

Bincike a tsaye. Mun ƙirƙiri kayan aiki don tantance sa hannun ayyuka ta amfani da kayan aikin bincike a tsaye. Wannan kayan aikin na iya aiki ne kawai a cikin yanayi masu sauƙi, amma ya taimaka mana haɓaka nau'in lambar mu ba tare da ƙoƙari sosai ba.

Goyon baya ga ɗakunan karatu na ɓangare na uku. Yawancin ayyukanmu suna amfani da kayan aikin SQLAlchemy. Yana ɗaukar amfani da ƙarfin ƙarfin Python wanda nau'ikan PEP 484 ba su iya yin ƙira kai tsaye. Mu, daidai da PEP 561, mun ƙirƙiri fayil ɗin stub daidai kuma mun rubuta plugin don mypy (bude tushen), wanda ke inganta tallafin SQLAlchemy.

Matsalolin da muka fuskanta

Hanyar zuwa layin miliyan 4 na lambar buga ba koyaushe ta kasance mai sauƙi a gare mu ba. A kan wannan hanya mun ci karo da ramuka da yawa kuma mun yi kurakurai da dama. Waɗannan su ne wasu matsalolin da muka fuskanta. Muna fata cewa yin magana game da su zai taimaka wa wasu su guje wa irin wannan matsala.

Batattu fayiloli Mun fara aikinmu ta hanyar bincika ƙananan fayiloli kawai. Ba a bincika duk wani abu da ba a haɗa cikin waɗannan fayilolin ba. An ƙara fayiloli zuwa lissafin dubawa lokacin da bayanan farko suka bayyana a cikinsu. Idan wani abu da aka shigo da daga wani module located waje da ikon yinsa na tabbatarwa, sa'an nan muna magana ne game da aiki tare da dabi'u kamar. Any, wadanda ba a gwada su kwata-kwata. Wannan ya haifar da asarar daidaiton rubutu, musamman a farkon ƙaura. Wannan hanya ta yi aiki da mamaki har zuwa yanzu, kodayake yanayi na yau da kullun shine ƙara fayiloli zuwa iyakar bita yana bayyana matsaloli a wasu sassan codebase. A cikin mafi munin yanayi, lokacin da aka haɗa wurare guda biyu na code, wanda, ba tare da juna ba, an riga an bincika nau'ikan, ya nuna cewa nau'in waɗannan wuraren ba su dace da juna ba. Wannan ya haifar da buƙatar yin sauye-sauye da yawa ga bayanan bayanan. Idan muka waiwaya baya yanzu, mun fahimci cewa yakamata mu ƙara ginshiƙan kayan aikin laburare zuwa nau'in binciken mypy da wuri. Wannan zai sa aikinmu ya fi tsinkaya.

Bayanin tsohon code. Lokacin da muka fara, muna da kusan layuka miliyan 4 na lambar Python data kasance. A bayyane yake cewa bayanin duk wannan lambar ba abu ne mai sauƙi ba. Mun ƙirƙiri wani kayan aiki mai suna PyAnnotate wanda zai iya tattara nau'in bayanai yayin da gwaje-gwaje ke gudana kuma zai iya ƙara nau'in annotate zuwa lambar ku dangane da bayanan da aka tattara. Koyaya, ba mu lura da ɗaukar wannan kayan aikin ba musamman. Nau'in bayanan tattarawa ya yi jinkirin, kuma ana samar da bayanai ta atomatik sau da yawa yana buƙatar gyare-gyare na hannu da yawa. Mun yi tunani game da gudanar da wannan kayan aiki ta atomatik duk lokacin da muka sake nazarin lamba, ko tattara nau'in bayanin dangane da nazarin wasu ƙananan ƙarar ainihin buƙatun hanyar sadarwa, amma mun yanke shawarar ba don ko wace hanya ta kasance mai haɗari ba.

A sakamakon haka, ana iya lura da cewa mafi yawan lambobin an rubuta su da hannu ta hannun masu shi. Domin shiryar da wannan tsari ta hanyar da ta dace, muna shirya rahotanni game da mahimman kayayyaki da ayyuka waɗanda ke buƙatar bayyanawa. Misali, yana da mahimmanci a ba da bayanin nau'in don tsarin ɗakin karatu wanda ake amfani da shi a ɗaruruwan wurare. Amma tsohon sabis ɗin da ake maye gurbinsa da sabo ba shi da mahimmanci don bayyanawa. Har ila yau, muna gwaji tare da yin amfani da bincike mai mahimmanci don samar da nau'in bayanin martaba don lambar gado.

Shigo da cyclic. A sama, na yi magana game da shigo da cyclic ("dogara tangles"), kasancewar wanda ya sa ya zama da wahala a hanzarta mypy. Dole ne kuma mu yi aiki tuƙuru don yin mypy goyon bayan kowane irin salon magana da waɗannan abubuwan shigo da kaya ke haifarwa. Kwanan nan mun kammala babban aikin sake fasalin tsarin wanda ya daidaita yawancin al'amuran mypy game da shigo da madauwari. Wadannan matsalolin sun samo asali ne tun farkon farkon aikin, daga Alore, harshen ilimi wanda aikin mypy ya fi mayar da hankali a kansa. Alore syntax yana sauƙaƙa warware matsaloli tare da umarnin shigo da keken keke. Mypy na zamani ya gaji wasu iyakoki daga farkonsa, aiwatarwa mai sauƙi (wanda ya dace da Alore). Python yana sa aiki tare da shigo da madauwari da wahala, musamman saboda maganganu suna da shubuha. Misali, aikin da ake yi na iya zahiri ayyana nau'in laƙabi. Mypy ba koyaushe yana iya gano abubuwa irin wannan ba har sai an sarrafa yawancin madaukin shigo da kaya. Babu irin wannan shubuha a Alore. Shawara mara kyau da aka yanke a farkon matakan haɓaka tsarin na iya ba da abin mamaki mara daɗi ga mai shirye-shiryen shekaru da yawa bayan haka.

Sakamako: hanyar zuwa layukan lamba miliyan 5 da sabbin hazaka

Aikin mypy ya yi nisa mai nisa - daga farkon samfuri zuwa tsarin da ke sarrafa nau'ikan lambobin samarwa miliyan 4. Kamar yadda mypy ya samo asali, nau'in alamun Python an daidaita su. A kwanakin nan, ƙaƙƙarfan ƙaƙƙarfan yanayi ya haɓaka wajen buga lambar Python. Yana da wurin tallafawa ɗakin karatu, yana ƙunshe da kayan aikin taimako don IDEs da masu gyarawa, yana da nau'ikan sarrafa nau'ikan nau'ikan nau'ikan, kowannensu yana da nasa ribobi da fursunoni.

Ko da yake an riga an ba da nau'in dubawa a Dropbox, na yi imani har yanzu muna cikin farkon lokacin buga lambar Python. Ina tsammanin fasahar bincika nau'in za ta ci gaba da haɓakawa da haɓakawa.

Idan baku riga kun yi amfani da nau'in duba nau'in a cikin babban aikin Python ɗinku ba, to ku sani cewa yanzu lokaci ne mai kyau don fara matsawa zuwa buga rubutu a tsaye. Na yi magana da wadanda suka yi irin wannan sauyi. Babu wanda ya yi nadama a cikinsu. Nau'in dubawa yana sa Python ya zama yaren da ya fi dacewa da haɓaka manyan ayyuka fiye da "Python na yau da kullun."

Ya ku masu karatu! Kuna amfani da nau'in dubawa a cikin ayyukan ku na Python?

Hanyar da za a bi don bincika layin 4 miliyan na lambar Python. Kashi na 3
Hanyar da za a bi don bincika layin 4 miliyan na lambar Python. Kashi na 3

source: www.habr.com

Add a comment