Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 2

Nhasi tiri kuburitsa chikamu chechipiri cheshanduro yezvinyorwa nezvekuti Dropbox yakaronga sei kutonga kwemhando yemamiriyoni akati wandei mitsara yePython kodhi.

Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 2

β†’ Verenga chikamu chekutanga

Rutsigiro rwemhando yepamutemo (PEP 484)

Takaita ongororo dzedu dzekutanga dzakakomba ne mypy paDropbox panguva yeHack Week 2014. Hack Week chiitiko chevhiki rimwechete chinoitiswa neDropbox. Munguva ino, vashandi vanogona kushanda pane chero chavanoda! Mamwe emapurojekiti eDropbox anozivikanwa kwazvo akatanga pazviitiko zvakaita seizvi. Nekuda kwekuyedza uku, takagumisa kuti mypy inotaridzika kuvimbisa, kunyangwe chirongwa ichi chisati chagadzirira kushandiswa kwakapararira.

Panguva iyoyo, iyo pfungwa yekumisikidza Python mhando hinting masisitimu yaive mumhepo. Sezvandakataura, sezvo Python 3.0 zvaigoneka kushandisa rondedzero yemhando yemabasa, asi aya aingova matauriro asina musoro, pasina akatsanangurwa syntax uye semantics. Panguva yekuitwa kwechirongwa, zvirevo izvi, kazhinji, zvakangofuratirwa. Mushure meHack Week, takatanga kushanda pakuenzanisa semantics. Basa iri rakakonzera kubuda PEP 484 (Guido van Rossum, Łukasz Langa neni takabatira pamwe pagwaro iri).

Vavariro dzedu dzaigona kuonekwa nemativi maviri. Chekutanga, taitarisira kuti iyo yese Python ecosystem yaigona kutora nzira yakajairwa pakushandisa mhando mazano (izwi rinoshandiswa muPython serinofanana ne "type zvirevo"). Izvi, zvichipihwa njodzi dzinogona kuitika, zvingava nani pane kushandisa nzira dzakawanda dzisingawirirane. Chechipiri, taida kukurukura pachena maitiro emhando yezvinyorwa nenhengo dzakawanda dzenharaunda yePython. Ichi chishuvo chaive chakatemerwa nenyaya yekuti isu hatingade kutaridzika se "vakaramba kutenda" kubva papfungwa dzekutanga dzemutauro mumaziso eruzhinji rwePython programmers. Mutauro wakanyorwa zvine simba, unozivikanwa se "dhadha typing". Munharaunda, pakutanga, imwe pfungwa yekufungira pfungwa yekutaipa static haina kubatsira asi kusimuka. Asi manzwiro aya akazopera mushure mekunge zvave pachena kuti kutaipa kwaisazove kwekusungirwa (uye mushure mekunge vanhu vaona kuti zvaitobatsira).

Rudzi rwehint syntax yakazogamuchirwa yaive yakafanana neyakatsigirwa nemypy panguva iyoyo. PEP 484 yakaburitswa nePython 3.5 muna 2015. Python yakanga isisiri mutauro wakanyorwa zvine simba. Ini ndinoda kufunga nezve chiitiko ichi sechinhu chakakosha munhoroondo yePython.

Kutanga kwekutama

Pakupera kwa2015, Dropbox yakagadzira timu yevanhu vatatu kuti vashande pane mypy. Vaisanganisira Guido van Rossum, Greg Price naDavid Fisher. Kubva panguva iyoyo, mamiriro acho akatanga kukura nekukurumidza. Chekutanga chipingamupinyi pakukura kwemypy kwaive kuita. Sezvandakataura pamusoro, mumazuva ekutanga epurojekiti ndakafunga nezve kushandura mypy kuita muC, asi pfungwa iyi yakayambuka kubva pane iyo rondedzero ikozvino. Isu takanga takabatikana nekumhanyisa sisitimu tichishandisa muturikiri weCPython, iyo isingakurumidze zvakakwana kune zvishandiso senge mypy. (Iyo PyPy purojekiti, imwe nzira yePython kuita neJIT compiler, haina kutibatsirawo.)

Neraki, kumwe kuvandudzwa kwealgorithmic kwauya kuzotibatsira pano. Yekutanga ine simba "accelerator" yaive yekuitwa kwekuwedzera kwekutarisa. Pfungwa yekuseri kwekuvandudzwa uku yaive yakapusa: kana zvese zvinotsamira zvemodule zvisina kushanduka kubva pakatanga kumhanya kwe mypy, saka tinogona kushandisa iyo data yakavharirwa panguva yekumhanya kwekutanga tichishanda nevanovimba. Isu taingoda chete kutarisa mhando pamafaira akagadziridzwa uye pamafaira aienderana nawo. Mypy akatoenda mberi zvishoma: kana iyo yekunze interface yemodule isina kuchinja, mypy akafunga kuti mamwe mamodule akaunza iyi module aisada kuongororwa zvakare.

Kuwedzera kutarisa kwakatibatsira zvakanyanya kana tichizivisa huwandu hukuru hwekodhi iripo. Icho chiripo ndechekuti maitiro aya anowanzo sanganisira akawanda iterative kumhanya kwe mypy sezvo zvirevo zvinowedzerwa zvishoma nezvishoma kune kodhi uye zvishoma nezvishoma inovandudzwa. Yekutanga kumhanya yemypy yaive ichiri kunonoka nekuti yaive nezvakawanda zvekutsamira kutarisa. Zvadaro, kuti tigadzirise mamiriro acho ezvinhu, takashandisa nzira yekudzivirira kure. Kana mypy ikaona kuti cache yemuno ingangove yemazuva, inodhawunirodha yazvino cache snapshot yeiyo codebase yese kubva kune yepakati repository. Inobva yaita cheki yekuwedzera ichishandisa iyi snapshot. Izvi zvakatitorera rimwe danho rakakura rekuwedzera kuita kwe mypy.

Iyi yaive nguva yekukurumidza uye yechisikigo kutorwa kwemhando yekutarisa paDropbox. Pakazopera 2016, takanga tatova nemitsara inosvika mazana mana nemakumi maviri ezviuru zvePython kodhi ine mhando zvirevo. Vazhinji vashandisi vaifarira nezvekutarisa mhando. Zvikwata zvakawanda zvekusimudzira zvaishandisa Dropbox mypy.

Zvinhu zvose zvairatidzika zvakanaka panguva iyoyo, asi tainge tichine zvakawanda zvokuita. Takatanga kuita nguva nenguva mukati memushandisi ongororo kuitira kuti tione nzvimbo dzine dambudziko reprojekiti uye tinzwisise kuti ndedzipi nyaya dzinoda kugadziriswa kutanga (iyi tsika ichiri kushandiswa mukambani nhasi). Akanyanya kukosha, sezvazvakava pachena, aive mabasa maviri. Kutanga, taida kuwedzera kuvharwa kwekodhi, chechipiri, taida mypy kuti ishande nekukurumidza. Zvaive pachena kuti basa redu rekumhanyisa mypy nekurishandisa mumapurojekiti ekambani rakanga richiri kure nekupedzwa. Isu, tichiziva zvizere kukosha kweaya mabasa maviri, takatanga kuagadzirisa.

Kuwedzera kubereka!

Kuwedzera kwecheki kwakaita kuti mypy ikurumidze, asi chishandiso chaive chisati chakurumidza zvakakwana. Mazhinji ekuwedzera echeki atora inenge miniti. Chikonzero cheizvi chaive cyclical imports. Izvi pamwe hazvizoshamise chero munhu akashanda nemahombe macodebases akanyorwa muPython. Taive nemaseti emazana emamodule, imwe neimwe yaiburitsa zvisina kunanga mamwe ese. Kana chero faira mune yekupinda loop yakashandurwa, mypy yaifanira kugadzirisa mafaera ese ari muchiuno ichocho, uye kazhinji chero mamodule aiunza mamodule kubva kune icho loop. Imwe kutenderera kwakadai yaive yakashata "dependency tangle" yakakonzera dambudziko rakawanda paDropbox. Kamwe chimiro ichi chaive nemazana akati wandei mamodule, nepo chaitengeswa kunze kwenyika, zvakananga kana zvisina kunanga, bvunzo dzakawanda, chakashandiswawo mukodhi yekugadzira.

Takafunga nezve mukana we "kusunungura" kutsamira kwedenderedzwa, asi isu takanga tisina zviwanikwa zvekuzviita. Paive necode yakawandisa yataive tisina kujaira. Nekuda kweizvozvo, takauya neimwe nzira. Takasarudza kuita mypy basa nekukurumidza kunyange pamberi pe "dependency tangles". Isu takawana chinangwa ichi tichishandisa mypy daemon. Daemon inzira ye server inoshandisa maviri anonakidza maficha. Chekutanga, inochengeta ruzivo nezve iyo yese codebase mundangariro. Izvi zvinoreva kuti pese paunomhanya mypy, haufanirwe kurodha cached data ine hukama nezviuru zvezvinotemerwa kunze kwenyika. Chechipiri, iye nokungwarira, pamwero wezvidiki zvimiro zvikamu, anoongorora zvinoenderana pakati pemabasa uye mamwe masangano. Somuenzaniso, kana basa foo anodana basa bar, ipapo pane kutsamira foo ΠΎΡ‚ bar. Kana faira rachinja, daemon kutanga, iri yega, inogadzirisa chete faira rakashandurwa. Inobva yatarisa kunze kunoonekwa shanduko kune iyo faira, seyakashandurwa basa siginicha. Iyo daemon inoshandisa yakadzama ruzivo nezve kunze kwenyika chete kuti itarise kaviri-idzo mabasa anoshandisa iyo yakagadziridzwa basa. Kazhinji, neiyi nzira, iwe unofanirwa kutarisa mashoma mashoma mabasa.

Kuita zvese izvi kwanga kusiri nyore, sezvo yekutanga mypy kuita yaive yakatarisana nekugadzirisa faira rimwe panguva. Taifanira kutarisana nemamiriro ezvinhu akawanda emuganhu, kuitika kwaida kuongororwa kwakadzokororwa mumamiriro ezvinhu apo chimwe chinhu chakachinja mukodhi. Semuenzaniso, izvi zvinoitika kana kirasi inopihwa kirasi nyowani. Patakangoita zvataida, takakwanisa kuderedza nguva yekuuraya yakawanda yekuwedzera cheki kusvika kumasekonzi mashoma. Ikoku kwakaratidzika sorukundo rukuru kwatiri.

Kuwedzera kubereka!

Pamwe chete nechekure caching yandakakurukura pamusoro, iyo mypy daemon yakapotsa yagadzirisa zvachose matambudziko anomuka apo mugadziri wepurogiramu anowanzo mhanyisa mhando yekutarisa, achiita shanduko kune diki nhamba yemafaira. Nekudaro, kuita kwesystem mune isinganakire kushandisa kesi kwanga kuchiri kure nekwakanaka. Kutanga kwakachena kwemypy kunogona kutora maminitsi gumi nemashanu. Uye izvi zvakanga zvakawanda kupfuura zvatingadai takafara nazvo. Vhiki yega yega mamiriro ezvinhu akawedzera kuipa sezvo vagadziri vepurogiramu vakaramba vachinyora kodhi nyowani uye kuwedzera zvirevo kukodhi yaivepo. Vashandisi vedu vanga vachiri nenzara yekuwedzera kuita, asi isu takafara kusangana navo pakati.

Takafunga kudzokera kune imwe yemazano ekutanga nezve mypy. Sezvineiwo, kushandura Python kodhi kuita C kodhi. Kuedza neCython (sitimu inokutendera kuti ushandure kodhi yakanyorwa muPython kuita C kodhi) hakuna kutipa kukurumidza kunooneka, saka takasarudza kumutsiridza pfungwa yekunyora yedu muunganidzi. Sezvo iyo mypy codebase (yakanyorwa muPython) yatova nemhando dzese dzinodiwa zvirevo, takafunga kuti zvingave zvakakosha kuedza kushandisa zvirevo izvi kukurumidzira sisitimu. Ndakakurumidza kugadzira prototype kuti ndiedze iyi pfungwa. Yakaratidza kuwedzera kwekuwedzera kwegumi mukuita pane akasiyana madiki-mabhenji. Pfungwa yedu yaive yekuunganidza maPython modules kuC modules uchishandisa Cython, uye kushandura rondedzero yemhando yekumhanya-nguva cheki cheki (kazhinji manyorerwo emhando anofuratirwa panguva yekumhanya uye anoshandiswa chete nemhando yekutarisa masisitimu). Isu takaronga kushandura iyo mypy kuitiswa kubva kuPython kuenda mumutauro wakagadzirwa kuti unyorwe, waizotaridzika (uye, kazhinji, kushanda) chaizvo sePython. (Urwu rudzi rwekutama-mutauro rwakava chimwe chinhu chetsika yepurojekiti yemypy. Yekutanga mypy kuita yakanyorwa muAlore, ipapo pakanga paine syntactic hybrid yeJava nePython).

Kutarisa pane CPython yekuwedzera API yaive kiyi yekusarasikirwa neprojekiti manejimendi kugona. Isu taisada kuita muchina chaiwo kana chero maraibhurari aidiwa nemypy. Pamusoro pezvo, tinenge tichiri kuwana iyo yese Python ecosystem uye ese maturusi (senge pytest). Izvi zvaireva kuti taigona kuenderera mberi nekushandisa yakadudzirwa Python kodhi panguva yekusimudzira, zvichitibvumira kuti tirambe tichishanda nemaitiro anokurumidza kuita shanduko yekodhi nekuiedza, pane kumirira kuti kodhi iunganidzwe. Zvaiita sokuti takanga tichiita basa guru rekugara pazvigaro zviviri, sekutaura, uye taida.

Iyo compiler, iyo yatakadaidza kuti mypyc (sezvo inoshandisa mypy senge yekumberi-yekupedzisira yekuongorora mhando), yakave chirongwa chakabudirira kwazvo. Pakazere, isu takawana ingangoita 4x yekumhanyisa yenguva dzose mypy inomhanya pasina caching. Kugadzira musimboti weiyo mypyc purojekiti kwakatora timu diki yaMichael Sullivan, Ivan Levkivsky, Hugh Hahn, uye ini pachangu mwedzi mina yekarenda. Uhu huwandu hwebasa hwaive hudiki pane izvo zvingave zvichidikanwa kunyorazve mypy, semuenzaniso, muC ++ kana Go. Uye taifanira kuchinja zvinhu zvishomanana pane zvataizofanira kuita pakuchinyorazve mune mumwe mutauro. Isu takatarisirawo kuti tinogona kuunza mypyc kusvika pamwero wekuti vamwe Dropbox programmers vaigona kuishandisa kuunganidza nekumhanyisa kodhi yavo.

Kuti tiwane iyi nhanho yekuita, taifanira kushandisa mamwe anonakidza mainjiniya mhinduro. Nokudaro, mugadziri anogona kukurumidza kuita mabasa akawanda nekushandisa nokukurumidza, pasi-level C constructs. Uye kudanwa kwakadaro kunokurumidza kupfuura kudana basa rakadudzirwa. Mamwe mashandiro, akadai semaduramazwi ekutsvaga, achiri kusanganisa kushandisa nguva dzose C-API mafoni kubva kuCPython, ayo aingokurumidza kukurumidza kana akaunganidzwa. Isu takakwanisa kubvisa mutoro wekuwedzera pane sisitimu yakagadzirwa nekududzira, asi izvi mune iyi kesi zvakapa diki purofiti maererano nekuita.

Kuti tizive maitiro akajairika "anononoka", takaita kodhi profiling. Takashongedzerwa neiyi data, takaedza kana tweak mypyc kuitira kuti igadzire nekukurumidza C kodhi yemashandisirwo akadai, kana kunyorazve inoenderana Python kodhi tichishandisa nekukurumidza mashandiro (uye dzimwe nguva takanga tisina mhinduro yakapusa yeizvozvo kana rimwe dambudziko) . Kunyorazve kodhi yePython yaiwanzova mhinduro iri nyore kudambudziko pane kuita kuti muunganidzi aite shanduko imwechete. Nekufamba kwenguva, taida kugadziridza akawanda eshanduko idzi, asi panguva iyoyo takanga takatarisa nekumhanyisa mypy nekuedza kushoma. Uye mukuenda kune chinangwa ichi, tinocheka makona akawanda.

Zvichaenderera mberi…

Vanodiwa vaverengi! Ndeapi maonerwo ako nezvechirongwa chemypy pawakadzidza nezvekuvapo kwayo?

Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 2
Iyo nzira yekutarisa 4 miriyoni mitsetse yePython kodhi. Chikamu 2

Source: www.habr.com

Voeg