Indlela yokuchwetheza imigca ezizigidi ezi-4 zekhowudi yePython. Icandelo loku-1

Namhlanje sikuzisa ingqalelo yakho inxalenye yokuqala yokuguqulelwa kwezinto malunga nendlela iDropbox ejongana ngayo nohlobo lolawulo lwekhowudi yePython.

Indlela yokuchwetheza imigca ezizigidi ezi-4 zekhowudi yePython. Icandelo loku-1

I-Dropbox ibhala kakhulu kwiPython. Lulwimi esilusebenzisa ngokubanzi kakhulu, zombini kwiinkonzo zasemva kunye nezicelo zabaxumi bedesktop. Sikwasebenzisa iGo, TypeScript kunye neRust kakhulu, kodwa iPython lolona lwimi lwethu luphambili. Ukuqwalasela umlinganiselo wethu, kwaye sithetha ngezigidi zemigca yekhowudi yePython, kwavela ukuba ukuchwetheza okuguquguqukayo kwekhowudi enjalo ngokungafanelekanga kwanzima ukuqonda kwayo kwaye kwaqala ukuchaphazela kakhulu imveliso yabasebenzi. Ukunciphisa le ngxaki, sele siqalisile ukutshintsha ngokuthe ngcembe ikhowudi yethu kuhlobo olungatshintshiyo lokujonga usebenzisa i-mypy. Le yeyona ndlela idumileyo yokujonga uhlobo oluzimeleyo lwePython. I-Mypy yiprojekthi yomthombo ovulekileyo, abaphuhlisi bayo abaphambili basebenza kwiDropbox.

I-Dropbox yayiyenye yeenkampani zokuqala ukuphumeza ukujonga uhlobo olusisigxina kwikhowudi yePython kwesi sikali. I-Mypy isetyenziswa kumawaka eeprojekthi kule mihla. Esi sixhobo izihlandlo ezingenakubalwa, njengoko besithi, "kuvavanywa edabini." Umgama omde siwuhambile ukuze sifike kule ndawo sikuyo ngoku. Endleleni, kwakukho imisebenzi emininzi engaphumeleli kunye nemifuniselo engazange iphumelele. Esi sithuba sigubungela imbali yohlobo lwe-static lokujonga kwiPython, ukusuka ekuqaleni kwayo njengenxalenye yeprojekthi yam yophando, ukuza kuthi ga namhlanje, xa uchwethezo lokukhangela kunye nokuchwetheza ukuchwetheza kube yindawo eqhelekileyo kubaphuhlisi abangenakubalwa ababhala kwiPython. Ezi ndlela ngoku zixhaswa zizixhobo ezininzi ezifana nee-IDE kunye nabahlalutyi bekhowudi.

β†’ Funda icandelo lesibini

Kutheni kujongwa uhlobo oluyimfuneko?

Ukuba ukhe wasebenzisa iPython echwetheziweyo, unokuba nokubhideka ukuba kutheni bekukho impikiswano ejikeleze ukuchwetheza okumileyo kunye ne-mypy mva nje. Okanye mhlawumbi uyayithanda iPython ngokuchanekileyo ngenxa yokuchwetheza kwayo okuguquguqukayo, kwaye okwenzekayo kuyakucaphukisa. Isitshixo kwixabiso lokuchwetheza okumileyo sisikali sezisombululo: kokukhona usiba likhulu iprojekthi yakho, kokukhona ungqiyama ngokuchwetheza okumileyo, kwaye ekugqibeleni, kokukhona uyifuna ngakumbi.

Masithi iprojekthi ethile ifikelele kubungakanani bamashumi amawaka emigca, kwaye kwavela ukuba abadwelisi benkqubo abaninzi basebenza kuyo. Ukujonga iprojekthi efanayo, ngokusekelwe kumava ethu, sinokuthi ukuqonda ikhowudi yayo kuya kuba sisitshixo sokugcina abaphuhlisi bevelisa. Ngaphandle kohlobo lwesichasiselo, kunokuba nzima ukufumanisa, umzekelo, ukuba zeziphi iimpikiswano onokuzigqithisela kumsebenzi, okanye zeziphi iindidi zomsebenzi ezinokubuya. Nantsi imibuzo eqhelekileyo edla ngokuba nzima ukuyiphendula ngaphandle kokusebenzisa uhlobo lwezihlomelo:

  • Ngaba lo msebenzi unokubuya None?
  • Ifanele ibe yintoni le ngxabano? items?
  • Luthini uhlobo lophawu id: int injalo, str, okanye mhlawumbi uhlobo oluthile?
  • Ngaba le ngxabano kufuneka ibe luluhlu? Ngaba kunokwenzeka ukudlulisa i-tuple kuyo?

Ukuba ujonga kolu hlobo lulandelayo-inqaku lekhowudi yasishwankathelo kwaye uzame ukuphendula imibuzo efanayo, kuyavela ukuba lo ngowona msebenzi ulula:

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

  • read_metadata ayibuyi None, kuba uhlobo lokubuyisela alukho Optional[…].
  • Impikiswano items lulandelelwano lwemigca. Ayinakuphindwa ngokungenamkhethe.
  • Nikela id luluhlu lweebhayithi.

Kwihlabathi elilungileyo, umntu unokulindela ukuba zonke ezo ntsonkotha ziya kuchazwa kuxwebhu olwakhelwe ngaphakathi (docstring). Kodwa amava anika imizekelo emininzi yokuba loo maxwebhu ahlala engabonwa kwikhowudi omele usebenze ngayo. Nangona amaxwebhu anjalo akhoyo kwikhowudi, umntu akanakuthembela ekuchanekeni kwayo ngokupheleleyo. Olu xwebhu lunokungacacanga, lungachaneki, kwaye luvuleleke ekungaqondani. Kumaqela amakhulu okanye iiprojekthi ezinkulu, le ngxaki inokuba mbi kakhulu.

Ngelixa iPython igqwesa kumanqanaba okuqala okanye aphakathi kweeprojekthi, ngaxa lithile iiprojekthi eziphumeleleyo kunye neenkampani ezisebenzisa iPython zinokujongana nombuzo obalulekileyo: "Ngaba kufuneka siphinde sibhale yonke into ngolwimi oluchwetheziweyo?".

Chwetheza iinkqubo zokukhangela ezifana ne-mypy zisombulula le ngxaki ingentla ngokubonelela umphuhlisi ngolwimi olusesikweni lokuchaza iindidi, kwaye ngokujonga ukuba uhlobo lwezibhengezo luhambelana nokuphunyezwa kwenkqubo (kwaye, ngokukhetha, ukujonga ubukho babo). Ngokubanzi, sinokuthi ezi sistim zibeka kuthi into efana namaxwebhu ajongwe ngononophelo.

Ukusetyenziswa kweenkqubo ezinjalo kunezinye izibonelelo, kwaye sele zingekho ncinane ngokupheleleyo:

  • Inkqubo yokujonga uhlobo inokubona iimpazamo ezincinci (kwaye azincinci kangako). Umzekelo oqhelekileyo kuxa belibala ukucubungula ixabiso None okanye enye imeko ekhethekileyo.
  • Ikhowudi refactoring yenziwe lula kakhulu kuba inkqubo yokujonga uhlobo ihlala ichanekile malunga nokuba yeyiphi ikhowudi ekufuneka itshintshwe. Ngexesha elifanayo, akufuneki sithembele kwi-100% yekhowudi yokugubungela ngeemvavanyo, apho, kuyo nayiphi na imeko, ngokuqhelekileyo ayinakwenzeka. Akukho mfuneko yokuba singene kubunzulu bomkhondo wemfumba ukuze sifumanise unobangela wengxaki.
  • Nakwiiprojekthi ezinkulu, i-mypy ihlala isenza uchwephesha olupheleleyo kwiqhezu lomzuzwana. Kwaye ukuphunyezwa kovavanyo ngokuqhelekileyo kuthatha amashumi emizuzwana okanye imizuzu. Inkqubo yokukhangela uhlobo inika umdwelisi ingxelo ngoko nangoko kwaye imvumela ukuba enze umsebenzi wakhe ngokukhawuleza. Akusekho mfuneko yokuba abhale eethe-ethe kwaye enzima ukugcina iimvavanyo zeyunithi ezithatha indawo yamaziko okwenyani kunye neepatches nje ukufumana iziphumo zovavanyo lwekhowudi ngokukhawuleza.

Ii-IDE kunye nabahleli njengePyCharm okanye iKhowudi ye-Visual Studio isebenzisa amandla ohlobo lwezichasiselo ukunika abaphuhlisi ukugqitywa kwekhowudi, ukugqamisa impazamo, kunye nenkxaso yolwakhiwo lolwimi olusetyenziswa ngokuqhelekileyo. Kwaye ezi zezinye zezibonelelo zokuchwetheza. Kwabanye abadwelisi benkqubo, yonke le yeyona mpikiswano iphambili exhasa ukuchwetheza. Le yinto exhamlayo ngokukhawuleza emva kokuphunyezwa. Le meko yokusetyenziswa kwiintlobo ayifuni inkqubo yokukhangela eyahlukileyo efana ne-mypy, nangona kufuneka kuqatshelwe ukuba i-mypy inceda ukugcina izichasiselo zohlobo zihambelana nekhowudi.

Imvelaphi ye-mypy

Imbali ye-mypy yaqala e-UK, eCambridge, kwiminyaka embalwa ngaphambi kokuba ndijoyine iDropbox. Ndiye ndabandakanyeka, njengenxalenye yophando lwam lobugqirha, kumanyano lweelwimi ezichwetheziweyo neziguqukayo. Ndaphefumlelwa linqaku malunga nokuchwetheza okongeziweyo nguJeremy Siek kunye noWalid Taha, kunye neprojekthi yeRacket echwetheziweyo. Ndizamile ukufumana iindlela zokusebenzisa ulwimi olufanayo lwenkqubo kwiiprojekthi ezahlukeneyo - ukusuka kwimibhalo emincinci ukuya kwiziseko zekhowudi ezibandakanya izigidi ezininzi zemigca. Kwangaxeshanye, ndandifuna ukuqinisekisa ukuba kwiprojekthi yaso nasiphi na isikali, umntu akasayi kufuneka enze izinto ezinkulu kakhulu. Inxalenye ebalulekileyo yayo yonke le nto yayiluluvo lokuhamba ngokuthe ngcembe ukusuka kwiprojekthi yeprototype engabhalwanga ukuya kwimveliso egqityiweyo evavanyiweyo. Kwezi ntsuku, ezi zimvo ubukhulu becala zithathwa njengento eqhelekileyo, kodwa ngo-2010 yayiyingxaki eyayisaphononongwa ngenkuthalo.

Umsebenzi wam wokuqala ekujongeni uhlobo wawungajoliswanga kwiPython. Endaweni yoko, ndasebenzisa ulwimi oluncinci "lolwasekhaya". Alore. Nanku umzekelo oya kukuvumela ukuba uqonde ukuba sithetha ngantoni (uhlobo lwezichasiselo lunokuzikhethela apha):

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

Ukusebenzisa ulwimi lwenkobe olulula yindlela eqhelekileyo esetyenziswa kuphando lwezenzululwazi. Oku kunjalo, kuncinci kuba ikuvumela ukuba uqhube ngokukhawuleza iimvavanyo, kwaye ngenxa yokuba into engenanto yakwenza nophando inokungahoywa ngokulula. Iilwimi zenkqubo yelizwe lokwenyani zidla ngokuba ziziganeko ezinkulu ezinokuphunyezwa okuntsokothileyo, kwaye oku kuyacothisa uvavanyo. Nangona kunjalo, naziphi na iziphumo ezisekelwe kulwimi olulula zikhangeleka zikrokreka kancinci, kuba ekufumaneni ezi ziphumo umphandi unokuncama izinto ezibalulekileyo kusetyenziso lweelwimi.

Umhloli wam wohlobo we-Alore ujongeka uthembisa kakhulu, kodwa bendifuna ukuyivavanya ngokuzama ikhowudi yokwenyani, onokuthi, ayibhalwanga kwi-Alore. Ngethamsanqa kum, ulwimi lwaseAlore lwalusekelwe kakhulu kwiingcamango ezifanayo nePython. Kwakulula ngokwaneleyo ukwenza kwakhona isitsheki sokuchwetheza ukuze sisebenze ne-syntax yePython kunye nesemantics. Oku kusivumele ukuba sizame ukuchwetheza ukujonga kwikhowudi yomthombo ovulekileyo wePython. Ukongeza, ndabhala i-transpiler ukuguqula ikhowudi ebhalwe kwi-Alore ukuya kwikhowudi yePython kwaye ndiyisebenzise ukuguqulela ikhowudi yam yokukhangela. Ngoku bendinohlobo lokujonga inkqubo ebhalwe kwiPython exhasa i-subset yePython, uhlobo oluthile lolo lwimi! (Izigqibo ezithile zokwakha ezinengqiqo kwi-Alore bezingafanelekanga kwiPython, kwaye oku kusaphawuleka kwiindawo ezithile ze-mypy codebase.)

Ngapha koko, ulwimi oluxhaswa sisixokelelwano sam sohlobo alunakubizwa ngokuba yiPython ngeli xesha: yayiyantlukwano yePython ngenxa yemida ethile yePython 3 yodidi lwesichasiselo sesyntax.

Kwakubonakala ngathi ngumxube weJava kunye nePython:

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

Enye yeengcamango zam ngelo xesha yayikukusebenzisa uhlobo lweenkcazo zokuphucula ukusebenza ngokuqulunqa olu hlobo lwePython ukuya kwiC, okanye mhlawumbi i-JVM bytecode. Ndifike kwinqanaba lokubhala iprototype yomqokeleli, kodwa ndawuyeka lo mbono, kuba uhlobo lokuzijonga lukhangeleka luluncedo.

Ndigqibele ngokubonisa iprojekthi yam kwiPyCon 2013 eSanta Clara. Ndiphinde ndathetha ngale nto noGuido van Rossum, uzwilakhe onobubele wePython ubomi bonke. Wandiqinisekisa ukuba ndilahle eyam i-syntax kwaye ndinamathele kwi-syntax eqhelekileyo yePython 3. I-Python 3 ixhasa amanqakwana omsebenzi, ngoko umzekelo wam unokuphinda ubhalwe njengoko kubonisiwe ngezantsi, kubangele inkqubo yePython eqhelekileyo:

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

Kwafuneka ndenze uhlengahlengiso (okokuqala, ndifuna ukuqaphela ukuba ndiyile eyam i-syntax ngenxa yesi sizathu). Ngokukodwa, iPython 3.3, inguqulelo yamva nje yolwimi ngelo xesha, ayizange ixhase izichasiselo eziguquguqukayo. Ndixoxe noGuido nge-imeyile ngamathuba ahlukeneyo oyilo lolungelelwaniso lwezichasiselo ezinjalo. Sagqiba ekubeni sisebenzise izimvo zohlobo lweenguqu. Oku kusebenze injongo ekujoliswe kuyo, kodwa kwakunzima ngandlel’ ithile (iPython 3.6 isinike i-syntax entle):

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

Uhlobo lwamagqabaza luye lwaluncedo ukuxhasa iPython 2, engenankxaso eyakhelweyo yohlobo lwezihlomelo:

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

Kwafumaniseka ukuba ezi (kunye nezinye) ukurhweba akunamsebenzi ncam - izibonelelo zokuchwetheza okumileyo zithetha ukuba abasebenzisi balibale ngokukhawuleza malunga ne-syntax engaphantsi kune-egqibeleleyo. Ekubeni kungekho zixhobo ezikhethekileyo zokwakhiwa kwe-syntactic ezisetyenzisiweyo kwikhowudi yePython yohlobo, izixhobo ezikhoyo zePython kunye neenkqubo zokucubungula ikhowudi zaqhubeka nokusebenza ngokuqhelekileyo, okwenza kube lula kakhulu kubaphuhlisi ukuba bafunde isixhobo esitsha.

UGuido naye wandiqinisekisa ukuba ndijoyine iDropbox emva kokuba ndigqibe ithisisi yam yesidanga. Kulapho elona candelo linomdla kakhulu lebali eliyi-mypy liqala khona.

Iza kuqhubeka…

Bafundi abathandekayo! Ukuba usebenzisa iPython, nceda usixelele malunga nobungakanani beeprojekthi oziphuhlisayo ngolu lwimi.

Indlela yokuchwetheza imigca ezizigidi ezi-4 zekhowudi yePython. Icandelo loku-1
Indlela yokuchwetheza imigca ezizigidi ezi-4 zekhowudi yePython. Icandelo loku-1

umthombo: www.habr.com

Yongeza izimvo