Waddada lagu saxayo 4 milyan oo xariiq oo code Python ah. Qaybta 2

Maanta waxaan daabacaynaa qaybta labaad ee tarjumaadda walxaha ku saabsan sida Dropbox u habeeyey xakamaynta nooca dhowr milyan oo xariiq oo koodka Python ah.

Waddada lagu saxayo 4 milyan oo xariiq oo code Python ah. Qaybta 2

β†’ Akhriso qaybta koowaad

Taageerada nooca rasmiga ah (PEP 484)

Waxaan samaynay tijaabooyinkii ugu horeeyay ee halis ah mypy at Dropbox inta lagu guda jiro Hack Week 2014. Hack Week waa dhacdo hal todobaad ah oo ay martigelisay Dropbox. Inta lagu jiro wakhtigan, shaqaaluhu waxay ka shaqayn karaan wax kasta oo ay rabaan! Qaar ka mid ah mashaariicda tignoolajiyada ugu caansan ee Dropbox ayaa ka bilaabmay dhacdooyinkan oo kale. Natiijadii tijaabadan, waxaan ku soo gabagabeynay in mypy ay u muuqato mid rajo leh, inkasta oo uusan mashruucu wali diyaar u ahayn isticmaalka baahsan.

Waqtigaas, fikradda ah jaangooyooyinka nooca Python hababka hinting ayaa hawada ku jiray. Sidii aan idhi, tan iyo Python 3.0 waxaa suurtagal ah in loo isticmaalo sharraxaadda nooca hawlaha, laakiin kuwani waxay ahaayeen kaliya tibaaxo aan loo baahnayn, iyada oo aan la qeexin syntax iyo semantics. Intii lagu jiray fulinta barnaamijka, tafsiiryadan, inta badan, si fudud ayaa loo iska indhatiray. Toddobaadka Hack ka dib, waxaan bilownay ka shaqaynta habaynta semantics. Shaqadani waxay keentay in ay soo baxdo PEP 484 (Guido van Rossum, Łukasz Langa iyo aniga ayaa iska kaashaday dukumeentigan).

Ujeedadeena waxaa laga eegi karaa laba dhinac. Marka hore, waxaan rajaynaynay in dhammaan deegaanka deegaanka Python uu qaadan karo hab caadi ah oo loo isticmaalo tilmaamo nooca (erey loo isticmaalo Python oo u dhigma "nooca tafaasiisha"). Tani, marka la eego khatarta suurtagalka ah, ayaa ka fiicnaan lahayd isticmaalka habab badan oo aan is-waafaqayn. Marka labaad, waxaan rabnay inaan si furan uga wada hadalno hababka sharraxaadda nooca xubno badan oo bulshada Python ah. Rabitaankan waxaa qayb ahaan lagu xukumay xaqiiqda ah inaanan dooneynin inaan u ekaanno "murtad" fikradaha aasaasiga ah ee luqadda ee indhaha ballaaran ee barnaamijyada Python. Waa luqad si firfircoon loo tebiyay, loo yaqaan "duck teping". Bulshada dhexdeeda, bilowgii hore, fikradda laga shakisan yahay ee ku aaddan fikradda wax-ku-qorista tooska ah ma caawin karto, laakiin waa ay kacday. Laakiin dareenkaas ayaa ugu dambeyntii hoos u dhacay ka dib markii ay caddaatay in qorista tooska ah aysan ahayn mid khasab ah (iyo ka dib markii dadku ay ogaadeen in ay dhab ahaantii faa'iido leedahay).

Nooca tilmaanta syntax ee ugu dambeyntii la qaatay wuxuu aad ula mid ahaa waxa mypy uu taageeray waqtigaas. PEP 484 waxaa lagu sii daayay Python 3.5 sanadkii 2015. Python hadda ma ahayn luqad si firfircoon loo tebiyo. Waxaan jeclahay in aan ka fekero dhacdadan inay tahay taariikh muhiim ah oo ku jirta taariikhda Python.

Bilawga tahriibka

Dhamaadkii 2015, Dropbox waxay abuurtay koox ka kooban saddex qof si ay uga shaqeeyaan mypy. Waxaa ka mid ahaa Guido van Rossum, Greg Price iyo David Fisher. Laga bilaabo wakhtigaas, xaaladdu waxay bilowday inay si degdeg ah u horumarto. Caqabadda koowaad ee hortaagan koritaanka mypy waxay ahayd waxqabadka. Sida aan kor ku sheegay, maalmihii hore ee mashruuca waxaan ku fikiray inaan u tarjumo hirgelinta mypy C, laakiin fikraddan hadda waa laga saaray liiska. Waxaan ku dhagannahay socodsiinta nidaamka anagoo adeegsanayna tarjumaanka CPython, kaas oo aan ku filneyn qalabka sida mypy. (Mashruuca PyPy, oo ah hirgelinta Python ka duwan oo leh isku-dariyaha JIT, nama caawin sidoo kale.)

Nasiib wanaag, qaar ka mid ah hagaajinta algorithm ayaa halkan noogu yimid gargaar. "dardariyaha" ugu horreeya ee xoogga leh wuxuu ahaa hirgelinta hubinta kordhinta. Fikradda ka dambeysa hagaajintan waxay ahayd mid sahlan: haddii dhammaan ku-tiirsanaanta moduleka aysan isbeddelin tan iyo socodsiintii hore ee mypy, markaa waxaan isticmaali karnaa xogta la kaydiyay intii lagu jiray socodsiintii hore iyadoo la shaqeynayo ku-tiirsanaanta. Waxaan kaliya u baahanahay inaan samayno nooca hubinta faylalka la beddelay iyo faylalka iyaga ku tiirsan. Mypy xitaa wax yar ayuu sii socday: haddii interface-ka dibadda ee moduleka uusan isbeddelin, mypy waxay u qaadatay in cutubyada kale ee soo dejinta moduleka aan u baahnayn in mar kale la hubiyo.

Hubinta korodhka ayaa wax badan naga caawisay marka la qeexayo xaddi badan oo kood jira. Ujeedadu waxay tahay in habkani uu inta badan ku lug leeyahay hawlo badan oo isdabajoog ah oo mypy ah maadaama tafsiiryada si tartiib tartiib ah loogu daro koodka oo si tartiib tartiib ah loo hagaajiyay. Socodkii ugu horreeyay ee mypy wali aad ayuu u gaabis ahaa sababtoo ah waxay lahayd wax badan oo ku tiirsanaan ah oo lagu hubiyo. Ka dib, si loo hagaajiyo xaaladda, waxaan hirgelinay habka kaydinta fog. Haddii mypy ay ogaato in kaydka maxalliga ahi ay u badan tahay inuu waqtigiisu dhammaaday, waxay soo dejisanaysaa sawirka kaydinta hadda ee dhammaan codebase-ka kaydka dhexe. Kadib waxay samaynaysaa hubin kordhin iyadoo adeegsanaysa sawirkan. Tani waxay ina qaaday hal tallaabo oo weyn oo kale oo ku aaddan kordhinta waxqabadka mypy.

Tani waxay ahayd xilli si degdeg ah oo dabiici ah loo qaatay nooca hubinta ee Dropbox. Dhammaadkii 2016, waxaan horey u haysanay ku dhawaad ​​420000 oo khadadka Python code oo leh tafaasiil noocaan ah. Isticmaalayaal badan ayaa aad ugu riyaaqay hubinta nooca. Kooxo horumarineed oo badan ayaa isticmaalayey Dropbox mypy.

Wax walba waxay u muuqdeen kuwo wanaagsan markaas, laakiin weli wax badan ayaa noo haray. Waxaan bilownay inaan sameyno baaritaanno isticmaale oo gudaha ah oo xilliyo ah si aan u ogaanno meelaha dhibaatooyinka ah ee mashruuca oo aan fahamno arrimaha u baahan in marka hore la xalliyo (dhaqankan ayaa wali laga isticmaalaa shirkadda maanta). Waxa ugu muhiimsan, sida ay ku caddaatay, waxay ahaayeen laba hawlood. Marka hore, waxaan u baahanahay caymis badan oo koodka ah, marka labaad, waxaan u baahanahay mypy si aan dhaqso ugu shaqeyno. Waxay ahayd gabi ahaanba caddaatay in shaqadeenii si loo dardargeliyo mypy oo aan u hirgelinno mashaariicda shirkadu wali way ka fog tahay dhamaystirka. Annaga oo si buuxda u ogsoon muhiimadda ay leeyihiin labadan hawlood, ayaanu dejinay sidii aan u xallin lahayn.

Wax soo saar badan!

Jeegaga kordhinta ayaa mypy ka dhigay mid dhakhso badan, laakiin qalabku wali kuma filna. Baaritaanno badan oo dheeri ah ayaa socday ilaa hal daqiiqo. Sababta tani waxay ahayd soo dejinta meertada ah. Tani waxay u badan tahay inaanay la yaabin doonin qof kasta oo la shaqeeyay codebases waaweyn oo ku qoran Python. Waxaan haysanay boqolaal cutubyo ah, kuwaas oo mid walba si dadban u soo dhoofiyay kuwa kale oo dhan. Haddii fayl kasta oo loop soo dejinta ah la beddelo, mypy waxay ahayd inay farsamayso dhammaan faylasha ku jira wareeggaas, iyo inta badan qayb kasta oo ka soo dejisa qaybo ka mid ah wareeggaas. Mid ka mid ah wareegyada noocan oo kale ah ayaa ahaa "ku-tiirsanaanta ku-tiirsanaanta" ee caanka ah taas oo dhib badan u keentay Dropbox. Marka qaab-dhismeedkani ka kooban yahay dhowr boqol oo modules, halka la soo dhoofiyo, si toos ah ama si dadban, imtixaanno badan, waxa kale oo loo adeegsaday code-soo-saarka.

Waxaan tixgalinay suurtagalnimada ku tiirsanaanta wareegtada, laakiin ma aanan haysan agab aan ku samayno. Waxaa jiray kood aad u badan oo aynaan aqoon u lahayn. Natiijo ahaan, waxaan la nimid hab kale. Waxaan go'aansanay inaan si dhakhso ah u shaqeyno mypy xitaa marka ay jiraan "ku-tiirsanaanta ku-tiirsanaanta". Waxaan gaarnay yoolkaan anagoo adeegsanayna mypy daemon. Daemon-ku waa hannaan adeege oo hirgeliya laba sifo oo xiiso leh. Marka hore, waxay kaydisaa macluumaadka ku saabsan dhammaan codebase-ka xusuusta. Tani waxay ka dhigan tahay mar kasta oo aad socodsiiso mypy, uma baahnid inaad ku shubto xogta kaydsan ee la xidhiidha kumanaan ku tiirsanaanta la soo dejiyay. Marka labaad, wuxuu si taxadar leh, heerka unugyada qaab-dhismeedka yaryar, u falanqeynayaa ku tiirsanaanta u dhexeeya shaqooyinka iyo hay'adaha kale. Tusaale ahaan, haddii shaqada foo wuxuu ku baaqayaa shaqo bar, ka dibna waxaa jira ku tiirsanaanta foo ka bar. Marka feylku isbeddelo, daemon-ku marka hore, gooni-gooni, wuxuu socodsiiyaa oo keliya faylka la beddelay. Kadib waxay eegaysaa isbedelada muuqda ee ku yimaada faylkaas, sida saxeexyada shaqada ee la bedelay. Daemon-ku waxay isticmaashaa macluumaad faahfaahsan oo ku saabsan soo dejinta oo keliya si ay laba-laab ugu hubiso shaqooyinkaas run ahaantii adeegsada shaqada la beddelay. Caadi ahaan, habkan, waa inaad hubisaa hawlo aad u yar.

Hirgelinta waxaas oo dhan ma fududa, maadaama hirgelinta asalka ah ee mypy ay si weyn diiradda u saartay habaynta hal fayl markiiba. Waxaan ku qasbanahay inaan wax ka qabanno xaalado badan oo xuduudaha ah, dhacdadaas oo u baahan hubinno soo noqnoqda marka ay wax iska beddeleen koodka. Tusaale ahaan, tani waxay dhacdaa marka fasalka loo qoondeeyo fasal cusub. Markii aanu samaynay wixii aanu rabnay, waxa aanu awoodnay in aanu yareyno wakhtiga fulinta ee inta badan jeegaga kordhinta dhawr ilbiriqsi oo kaliya. Taasi waxay noogu muuqatay guul weyn.

Xitaa wax soo saar badan!

Iyada oo ay weheliso kaydinta fog ee aan kor kaga hadlay, mypy daemon waxa ay ku dhawaad ​​si buuxda u xalliyeen mashaakilaadka ka dhasha marka barnaamij-sameeyaha uu inta badan sameeyo nooca hubinta, isaga oo isbedel ku samaynaya tiro yar oo faylal ah. Si kastaba ha ahaatee, waxqabadka nidaamka kiis adeegsiyeedka ugu wanaagsan ayaa wali ka fogaa sida ugu fican. Bilawga nadiifka ah ee mypy waxay qaadan kartaa in ka badan 15 daqiiqo. Oo tani waxay ahayd wax aad uga badan intii aan ku farxi lahayn. Toddobaad kasta xaaladdu way ka sii dartay markii barnaamij-bixiyeyaashu ay sii wadeen inay qoraan kood cusub oo ay ku daraan qoraallo kood jira. Isticmaalayaashayadu waxay wali u gaajoodeen waxqabad dheeraad ah, laakiin waan ku faraxsanahay inaan la kulanno kala bar.

Waxaan go'aansanay inaan ku laabano mid ka mid ah fikradihii hore ee ku saabsan mypy. Sida, si loogu beddelo koodka Python ee C code. Ku tijaabinta Cython (nidaamka kuu ogolaanaya inaad u turjunto kood ku qoran Python una rogrogto code C) nama siin wax xawaare ah oo muuqda, markaa waxaan go'aansanay inaan soo noolayno fikradda qorista isku-dubaridkeena. Maaddaama mypy codebase (oo ku qoran Python) ay horey ugu jirtay dhammaan faahfaahinta nooca lagama maarmaanka ah, waxaan u maleynay inay mudan tahay in la isku dayo in la isticmaalo tilmaamahan si loo dedejiyo nidaamka. Waxaan si degdeg ah u sameeyay tusaale si aan u tijaabiyo fikradan. Waxay muujisay in ka badan 10-laab korodhka waxqabadka ee bartilmaameedyada yaryar ee kala duwan. Fikradeenu waxay ahayd in la ururiyo modules Python modules C iyadoo la isticmaalayo Cython, iyo in loo beddelo nooca tafatirka jeegaga nooca run-time (sida caadiga ah tafatirka nooca waa la iska indha tiray-time oo loo isticmaalo oo kaliya by nooca hubin nidaamka). Waxaan dhab ahaantii qorsheynay inaan ka turjuno hirgelinta mypy-ka Python luqad loo qorsheeyay in si toos ah loo daabaco, oo u ekaan lahaa (iyo, inta badan, shaqada) sida Python oo kale. (Heerkan oo kale waxa uu noqday wax dhaqan u ah mashruuca mypy-ga. Hirgelinta asalka ah ee mypy waxa lagu qoray Alore, ka dibna waxaa jiray isku-dhafka Java iyo Python).

Diirada saarista CPython fidinta API waxay fure u ahayd inaan lumin awoodaha maaraynta mashruuca. Uma baahnin in aan hirgelino mishiinka farsamada ama maktabadaha uu mypy u baahan yahay. Intaa waxaa dheer, waxaan wali heli lahayn dhammaan nidaamka deegaanka Python iyo dhammaan agabka (sida pytest). Tani waxay ka dhigan tahay in aan sii wadi karno isticmaalka koodka Python ee la turjumay inta lagu jiro horumarinta, taas oo noo ogolaanaysa inaan sii wadno la shaqeynta qaab aad u degdeg ah oo isbedel kood ah oo la tijaabiyo, halkii aan sugi lahayn in koodka la ururiyo. Waxay u egtahay inaan qabanayno shaqo aad u wanaagsan oo ku fadhida laba kursi, si loo hadlo, oo aan jecelnahay.

Soo-sameeyaha, oo aan ugu yeernay mypyc (maaddaama ay u adeegsato mypy-ka hore ee falanqaynta noocyada), waxay noqotay mashruuc aad u guulaystay. Guud ahaan, waxaanu ku gaadhnay ku dhawaad ​​4x xawli ku socda orodyada soo noqnoqda ee mypy iyada oo aan la kaydin. Horumarinta xudunta u ah mashruuca mypyc waxay qaadatay koox yar oo Michael Sullivan, Ivan Levkivsky, Hugh Hahn, iyo naftayda ilaa 4 bilood. Caddadka shaqadu aad bay uga yarayd waxa loo baahnaa si dib loogu qoro mypy, tusaale ahaan, C++ ama Go. Waxayna ahayd in aanu samayno wax ka badal aad u yar mashruuca marka loo eego in aanu samayn lahayn marka dib loogu qorayo luuqad kale. Waxaan sidoo kale rajaynay inaan u keeni karno mypyc heerkan oo kale in barnaamijyada Dropbox kale ay u isticmaali karaan si ay u ururiyaan oo ay u dedejiyaan koodka.

Si loo gaaro heerkan waxqabadka, waxaan ku qasbanahay inaan isticmaalno qaar ka mid ah xalalka injineernimada ee xiisaha leh. Sidaa darteed, iskudubariduhu waxa uu dadajin karaa hawlo badan isaga oo si degdeg ah u isticmaalaya dhismooyinka heerka hoose ee C.Tusaale ahaan, wicitaanka shaqada ee la soo ururiyey waxa loo turjumayaa C function call. Wicitaan noocan oo kale ah aad ayuu uga dhakhso badan yahay wacitaanka shaqo la turjumay. Hawlgallada qaarkood, sida raadinta qaamuuska, ayaa weli ku lug leh adeegsiga wicitaannada C-API ee caadiga ah ee CPython, kuwaas oo ahaa wax yar uun degdeg ah markii la ururiyey. Waxaan awoodnay inaan baabi'inno culeyska dheeraadka ah ee nidaamka lagu abuuray tarjumaad, laakiin tani waxay siisay faa'iido yar oo kaliya marka la eego waxqabadka.

Si loo aqoonsado hawlgallada "gaabis" ee ugu caansan, waxaanu samaynay sifayn koodhka. Annaga oo ku hubaysan xogtan, waxaanu isku daynay inaanu midna ka dhigno mypyc si ay u soo saarto koodhka C-ga degdega ah ee hawlgalladan oo kale, ama dib u qor koodka Python ee u dhigma annagoo adeegsanayna hawlgallo degdeg ah (mararka qaarkoodna ma haysanno xal fudud oo ku filan taas ama dhibaato kale) . Dib u qorista koodka Python inta badan waxay ahayd xal u sahlan dhibaatada marka loo eego in iskuduwehu uu si toos ah u sameeyo isbeddel isku mid ah. Muddada dheer, waxaan rabnay inaan otomaatig u sameyno qaar badan oo ka mid ah isbeddelladan, laakiin waqtigaas waxaan diiradda saarnay inaan dardargelinno mypy dadaal yar. Oo markaan u dhaqaaqno yoolkan, waxaan jarnay dhowr geesood.

In la sii wado ...

Akhristayaasha sharafta leh! Maxay ahaayeen aragtidaada mashruuca mypy markii aad ogaatay jiritaankiisa?

Waddada lagu saxayo 4 milyan oo xariiq oo code Python ah. Qaybta 2
Waddada lagu saxayo 4 milyan oo xariiq oo code Python ah. Qaybta 2

Source: www.habr.com

Add a comment