Ụzọ iji pịnye akara koodu Python 4 nde. Akụkụ 2

Taa, anyị na-ebipụta akụkụ nke abụọ nke ntụgharị ihe gbasara otu Dropbox si hazie njikwa ụdị maka ọtụtụ ahịrị koodu Python.

Ụzọ iji pịnye akara koodu Python 4 nde. Akụkụ 2

Gụọ akụkụ nke mbụ

Ụdị nkwado gọọmentị (PEP 484)

Anyị na-eduzi anyị mbụ dị njọ nnwale na mypy na Dropbox n'oge mbanye anataghị ikike Izu 2014. Hack Week bụ otu izu omume kwadoro site Dropbox. N'oge a, ndị ọrụ nwere ike ịrụ ọrụ na ihe ọ bụla ha chọrọ! Ụfọdụ ọrụ teknụzụ kacha ewu ewu na Dropbox malitere na mmemme ndị a. N'ihi nnwale a, anyị kwubiri na mypy yiri ihe na-ekwe nkwa, n'agbanyeghị na oru ngo ahụ erubeghị maka ojiji zuru ebe niile.

N'oge ahụ, echiche nke ọkọlọtọ ụdị Python usoro hinting dị na ikuku. Dị ka m kwuru, ebe ọ bụ Python 3.0 ọ ga-ekwe omume iji ụdị nkọwa maka ọrụ, mana ndị a bụ naanị okwu aka ike, na-enweghị nkọwapụta syntax na semantics. N'oge mmebe mmemme, a na-eleghara nkọwa ndị a anya, n'ọtụtụ akụkụ, na-eleghara ya anya. Mgbe Izu Hack gasịrị, anyị malitere ịrụ ọrụ na nhazi usoro ọmụmụ. Ọrụ a mere ka ọ pụta ìhè Ọnụ ego 484 (Guido van Rossum, mụ na Łukasz Langa jikọrọ aka na akwụkwọ a).

E nwere ike isi n'akụkụ abụọ lee ebumnobi anyị anya. Nke mbu, anyi nwere olile anya na gburugburu ebe obibi Python dum nwere ike inabata uzo eji eme ihe n’udi ihe (okwu ejiri na Python dika “udi annotations”). Nke a, nyere ihe egwu nwere ike ime, ga-aka mma karịa iji ọtụtụ ụzọ na-ekwekọghị ekwekọ. Nke abụọ, anyị chọrọ ka anyị na ọtụtụ ndị obodo Python kwurịta usoro nkọwapụta n'ezoghị ọnụ. Ọchịchọ a bụ akụkụ nke eziokwu ahụ bụ na anyị agaghị achọ ịdị ka "ndị si n'ezi ofufe dapụ" site na echiche ndị bụ isi nke asụsụ ahụ n'anya ọtụtụ ndị na-eme mmemme Python. Ọ bụ asụsụ a na-edepụta nke ọma, mara dị ka "ịpịpị ọbọgwụ". N'ime obodo, na mmalite, àgwà dịtụ enyo megide echiche nke ederede static enweghị ike inye aka ma bilie. Mana echiche ahụ mechara daa mgbe ọ bịara doo anya na ọ gaghị adị mkpa ka a na-ede akwụkwọ static (na mgbe ndị mmadụ ghọtara na ọ bara uru n'ezie).

Ụdị nrịbama syntax nke emechara nakweere yiri nke mypy kwadoro n'oge ahụ. E wepụtara PEP 484 na Python 3.5 na 2015. Eke Ọgba abụkwaghị asụsụ a na-edegharị n'ike. Ọ masịrị m iche maka mmemme a dị ka ihe dị ịrịba ama na akụkọ Python.

Mmalite nke mbugharị

Na njedebe nke 2015, Dropbox kere otu mmadụ atọ ka ha rụọ ọrụ na mypy. Ha gụnyere Guido van Rossum, Greg Price na David Fisher. Site n'oge ahụ gaa n'ihu, ọnọdụ ahụ malitere ịmalite ngwa ngwa. Ihe mgbochi mbụ na uto mypy bụ arụmọrụ. Dịka m kwuru n'elu, n'oge mmalite nke ọrụ ahụ, echere m ịsụgharị mmejuputa mypy n'ime C, mana echiche a gafere na ndepụta ugbu a. Anyị rapaara na iji onye ntụgharị CPython na-agba ọsọ sistemụ, nke na-adịghị ngwa ngwa maka ngwaọrụ dị ka mypy. (Arụmọrụ PyPy, mmemme Python ọzọ nwere onye nchịkọta JIT, enyeghịkwa anyị aka.)

Ọ dabara nke ọma, ụfọdụ mmezi algọridim enyerela anyị aka ebe a. “Onye na-eme ngwa ngwa” mbụ dị ike bụ mmejuputa nyocha nke mmụba. Echiche dị n'azụ nkwalite a dị mfe: ọ bụrụ na ndabere modul niile agbanwebeghị kemgbe ọsọ nke mypy gara aga, mgbe ahụ anyị nwere ike iji data echekwara n'oge aga aga ka anyị na-arụ ọrụ dabere. Naanị ihe anyị kwesịrị ime bụ ịlele ụdị faịlụ ndị gbanwetụrụ yana faịlụ ndị dabere na ha. Mypy gara n'ihu ntakịrị: ọ bụrụ na interface mpụga nke modul agbanweghị, mypy chere na modul ndị ọzọ butere modul a adịghị mkpa ka enyocha ya ọzọ.

Nlebawanye agbakwunyere enyerela anyị aka nke ukwuu mgbe anyị na-akọwapụta nnukwu koodu dị adị. Isi ihe bụ na usoro a na-agụnyekarị ọtụtụ ịgba ọsọ mypy ka a na-eji nwayọọ nwayọọ tinye nkọwa na koodu ahụ ma jiri nwayọọ nwayọọ na-emeziwanye ya. Agba nke mbụ nke mypy ka dị nwayọ n'ihi na ọ nwere ọtụtụ ihe ndabere iji lelee. Mgbe ahụ, iji meziwanye ọnọdụ ahụ, anyị mebere usoro nchekwa ihe dịpụrụ adịpụ. Ọ bụrụ na mypy achọpụta na cache mpaghara nwere ike ịbụ ihe ochie, ọ na-ebudata foto cache dị ugbu a maka codebase niile site na ebe nchekwa etiti. Ọ na-eme nlele agbakwunyere site na iji foto a. Nke a ewerela anyị otu nnukwu nzọụkwụ ọzọ n'ịbawanye arụmọrụ nke mypy.

Nke a bụ oge nnabata ngwa ngwa na ụdị nlele na Dropbox. Ka ọ na-erule ngwụsị 2016, anyị enweela ihe dị ka ahịrị 420000 nke Python nwere nkọwa nkọwa. Ọtụtụ ndị ọrụ nwere mmasị na nlele ụdị. Ndị otu mmepe na-eji Dropbox mypy.

Ihe niile dị mma mgbe ahụ, ma anyị ka nwere ọtụtụ ihe anyị ga-eme. Anyị malitere ime nyocha nyocha nke onye ọrụ n'ime oge iji chọpụta mpaghara nsogbu nke ọrụ ahụ ma ghọta ihe ọ dị mkpa ka edozi nsogbu mbụ (a ka na-eji omume a na ụlọ ọrụ taa). Ihe kachasị mkpa, dịka ọ bịara doo anya, bụ ọrụ abụọ. Nke mbụ, anyị chọkwuru ụdị mkpuchi koodu, nke abụọ, anyị chọrọ mypy iji rụọ ọrụ ngwa ngwa. O doro anya na ọrụ anyị iji mee ka mypy dị ngwa ma mejuputa ya n'ime ọrụ ụlọ ọrụ ka dị anya nke ọma. Anyị, mara nke ọma mkpa ọrụ abụọ a dị, tụbara idozi ha.

Mmepụta ndị ọzọ!

Nlebanya agbakwunyere mere mypy ngwa ngwa, mana ngwa ọrụ ahụ adịchaghị ngwa ngwa. Ọtụtụ nlele agbakwunyere were ihe dị ka otu nkeji. Ihe kpatara nke a bụ mbubata cyclical. Nke a nwere ike ọ gaghị eju onye ọ bụla na-arụ ọrụ na nnukwu codebases e dere na Python. Anyị nwere ọtụtụ narị modul, nke ọ bụla n'ime ha na-ebubata ndị ọzọ niile na-apụtaghị ìhè. Ọ bụrụ na agbanwere faịlụ ọ bụla dị na loop mbubata, mypy ga-edozi faịlụ niile dị na akaghị ya, yana mgbe mgbe modul ọ bụla na-ebubata modul site na akaghị ya. Otu n'ime usoro ahụ bụ "nkwụsị ntụkwasị obi" a ma ama nke kpatara ọtụtụ nsogbu na Dropbox. Ozugbo ihe owuwu a nwere ọtụtụ narị modul, ebe a na-ebubata ya, ozugbo ma ọ bụ na-apụtaghị ìhè, ọtụtụ ule, a na-ejikwa ya na koodu mmepụta.

Anyị tụlere ohere nke ịdabere na okirikiri "na-atụgharị", mana anyị enweghị akụrụngwa iji mee ya. Enwere koodu nke ukwuu nke anyị na-amabughị. N'ihi ya, anyị wepụtara ụzọ ọzọ. Anyị kpebiri ime ka mypy na-arụ ọrụ ngwa ngwa ọbụna na ọnụnọ nke "dependency tangles". Anyị nwetara ebumnuche a site na iji mypy daemon. Daemon bụ usoro ihe nkesa na-arụ ọrụ abụọ na-adọrọ mmasị. Nke mbụ, ọ na-echekwa ozi gbasara codebase niile na ebe nchekwa. Nke a pụtara na oge ọ bụla ị na-agba mypy, ịgaghị ebugharị data echekwara nke metụtara puku kwuru puku ihe ndabere ebubata. Nke abuo, o jiri nlezianya, n'ogo nke obere ihe owuwu, na-enyocha ihe ndabere n'etiti ọrụ na ụlọ ọrụ ndị ọzọ. Dịka ọmụmaatụ, ọ bụrụ na ọrụ ahụ foo na-akpọ ọrụ bar, mgbe ahụ enwere ịdabere foo si bar. Mgbe faịlụ gbanwere, daemon mbụ, na iche, na-ahazi naanị faịlụ gbanwere. Ọ na-elele mgbanwe a na-ahụ anya na mpụga faịlụ ahụ, dị ka mbinye aka ọrụ gbanwere. Daemon na-eji ozi zuru ezu gbasara mbubata naanị iji lelee ọrụ ndị ahụ na-eji ọrụ gbanwetụrụ ugboro abụọ. Dịka, site na usoro a, ị ga-elele ọrụ ole na ole.

Ime ihe ndị a niile adịghị mfe, ebe ọ bụ na mmejuputa mypy mbụ lekwasịrị anya na nhazi otu faịlụ n'otu oge. Anyị ga-emeso ọtụtụ ọnọdụ oke ókè, ihe omume nke chọrọ nyocha ugboro ugboro n'ọnọdụ ebe ihe gbanwere na koodu. Dịka ọmụmaatụ, nke a na-eme mgbe ekenye klas ọhụrụ klas ntọala. Ozugbo anyị mere ihe anyị chọrọ, anyị nwere ike ibelata oge mmezu nke ọtụtụ nyocha agbakwunyere na naanị sekọnd ole na ole. Nke a yiri nnukwu mmeri nye anyị.

Ọbụna ihe nrụpụta karịa!

Tinyere caching dịpụrụ adịpụ nke m tụlere n'elu, mypy daemon fọrọ nke nta ka ọ dozie nsogbu ndị na-ebilite mgbe onye mmemme na-agba ọsọ ụdị nlele, na-eme mgbanwe na ọnụ ọgụgụ dị nta nke faịlụ. Agbanyeghị, ịrụ ọrụ sistemu n'ọnọdụ ojiji kacha mma ka adịchaghị mma. Mmalite nke mypy dị ọcha nwere ike were ihe karịrị nkeji iri na ise. Nke a dịkwa nnọọ ukwuu karịa ka anyị gaara enwe obi ụtọ. Kwa izu, ọnọdụ ahụ na-akawanye njọ ka ndị mmemme nọgidere na-ede koodu ọhụrụ ma tinye nkọwa na koodu dị adị. Ndị ọrụ anyị ka na-agụ agụụ maka ịrụ ọrụ ndị ọzọ, mana anyị nwere obi ụtọ izute ha ọkara.

Anyị kpebiri ịlaghachi na otu n'ime echiche ndị mbụ gbasara mypy. Ya bụ, ịtụgharị koodu Python ka ọ bụrụ koodu C. Nnwale na Cython (usoro na-enye gị ohere ịtụgharị koodu edere na Python na koodu C) enyeghị anyị ọsọ ọsọ a na-ahụ anya, ya mere anyị kpebiri ịtụte echiche nke ide ihe nchịkọta nke anyị. Ebe ọ bụ na mypy codebase (nke edere na Python) enweelarị ụdị nkọwa niile dị mkpa, anyị chere na ọ ga-aba uru ịnwale iji nkọwa ndị a iji mee ka usoro ahụ dị ngwa. M ngwa ngwa mepụta prototype iji nwalee echiche a. O gosiputara mmụba ihe karịrị okpukpu iri na arụmọrụ na obere akara akara dị iche iche. Echiche anyị bụ iji Cython chịkọta Python modul na C modul, na ịtụgharị ụdị nkọwa ka ọ bụrụ nlele oge na-agba ọsọ (na-abụkarị ụdị nkọwa a na-eleghara anya na oge ịgba ọsọ ma jiri naanị ụdị nyocha usoro). Anyị mere atụmatụ ịsụgharị mmejuputa mypy sitere na Python ka ọ bụrụ asụsụ emebere ka edee ya nke ọma, nke ga-adị (na, maka ọtụtụ akụkụ, ọrụ) dị ka Python. (Ụdị ịkwagharị asụsụ asụsụ a aghọwo ihe ọdịnala nke ọrụ mypy. Ihe mbụ mypy mmejuputa iwu e dere na Alore, mgbe ahụ e nwere syntactic ngwakọ nke Java na Python).

Ilekwasị anya na API ndọtị CPython bụ isi ihe na-agaghị atụfu ikike njikwa ọrụ. Anyị achọghị imejuputa igwe mebere ma ọ bụ ọba akwụkwọ ọ bụla mypy chọrọ. Na mgbakwunye, anyị ka ga-enwe ohere ịnweta gburugburu Python dum yana ngwa niile (dịka pytest). Nke a pụtara na anyị nwere ike ịga n'ihu na-eji koodu Python sụgharịa n'oge mmepe, na-enye anyị ohere ịnọgide na-arụ ọrụ na usoro ngwa ngwa nke ime mgbanwe koodu na ịnwale ya, kama ichere ka koodu ahụ chịkọta. Ọ dị ka anyị na-arụ nnukwu ọrụ nke ịnọdụ ala n'oche abụọ, dị ka a pụrụ isi kwuo ya, ma anyị hụrụ ya n'anya.

Onye nchịkọta, nke anyị kpọrọ mypyc (ebe ọ bụ na ọ na-eji mypy dị ka njedebe n'ihu maka nyocha ụdị), tụgharịrị bụrụ ọrụ na-aga nke ọma. N'ozuzu, anyị nwetara ihe dị ka ọsọ ọsọ 4x maka ịgba ọsọ mypy ugboro ugboro na-enweghị caching. Ịzụlite isi nke mypyc oru ngo were a obere otu Michael Sullivan, Ivan Levkivsky, Hugh Hahn, na onwe m banyere 4 kalenda ọnwa. Ọnụ ego ọrụ a pere mpe karịa ihe a ga-achọrịrị iji degharịa mypy, dịka ọmụmaatụ, na C++ ma ọ bụ Go. Anyị aghaghịkwa ime mgbanwe dị nnọọ nta n'ọrụ ahụ karịa ka anyị gaara eme mgbe anyị na-edegharị ya n'asụsụ ọzọ. Anyị nwekwara olileanya na anyị nwere ike iweta mypyc n'ọkwa dị otú ahụ na ndị ọzọ na-eme Dropbox nwere ike iji ya chịkọta ma mee ka koodu ha dị ngwa.

Iji nweta ọkwa arụmọrụ a, anyị kwesịrị itinye ụfọdụ ngwọta injinia na-adọrọ mmasị. Ya mere, onye nchịkọta nwere ike mee ka ọtụtụ ọrụ dị ngwa site na iji ngwa ngwa, ihe nrụpụta C dị ala. Dịka ọmụmaatụ, a na-atụgharị oku ọrụ achịkọtara na oku ọrụ C. Oku dị otú ahụ dịkwa ngwa ngwa karịa ịkpọ ọrụ atụgharịrị. Ụfọdụ arụmọrụ, dị ka nyocha ọkọwa okwu, ka na-etinye aka na iji oku C-API na-aga mgbe niile sitere na CPython, nke na-adị obere ngwa ngwa mgbe a na-achịkọta ya. Anyị nwere ike ikpochapụ ibu ndị ọzọ na usoro nke a na-emepụta site na nkọwa, ma nke a na nke a nyere naanị obere uru na arụmọrụ.

Iji chọpụta ọrụ “dị nwayọ” na-adịkarị, anyị rụrụ profaịlụ koodu. N'iji data a, anyị nwara ma ọ bụ tweak mypyc ka o wee mepụta koodu C ngwa ngwa maka ọrụ ndị dị otú ahụ, ma ọ bụ degharịa koodu Python kwekọrọ na iji ọrụ ngwa ngwa (na mgbe ụfọdụ, anyị enweghị ngwọta dị mfe maka nke ahụ ma ọ bụ nsogbu ọzọ) . Ịdegharị koodu Python na-abụkarị ihe ngwọta dị mfe maka nsogbu ahụ karịa inwe onye nchịkọta na-eme otu mgbanwe ahụ na-akpaghị aka. N'ime ogologo oge, anyị chọrọ ịmegharị ọtụtụ mgbanwe ndị a, mana n'oge ahụ, anyị lekwasịrị anya n'ịme ngwa ngwa mypy na obere mbọ. Na n'ịga n'ihu na ihe mgbaru ọsọ a, anyị na-ebipụ ọtụtụ akụkụ.

Ka ga-aga n'ihu…

Ezigbo ndị na-agụ akwụkwọ! Kedu echiche gị gbasara ọrụ mypy mgbe ị matara na ọ dị?

Ụzọ iji pịnye akara koodu Python 4 nde. Akụkụ 2
Ụzọ iji pịnye akara koodu Python 4 nde. Akụkụ 2

isi: www.habr.com

Tinye a comment