Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 2

Kajeno re phatlalatsa karolo ea bobeli ea phetolelo ea lisebelisoa tse mabapi le kamoo Dropbox e hlophisitseng taolo ea mefuta bakeng sa mela e limilione tse 'maloa ea khoutu ea Python.

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 2

Bala karolo ea pele

Tšehetso ea mofuta oa semmuso (PEP 484)

Re entse liteko tsa rona tsa pele tse tebileng ka mypy at Dropbox during Hack Week 2014. Hack Week ke ketsahalo ea beke e le 'ngoe e tsamaisoang ke Dropbox. Nakong ena, basebetsi ba ka sebetsa ho eng kapa eng eo ba e batlang! Tse ling tsa merero e tsebahalang haholo ea theknoloji ea Dropbox e qalile liketsahalong tse kang tsena. Ka lebaka la teko ena, re fihletse qeto ea hore mypy e shebahala e tšepisa, le hoja morero ona o e-s'o lokele ho sebelisoa hohle.

Ka nako eo, mohopolo oa ho beha mekhoa e metle ea mofuta oa Python o ne o le moeeng. Joalokaha ke boletse, kaha Python 3.0 ho ne ho khoneha ho sebelisa litlhaloso tsa mofuta bakeng sa mesebetsi, empa tsena e ne e le lipolelo tse sa lumellaneng, ntle le syntax e hlalositsoeng le semantics. Nakong ea ts'ebetso ea lenaneo, litlhaloso tsena, boholo ba tsona, li ne li hlokomolohuoa feela. Ka mor'a Beke ea Hack, re ile ra qala ho sebetsa ka ho tiisa semantics. Mosebetsi ona o ile oa etsa hore ho hlahe PEP 484 ('Na le Guido van Rossum, Łukasz Langa re ile ra sebelisana le tokomane ena).

Maikemišetšo a rena a ka lebelelwa ka mahlakoreng a mabedi. Taba ea pele, re ne re tšepile hore tikoloho eohle ea Python e ka sebelisa mokhoa o tloaelehileng oa ho sebelisa litlhahiso tsa mofuta (lentsoe le sebelisitsoeng ho Python joalo ka "litlhaloso tsa mofuta"). Sena, ho latela likotsi tse ka bang teng, se ka ba molemo ho feta ho sebelisa mekhoa e mengata e sa lumellaneng. Ea bobeli, re ne re batla ho buisana ka bolokolohi ka mekhoa ea litlhaloso tsa mofuta le litho tse ngata tsa sechaba sa Python. Takatso ena e ne e laoloa ka mokhoa o itseng ke taba ea hore re ke ke ra batla ho shebahala joaloka "bakoenehi" ho tloha likhopolong tsa motheo tsa puo mahlong a matšoele a pharaletseng a baetsi ba mananeo a Python. Ke puo e thaepang ka matla, e tsejwang e le "duck typing". Sechabeng, qalong, maikutlo a batlang a belaella mohopolo oa ho thaepa ka mokhoa o tsitsitseng o ne a ke ke a thusa empa a hlaha. Empa maikutlo ao a ile a qetella a fokotsehile ka mor'a hore ho hlake hore ho thaepa ka mokhoa o tsitsitseng e ne e ke ke ea e-ba tlamo (le ka mor'a hore batho ba hlokomele hore e hlile e na le thuso).

Syntax ea mofuta oa maikutlo e ileng ea qetella e amohetsoe e ne e tšoana haholo le eo mypy e neng e tšehetsa ka nako eo. PEP 484 e ile ea lokolloa ka Python 3.5 ka 2015. Python e ne e se e se puo e thaepang ka matla. Ke rata ho nahana ka ketsahalo ena e le ketsahalo ea bohlokoa historing ea Python.

Qaleho ea ho falla

Qetellong ea 2015, Dropbox e thehile sehlopha sa batho ba bararo ho sebetsa ho mypy. Ba ne ba kenyelletsa Guido van Rossum, Greg Price le David Fisher. Ho tloha ka nako eo ho ea pele, boemo bo ile ba qala ho ntlafala ka potlako haholo. Tšitiso ea pele ea kholo ea mypy e ne e le ts'ebetso. Joalo ka ha ke boletse kaholimo, matsatsing a pele a projeke ke ile ka nahana ka ho fetolela ts'ebetsong ea mypy ho C, empa mohopolo ona o ne o tlositsoe lethathamong hajoale. Re ne re ts'oarehile ho tsamaisa sistimi re sebelisa mofetoleli oa CPython, e seng lebelo le lekaneng bakeng sa lisebelisoa tse kang mypy. (Morero oa PyPy, ts'ebetsong e 'ngoe ea Python e nang le moqapi oa JIT, le rona ha oa ka oa re thusa.)

Ka lehlohonolo, lintlafatso tse ling tsa algorithm li re thusitse mona. "Accelerator" ea pele e matla e bile ts'ebetsong ea tlhahlobo e ntseng e eketseha. Mohopolo oa ntlafatso ena o ne o le bonolo: haeba litšepiso tsohle tsa mojule ha lia fetoha ho tloha nakong e fetileng ea mypy, joale re ka sebelisa data e bolokiloeng nakong ea ts'ebetso e fetileng ha re ntse re sebetsa le batho ba itšetlehileng ka bona. Re ne re hloka feela ho hlahloba mofuta oa lifaele tse fetotsoeng le lifaeleng tse itšetlehileng ka tsona. Mypy e bile ea fetela pele hanyane: haeba sebopeho sa kantle sa mojule se sa fetohe, mypy e ne e nka hore li-module tse ling tse kentseng mojule ona ha li hloke ho hlahlojoa hape.

Ho hlahloba ka ho eketsehileng ho re thusitse haholo ha re hlakisa palo e kholo ea khoutu e teng. Taba ke hore ts'ebetso ena hangata e kenyelletsa lits'oants'o tse ngata tse pheta-phetoang tsa mypy ha litlhaloso li ntse li eketsoa khoutu ebe butle-butle li ntlafatsoa. Mokhoa oa pele oa mypy o ne o ntse o lieha haholo hobane o ne o e-na le lintho tse ngata tse itšetlehileng ka tsona. Joale, ho ntlafatsa boemo, re ile ra kenya ts'ebetsong mochine o ka thōko oa caching. Haeba mypy e lemoha hore cache ea lehae e kanna ea felloa ke nako, e khoasolla senepe sa cache sa hajoale bakeng sa codebase eohle ho tsoa sebakeng se bohareng. E ntan'o etsa tlhahlobo e eketsehileng e sebelisa snapshot ena. Sena se re nkile mohato o mong hape o moholo oa ho eketsa ts'ebetso ea mypy.

Ena e ne e le nako ea ho amoheloa ka potlako le ka tlhaho ho hlahloba mofuta ho Dropbox. Qetellong ea 2016, re ne re se re e-na le mela e ka bang 420000 ea khoutu ea Python e nang le litlhaloso tsa mofuta. Basebelisi ba bangata ba ne ba chesehela ho hlahloba mofuta. Lihlopha tse ntseng li eketseha tsa nts'etsopele li ne li sebelisa Dropbox mypy.

Ntho e ’ngoe le e ’ngoe e ne e shebahala hantle ka nako eo, empa re ne re ntse re e-na le ho hongata hoo re lokelang ho ho etsa. Re ile ra qala ho etsa liphuputso tsa nako le nako ka har'a basebelisi e le ho tseba libaka tsa mathata a morero le ho utloisisa hore na ke litaba life tse lokelang ho rarolloa pele (mokhoa ona o ntse o sebelisoa k'hamphaning kajeno). Ea bohlokoa ka ho fetisisa, joalokaha e ile ea hlaka, e ne e le mesebetsi e 'meli. Taba ea pele, re ne re hloka tšireletso ea mofuta o mong oa khoutu, ea bobeli, re ne re hloka mypy ho sebetsa kapele. Ho ne ho hlakile hore mosebetsi oa rona oa ho potlakisa mypy le ho e kenya tšebetsong mererong ea k'hamphani o ne o ntse o le hole le ho phetheha. Re tseba ka botlalo bohlokoa ba mesebetsi ena e 'meli, re ile ra qala ho e rarolla.

Tlhahiso e eketsehileng!

Licheke tse ntseng li eketseha li ile tsa etsa hore mypy e potlake, empa sesebelisoa se ne se ntse se sa potlaka ka ho lekaneng. Licheke tse ngata li ile tsa nka nako e ka etsang motsotso. Lebaka la sena e ne e le cyclical imports. Mohlomong sena se ke ke sa makatsa mang kapa mang ea sebelitseng ka li-codebases tse kholo tse ngotsoeng ka Python. Re ne re e-na le lihlopha tsa li-module tse makholo, tseo e 'ngoe le e 'ngoe ea tsona e neng e kenya tse ling kaofela ka tsela e sa tobang. Haeba faele leha e le efe ho loop ea ho kenya e fetotsoe, mypy e ne e tlameha ho sebetsana le lifaele tsohle tse ka har'a loop eo, 'me hangata li-module tse neng li kenya li-module ho tloha loop eo. E 'ngoe ea potoloho e joalo e ne e le "tangle ea ho itšetleha" e tummeng hampe e bakileng mathata a mangata Dropbox. Hang ha mohaho ona o e-na le li-module tse makholo a 'maloa, ha o ntse o kenngoa ka ntle, ka ho toba kapa ka tsela e sa tobang, liteko tse ngata, o ne o boetse o sebelisoa ka khoutu ea tlhahiso.

Re ile ra nahana ka monyetla oa ho "roala" litšepe tse chitja, empa re ne re se na lisebelisoa tsa ho e etsa. Ho ne ho e-na le khoutu e ngata haholo eo re neng re sa e tloaela. Ka lebaka leo, re ile ra tla le mokhoa o mong. Re ile ra etsa qeto ea ho etsa mosebetsi oa mypy ka potlako esita le ka pel'a "li-tangles tsa ho itšetleha". Re fihletse sepheo sena ka ho sebelisa daemon ea mypy. Daemon ke ts'ebetso ea seva e sebelisang likarolo tse peli tse khahlisang. Taba ea pele, e boloka tlhahisoleseling mabapi le motheo oa khoutu eohle mohopolong. Sena se bolela hore nako le nako ha u tsamaisa mypy, ha ua tlameha ho kenya data e bolokiloeng e amanang le litšepiso tse likete tse tsoang kantle ho naha. Taba ea bobeli, ka hloko, maemong a likarolo tse nyane tsa meralo, o sekaseka ho its'etleha lipakeng tsa mesebetsi le likarolo tse ling. Ka mohlala, haeba tshebetso foo letsa tshebetso bar, joale ho na le ho itšetleha foo от bar. Ha faele e fetoha, daemon pele, e itšehla thajana, e sebetsa feela faele e fetotsoeng. E ntan'o sheba liphetoho tse bonahalang ka ntle faeleng eo, joalo ka li-signature tse fetotsoeng tsa ts'ebetso. Daemon e sebelisa lintlha tse qaqileng mabapi le thepa e tsoang kantle ho naha ho hlahloba habeli feela mesebetsi e hlileng e sebelisang tšebetso e fetotsoeng. Ka tloaelo, ka mokhoa ona, o tlameha ho hlahloba mesebetsi e fokolang haholo.

Ho phethahatsa tsena tsohle ho ne ho se bonolo, kaha ts'ebetsong ea pele ea mypy e ne e tsepamisitse maikutlo haholo ho sebetsa faele e le 'ngoe ka nako. Re ile ra tlameha ho sebetsana le maemo a mangata a moeli, ketsahalo eo e neng e hloka ho hlahlojoa khafetsa maemong ao ho 'ona ho ileng ha fetoha ntho e itseng khoutu. Ka mohlala, sena se etsahala ha sehlopha se abeloa sehlopha se secha sa motheo. Hang ha re entse seo re neng re se batla, re ile ra khona ho fokotsa nako ea ts'ebetso ea licheke tse ngata ho fihlela metsotsoana e seng mekae feela. Sena se ne se bonahala e le tlhōlo e khōlō ho rōna.

Tlhahiso le ho feta!

Hammoho le "caching" e hole eo ke buileng ka eona ka holimo, mypy daemon e batla e rarolle ka botlalo mathata a hlahang ha moetsi oa lenaneo a atisa ho hlahloba mofuta, a etsa liphetoho ho palo e nyane ea lifaele. Leha ho le joalo, ts'ebetso ea sistimi maemong a ts'ebeliso e ntle haholo e ne e ntse e le hole le ho feta. Ho qala ka mokhoa o hloekileng oa mypy ho ka nka metsotso e fetang 15. Mme sena se ne se feta kamoo re ka beng re thabile ka teng. Beke e 'ngoe le e 'ngoe boemo bo ile ba mpefala ha baetsi ba mananeo ba ntse ba tsoela pele ho ngola khoutu e ncha le ho eketsa litlhaloso ho khoutu e teng. Basebelisi ba rona ba ne ba ntse ba lapetse ts'ebetso e eketsehileng, empa re ne re thabetse ho kopana le bona halofo.

Re ile ra etsa qeto ea ho khutlela ho e 'ngoe ea mehopolo ea pejana mabapi le mypy. E leng, ho fetolela khoutu ea Python hore e be khoutu ea C. Ho etsa liteko ka Cython (sistimi e u lumellang hore u fetolele khoutu e ngotsoeng ka Python ho C khoutu) ha ea ka ea re fa lebelo le bonahalang, kahoo re ile ra etsa qeto ea ho tsosolosa mohopolo oa ho ngola moqapi oa rona. Kaha mypy codebase (e ngotsoeng ka Python) e se e ntse e e-na le litlhaloso tsa mofuta o hlokahalang, re ne re nahana hore ho tla ba molemo ho leka ho sebelisa litlhaloso tsena ho potlakisa tsamaiso. Ka potlako ke entse prototype ho leka mohopolo ona. E bontšitse keketseho e fetang 10 ea ts'ebetso ho li-micro-benchmark tse fapaneng. Maikutlo a rona e ne e le ho bokella li-module tsa Python ho li-module tsa C ho sebelisa Cython, le ho fetola litlhaloso tsa mofuta hore e be licheke tsa mofuta oa nako (hangata litlhaloso tsa mofuta ha li hlokomolohuoe ka nako ea nako 'me li sebelisoa feela ke mekhoa ea ho hlahloba mofuta). Ha e le hantle re ne re rerile ho fetolela ts'ebetsong ea mypy ho tloha Python ho ea puong e neng e etselitsoe ho ngoloa ka mokhoa o tsitsitseng, e neng e tla shebahala ('me, boholo ba eona, e sebetsa) hantle joaloka Python. (Mofuta ona oa ho falla ha lipuo tse fapaneng o fetohile ntho ea moetlo oa morero oa mypy. Ts'ebetsong ea pele ea mypy e ngotsoe ka Alore, joale ho ne ho e-na le lebasetere la syntactic la Java le Python).

Ho tsepamisa maikutlo ho API ea katoloso ea CPython e ne e le senotlolo sa ho se lahleheloe ke bokhoni ba taolo ea projeke. Re ne re sa hloke ho kenya mochini o sebetsang kapa lilaebrari life kapa life tseo mypy e li hlokang. Ntle le moo, re ntse re tla khona ho fihlella tikoloho eohle ea Python le lisebelisoa tsohle (tse kang pytest). Sena se ne se bolela hore re ka tsoela pele ho sebelisa khoutu ea Python e hlalosoang nakong ea tsoelo-pele, ho re lumella hore re tsoele pele ho sebetsa ka mokhoa o potlakileng haholo oa ho etsa liphetoho tsa khoutu le ho e hlahloba, ho e-na le ho emela hore khoutu e bokelle. Ho ne ho bonahala eka re ne re etsa mosebetsi o motle oa ho lula litulong tse peli, ka mantsoe a mang, 'me re ne re e rata.

Moqapi, eo re e bitsitseng mypyc (kaha e sebelisa mypy e le qetello ea ho hlahloba mefuta), e bile morero o atlehileng haholo. Ka kakaretso, re fihletse lebelo la 4x bakeng sa ho matha khafetsa ha mypy ntle le caching. Ho theha motheo oa morero oa mypyc ho ile ha nka sehlopha se senyenyane sa Michael Sullivan, Ivan Levkivsky, Hugh Hahn, le 'na ka likhoeli tse 4 tsa khalendara. Palo ena ea mosebetsi e ne e le nyane haholo ho feta se neng se tla hlokahala ho ngola mypy bocha, mohlala, ho C ++ kapa Go. Hape re ile ra tlameha ho etsa liphetoho tse fokolang haholo mosebetsing oo re neng re tla tlameha ho li etsa ha re o ngola bocha ka puo e ’ngoe. Hape re ne re tšepile hore re ka tlisa mypyc boemong boo ba bang ba li-program tsa Dropbox ba ka e sebelisang ho bokella le ho potlakisa khoutu ea bona.

Ho fihlela boemo bona ba ts'ebetso, re ile ra tlameha ho sebelisa litharollo tse ling tse khahlisang tsa boenjiniere. Ka hona, moqapi a ka potlakisa ts'ebetso e mengata ka ho sebelisa lihahi tse potlakileng, tse tlaase tsa C. Ka mohlala, pitso ea mosebetsi e hlophisitsoeng e fetoleloa ka mohala oa mosebetsi oa C. 'Me pitso e joalo e potlakile ho feta ho bitsa mosebetsi o tolokiloeng. Lits'ebetso tse ling, joalo ka ho sheba dikishinari, li ntse li ameha ho sebelisa mehala e tloaelehileng ea C-API e tsoang ho CPython, e neng e potlakile hanyane ha e bokelloa. Re khonne ho felisa mojaro o eketsehileng tsamaisong e entsoeng ka tlhaloso, empa tabeng ena e fane ka phaello e nyenyane feela mabapi le ts'ebetso.

Ho tseba lits'ebetso tse "butle-butle", re entse profiling ea khoutu. Re hlometse ka data ena, re lekile ho tweak mypyc e le hore e ka hlahisa khoutu ea C e potlakileng bakeng sa ts'ebetso e joalo, kapa re ngole khoutu e ts'oanang ea Python re sebelisa ts'ebetso e potlakileng ('me ka linako tse ling re ne re sena tharollo e lekaneng bakeng sa seo kapa bothata bo bong) . Ho ngola khoutu ea Python hangata e ne e le tharollo e bonolo bothateng ho feta ho etsa hore moqapi a iketsetse phetoho e tšoanang. Ka nako e telele, re ne re batla ho iketsetsa tse ngata tsa liphetoho tsena, empa ka nako eo re ne re tsepamisitse maikutlo ho potlakisa mypy ka boiteko bo fokolang. 'Me ha re fetela sepheo sena, re khaola likhutlo tse' maloa.

E tla ntšetsoa pele…

Babali ba ratehang! Maikutlo a hau e bile afe ka projeke ea mypy ha u ithuta ka boteng ba eona?

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 2
Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 2

Source: www.habr.com

Eketsa ka tlhaloso