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

Maanta waxaan kuu soo jeedinaynaa dareenkaaga qaybta koowaad ee tarjumaada walxaha ku saabsan sida Dropbox ula macaamisho nooca koodhka Python.

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

Dropbox wax badan ayuu ku qoraa Python. Tani waa luqad aan u isticmaalno si aad u ballaaran - labadaba adeegyada dhabarka iyo codsiyada macaamiisha desktop. Waxaan sidoo kale aad u isticmaalnaa Go, TypeScript iyo Rust, laakiin Python waa luqadeena ugu weyn. Iyadoo la tixgelinayo miisaankeenna, oo aan ka hadlayno malaayiin xariiq oo koodka Python ah, waxaa soo baxday in ku-qorista firfircoon ee koodhkan oo kale ay si aan loo baahnayn u adkeyn fahamkeeda oo ay si dhab ah u saameynayso wax soo saarka shaqada. Si loo yareeyo arrintan, waxaan bilownay inaan si tartiib tartiib ah ugu beddelno koodkayaga hubinta nooca taagan annaga oo adeegsanayna mypy. Tani waxay u badan tahay inay tahay nidaamka hubinta nooca gooni-gooni ugu caansan ee Python. Mypy waa mashruuc il furan, horumariyayaashiisa ugu weyn waxay ka shaqeeyaan Dropbox.

Dropbox waxay ahayd mid ka mid ah shirkadihii ugu horreeyay ee hirgaliyay nooca saxda ah ee hubinta koodka Python cabirkan. Mypy waxa maalmahan loo adeegsaday kumanaan mashruuc. Qalabkan waxa, sida ay yiraahdaan, "dagaal lagu tijaabiyey" marar aan la tirin karin. Waxa ay ahayd in aan soo galno waddo dheer si aan u gaarno halka aan hadda joogno. Waxaa jiray dadaallo badan oo aan guuleysan iyo tijaabooyin lagu guul darreystay intii ay jidka ku jireen. Qormadani waxay ka warramaysaa taariikhda hubinta nooca taagan ee Python, laga soo bilaabo bilawgeedii dhagaxa ahayd ee qayb ka ah mashruuca cilmi baadhista tacliimeed ilaa maanta, marka nooca jeegaga iyo nooca tilmaamuhu ay noqdeen wax caadi ah oo ka mid ah horumariyayaal Python oo aan tiro lahayn. Hababkan waxaa hadda taageeray qalabyo kala duwan, sida IDE-yada iyo koodhka falanqaynta.

β†’ Akhri qaybta labaad

Maxaa loogu baahan yahay hubinta nooca?

Haddii aad waligaa isticmaashay Python si firfircoon u teebaysan, waxa laga yaabaa in aad ku yara jahawareerto sababta ay beryahan danbe u jirtay buuq badan oo ku saabsan qorista tooska ah iyo mypy. Ama waxaa laga yaabaa inaad jeceshahay Python si sax ah sababta oo ah qoraalkeeda firfircoon, iyo waxa dhacaya ayaa si fudud kaaga cadhaysiinaya. Furaha qiimaha teeb-ka tooska ah waa cabbirka go'aannada: mar kasta oo mashruucaagu weynaado, waa in badan oo aad u janjeerto dhinaca teeb-ka tooska ah, iyo, ugu dambeyntii, in badan oo aad runtii ugu baahan tahay.

Aynu nidhaahno mashruuc wuxuu gaadhay tobanaan kun oo xariiq oo cabbirkiisu dhan yahay, waxaana soo baxday in dhawr programmers ay ka shaqaynayaan. Marka la tixgelinayo mashruuc sidan oo kale ah, oo ku saleysan khibradeena, waxaan dhihi karnaa in fahamka koodkiisa uu fure u noqon doono ilaalinta wax soo saarka horumariyaha. Haddii aan la helin faahfaahinta nooca, way adkaan kartaa in la ogaado, tusaale ahaan, maxay yihiin doodaha loo gudbinayo shaqada, ama noocyada qiyamka shaqada qaarkood ayaa soo noqon kara. Waa kuwan su'aalo caadi ah oo inta badan ay adag tahay in laga jawaabo iyada oo aan la isticmaalin tafsiir nooca:

  • Shaqadani ma soo noqon kartaa None?
  • Maxay tahay dooddani? items?
  • Waa maxay nooca sifada id: int ma tahay, str, ama laga yaabee nooc caado ah?
  • Dooddani miyay tahay liis? Suurtagal ma tahay in tuple la dhex maro?

Haddii aad eegto nooca soo socda ee kood-qodobeedka lagu sharraxay oo aad isku daydo inaad ka jawaabto su'aalahan oo kale, waxaa kuu soo baxaysa in tani ay tahay hawl fudud:

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

  • read_metadata ma soo noqdo Nonesababtoo ah nooca soo noqoshada maaha Optional[…].
  • dood items waa xariiqyo taxane ah. Laguma soo koobi karo si kasta.
  • Sifada id waa xadhko bytes ah.

Adduunyada ugu habboon, qofku wuxuu filan karaa in dhammaan khiyaanada noocaas ah lagu sifayn doono dukumeenti ku dhex dhisan (docstring). Laakiin waayo-aragnimadu waxay bixisaa tusaalooyin badan oo ah in dukumentiyada noocaas ah aan inta badan lagu arkin koodhka aad ku shaqeyneyso. Xitaa haddii dukumeentiyada noocaas ahi ay ku jiraan koodka, kuma xisaabtami kartid saxnimadeeda. Dukumeentigani waxa uu noqon karaa mid aan caddayn, aan sax ahayn, oo u furan isfaham la'aan. Kooxaha waaweyn ama mashaariicda waaweyn, dhibaatadani waxay noqon kartaa mid aad u daran.

In kasta oo Python uu ku fiicnaado mashaariicda hore ama heerka dhexe, mararka qaar mashaariicda guuleysta iyo shirkadaha adeegsada Python waxaa laga yaabaa inay la kulmaan su'aal muhiim ah: "Miyaynu wax walba ku qori karnaa luqad qaabaysan?"

Nooca hababka hubinta sida mypy waxay xalliyaan dhibaatada kor ku xusan iyagoo siinaya horumariyaha luuqad rasmi ah oo lagu qeexayo noocyada, iyo adoo hubinaya cadeynta noocaas oo u dhigma hirgelinta barnaamijka (iyo, ikhtiyaar ahaan, hubinta jiritaankooda). Guud ahaan, waxaan dhihi karnaa nidaamyadani waxay na siinayaan shay sida dukumeenti si taxadar leh loo xaqiijiyay.

Isticmaalka nidaamyada noocan oo kale ah waxay leeyihiin faa'iidooyin kale, waxayna gebi ahaanba yihiin kuwo aan waxtar lahayn:

  • Nidaamka hubinta nooca wuxuu ogaan karaa khaladaadka yar yar (iyo waliba aan sidaas u fududayn). Tusaalaha caadiga ah waa marka ay illoobaan in ay qiimeeyaan None ama xaalad kale oo gaar ah.
  • Koodhka dib u soo celinta si weyn ayaa loo fududeeyay sababtoo ah nooca hubinta ayaa inta badan kuu sheega sida saxda ah ee koodka loo baahan yahay in la beddelo. Isla mar ahaantaana, uma baahnid inaan ku tiirsanaano 100% daboolida tijaabada koodhka, taas oo inta badan aan macquul ahayn kiis kasta. Uma baahnid in aan si qoto dheer u dhuuxo warbixinada raadraaca si aan u ogaano waxa qaldan.
  • Xataa mashaariicda waaweyn, mypy waxay inta badan samayn kartaa jeeg nooc oo dhamaystiran qayb ilbiriqsi ah. Imtixaannada orodkana waxay caadi ahaan qaataan tobanaan ilbiriqsi ama xitaa daqiiqado. Nidaamka hubinta nooca wuxuu siinayaa barnaamij-fuliyaha jawaab celin degdeg ah wuxuuna u oggolaanayaa inuu si dhakhso leh shaqadiisa u qabto. Mar dambe uma baahna inuu qoro jilicsan oo ay adagtahay in la joogteeyo imtixaanada unugga ee ku beddela hay'adaha dhabta ah jeesjees iyo dhejis si loo helo natiijooyinka imtixaanka koodka.

IDE-yada iyo tifaftirayaasha sida PyCharm ama Visual Studio Code waxay adeegsadaan awooda tafsiir nooca si ay u siiyaan horumariyayaasha dhamaystirka koodka tooska ah, muujinta khaladka, iyo taageerada dhisitaanka luuqadaha la isticmaalo. Kuwanuna waa qaar ka mid ah faa'iidooyinka qoraal-ku-qoris ay bixiso. Qaar ka mid ah barnaamijyada, waxaas oo dhan waa doodda ugu weyn ee taageerta wax-ku-qorista. Tani waa shay faa'iido keena isla markiiba ka dib hirgelinta. Kiiskan isticmaalka noocyada uma baahna nidaam hubinaya nooca goonida ah sida mypy, in kasta oo ay tahay in la ogaado in mypy ay ka caawiso joogteynta udhaxeeya qoraalada nooca iyo koodka.

asalka Mypy

Sheekada qarsoodiga ah waxay ka bilaabatay UK, Cambridge, dhawr sano ka hor intaanan ku biirin Dropbox. Iyada oo qayb ka ah cilmi-baadhista dhakhtarkayga, waxaan ka shaqeeyay arrinta midaynta luqadaha farcanka leh iyo kuwa wax statistics ah. Waxaa i dhiiri galiyay maqaal ku saabsan qorista kordhinta ee Jeremy Siek iyo Walid Tah, iyo sidoo kale mashruuca Racket Typed. Waxaan isku dayay in aan helo habab isku mid ah oo aan u isticmaalo luuqad barnaamijeed isku mid ah mashaariic kala duwan - laga bilaabo qoraallada yaryar ilaa saldhigyada codebases oo ka kooban malaayiin badan oo khad ah. Isla mar ahaantaana, waxaan rabay inaan hubiyo in mashruuc kasta oo miisaan ah aanan u baahnayn inaan sameeyo tanaasulaad badan. Qayb muhiim ah oo ka mid ah waxaas oo dhan waxay ahayd fikradda ah in si tartiib tartiib ah looga guuro mashruuc aan la qorin oo loo gudbo badeecad si dhammaystiran loo tijaabiyay, oo si habaysan loo tebiyay. Fikradahaan ayaa ah kuwo si weyn loo qaatay maalmahan, laakiin 2010 waxay ahayd arrin weli si firfircoon loo baarayo.

Shaqadaydii hore ee hubinta nooca ujeedadeedu ma ahayn Python. Halkii aan isticmaalay luuqad yar oo "guri lagu sameeyo". Alore. Waa kuwan tusaale aan ku siinno fikrad ah waxa aan ka hadlayno (nooca tafaasiisha waa ikhtiyaari):

def Fib(n as Int) as Int
  if n <= 1
    return n
  else
    return Fib(n - 1) + Fib(n - 2)
  end
end

Isticmaalka luuqad la fududeeyay ee naqshadaada gaarka ah waa hab caadi ah oo loo isticmaalo cilmi baarista sayniska. Tani waa sidaas, ugu yaraan sababtoo ah tani waxay suurtogal ka dhigaysaa in si dhakhso ah loo sameeyo tijaabooyinka, iyo sidoo kale sababtoo ah waxa aan khusayn cilmi-baarista si fudud ayaa loo iska indho tiri karaa. Luqadaha barnaamijyada nolosha dhabta ah waxay u muuqdaan inay yihiin ifafaale baaxad weyn leh oo leh hirgelin adag, taasoo hoos u dhigta tijaabinta. Si kastaba ha ahaatee, natiijooyin kasta oo ku salaysan luuqad la fududeeyay ayaa ah shaki yar, maadaama helitaanka natiijooyinkan cilmi-baaruhu uu u huray tixgelinno muhiim u ah isticmaalka dhabta ah ee luqadaha.

Hubiyaha nooca ee Alore wuxuu u muuqday mid rajo leh, laakiin waxaan rabay inaan tijaabiyo anigoo tijaabinaya koodka dhabta ah ee aan ku qornayn Alore. Nasiib wanaag aniga, luqadda Aore waxay inta badan ku salaysan tahay fikrado la mid ah Python. Way fududahay in dib loo habeeyo nooca hubinta si ay ula shaqeyso Python syntax iyo semantics. Tani waxay noo ogolaatay inaan isku dayno inaan samayno nooca hubinta ee koodka Python isha furan. Waxa kale oo aan qoray qalab-gudbiye si aan koodka Alore ugu beddelo koodka Python oo aan u adeegsaday si aan u turjumo summadayda nooca hubinta. Hadda waxaan haystay nidaam hubinaya nooca oo ku qoran Python kaasoo taageeray qayb-hoosaadka Python, qaar ka mid ah noocyada kala duwan ee luqaddaas! (Go'aannada dhismaha qaarkood ee macnaha u yeelay Alore ayaa si liidata ugu habboon Python; tani waxay weli ka muuqataa qaybo ka mid ah mypy codebase.)

Dhab ahaantii, luqadda uu taageeray nidaamkayga noocaan ah laguma magacaabi karo Python xilligan: waxay ahayd nooc ka mid ah Python sababtoo ah xaddidaadyada Python 3's annotation syntax.

Waxay u egtahay isku dhafka Java iyo Python:

int fib(int n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

Mid ka mid ah fikradahayga wakhtigaas ayaa ahaa in aan isticmaalo sharraxaadda nooca si aan u wanaajiyo waxqabadka aniga oo soo ururinaya dhadhankan Python gudaha C, ama laga yaabee JVM bytecode. Waxa aan soo gaadhay heerkii qoraal-sameeyaha prototype-ka, laakiin waa ka tagay fikradan sababtoo ah nooca hubinta lafteeda ayaa u muuqatay mid faa'iido leh.

Waxaan ku soo gaba gabeeyay bandhigga mashruuca PyCon 2013 ee Santa Clara. Waxa kale oo aan arrintan kala hadlay Guido van Rossum, Python ee nolosha u naxariista kaligii taliye. Waxa uu igu qanciyay in aan iska tuuro syntax-kayga caadiga ah oo aan ku dhejiyo habka caadiga ah ee Python 3. Python 3 waxay taageertaa sharraxaadda shaqada, markaa tusaalahayga dib ayaa loo qori karaa sida hoose, taasoo keentay barnaamijka Python caadiga ah:

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

Waxay ahayd inaan sameeyo tanaasul (marka hore, waxaan rabaa in aan tilmaamo in tani ay tahay sababta aan u hindisay syntax ii gaar ah). Gaar ahaan, Python 3.3, oo ah nooca ugu dambeeyay ee luqadda wakhtigaas, ma aysan taageerin sharraxaadyo doorsooma. Waxaan kala hadlay xulashooyin kala duwan oo isku dhafan oo ku saabsan faallooyinkaas Guido ee iimaylka ah. Waxaan go'aansanay inaan u isticmaalno faallooyinka nooca doorsoomayaasha. Tani waxay gaadhay hadafkii, laakiin waxay u muuqatay wax yar oo dhib badan (Python 3.6 wuxuu na siiyay erey ka wanaagsan):

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

Faallooyinka nooca ayaa sidoo kale faa'iido u leh taageeridda Python 2, kaas oo aan lahayn taageero ku dhisan tafsiir nooca:

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

Waxaa soo baxday in kuwan (iyo kuwa kale) tanaasulaadyadu aysan run ahaantii muhiim ahayn - faa'iidooyinka ku-qorista tooska ah waxay la macno tahay in isticmaalayaashu ay isla markiiba illoobeen ereyga aan qummanayn. Maaddaama koodka Python ee noocyada kantaroolay aysan isticmaalin syntax gaar ah, qalabyada Python ee jira iyo hababka code ayaa sii waday inay si caadi ah u shaqeeyaan, taasoo u sahlaysa horumariyayaashu inay bartaan qalabka cusub.

Guido waxa kale oo uu igu qanciyay in aan ku biiro Dropbox ka dib markii aan dhammeeyey qoraalkayga sare. Tani waa halka ugu xiisaha badan ee taariikhda mypy ay ka bilaabato.

In la sii wado ...

Akhristayaasha sharafta leh! Haddii aad isticmaasho Python, fadlan nooga sheeg miisaanka mashaariicda aad ku horumarinayso luqaddan.

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

Source: www.habr.com

Add a comment