Le ala ile siakiina ole 4 miliona laina ole code Python. Vaega 2

O le asō o loʻo matou lolomiina le vaega lona lua o le faaliliuga o mea e uiga i le auala na faʻatulagaina ai e Dropbox le pulea o ituaiga mo le tele o laina laina o le Python code.

Le ala ile siakiina ole 4 miliona laina ole code Python. Vaega 2

Faitau le vaega muamua

Lagolago tulaga aloaia (PEP 484)

Na matou faia a matou faʻataʻitaʻiga ogaoga muamua ma mypy i Dropbox i le vaiaso o Hack 2014. O le vaiaso o le Hack o se vaiaso e tasi le vaiaso e talimalo ai Dropbox. I lenei taimi, e mafai e tagata faigaluega ona galulue i soʻo se mea latou te manaʻo ai! O nisi o galuega fa'atekonolosi ta'uta'ua a Dropbox na amata i fa'alavelave fa'apenei. O le iʻuga o lenei faʻataʻitaʻiga, na matou faʻamaonia ai o le mypy e foliga manuia, e ui lava e leʻi sauni le poloketi mo le faʻaaogaina lautele.

I lena taimi, o le manatu o le faʻavasegaina o le Python type hinting system sa i luga o le ea. E pei ona ou fai atu, talu mai le Python 3.0 na mafai ona faʻaogaina faʻamatalaga faʻamatalaga mo galuega, ae o nei mea na o ni faʻamatalaga faʻapitoa, e aunoa ma se faʻamatalaga faʻamalamalamaga ma semantics. I le taimi o le faʻatinoina o polokalame, o nei faʻamatalaga, mo le tele o vaega, na le amanaiaina. Ina ua uma le vaiaso Hack, na amata ona matou galulue i le faʻavasegaina o semantics. O lenei galuega na mafua ai ona tulaʻi mai PEP 484 (Guido van Rossum, Łukasz Langa ma sa ma galulue faatasi i lenei pepa).

E mafai ona vaʻaia o tatou faanaunauga mai itu e lua. Muamua, matou te faʻamoemoe e mafai e le Python faʻanatura atoa ona faʻaaogaina se auala masani i le faʻaogaina o faʻailoga (o se faaupuga faʻaaogaina i le Python e tutusa ma "ituaiga faʻamatalaga"). O lenei mea, pe a fua i tulaga lamatia e mafai, e sili atu nai lo le faʻaaogaina o le tele o auala e le fetaui. Lona lua, matou te manaʻo e faʻatalanoa faʻasalalau ituaiga faʻamatalaga faʻamatalaga ma le tele o tagata o le Python community. O lenei manaʻoga na faʻatonuina i se vaega e le mea moni tatou te le mananaʻo e foliga mai o ni "tagata liliuese" mai manatu autu o le gagana i mata o le toʻatele o tagata fai polokalame Python. O se gagana e ta'i fa'amalosi, ua ta'ua o le "tipa pato". I totonu o le alalafaga, i le amataga lava, o se uiga masalosalo e uiga i le manatu o le static typing e le mafai ona fesoasoani ae tulaʻi mai. Ae o lena lagona na iu lava ina mou atu ina ua manino mai o le taina faʻamaumau e le faʻamalosia (ma ina ua uma ona iloa e tagata e aoga moni).

O le ituaiga faʻailoga syntax na mulimuli ane faʻaaogaina e tutusa lelei ma le mea na lagolagoina e mypy i lena taimi. PEP 484 na faʻasaʻolotoina ma le Python 3.5 i le 2015. Ua le toe avea le Python ma na'o le gagana fa'anatinati. Ou te fiafia e mafaufau i lenei mea na tupu o se mea taua tele i le talafaasolopito o Python.

Amataina o femalagaiga

I le faaiuga o le 2015, na faia ai e Dropbox se vaega o tagata e toatolu e galulue i luga o mypy. Na latou aofia ai Guido van Rossum, Greg Price ma David Fisher. Mai lena taimi, na amata ona tupu vave le tulaga. O le fa'alavelave muamua i le tuputupu a'e o mypy o le fa'atinoga. E pei ona ou faʻailoa i luga, i le amataga o le poloketi na ou mafaufau e uiga i le faʻaliliuina o le mypy faʻatinoga i le C, ae o lenei manatu na sopoia mai le lisi mo le taimi nei. Na matou pipii i le faʻaogaina o le faiga e faʻaaoga ai le CPython interpreter, lea e le lava le vave mo meafaigaluega e pei o mypy. (O le PyPy project, o se isi faʻatinoga o le Python ma se JIT compiler, e leʻi fesoasoani foi ia i matou.)

O le mea e lelei ai, o nisi algorithmic faʻaleleia ua oʻo mai ia matou fesoasoani iinei. O le "fa'avavevave" malosi muamua o le fa'atinoina lea o siaki fa'aopoopo. O le manatu i tua o lenei faʻaleleia e faigofie: pe afai e leʻi suia uma le faʻalagolago o le module talu mai le taʻavale muamua a mypy, ona mafai lea ona tatou faʻaogaina faʻamaumauga na teuina i le taimi muamua aʻo galulue ma faʻalagolago. Na'o matou mana'omia le fa'atinoina o su'esu'ega fa'ailoga i faila ua suia ma faila e fa'alagolago iai. Mypy na alu teisi atu: afai e le suia le atinaʻe fafo o se module, mypy manatu o isi modules na faʻaulufale mai lenei module e le manaʻomia ona toe siaki.

O siaki fa'aopoopo ua fesoasoani tele ia i matou i le fa'ailoaina o le tele o numera o lo'o iai. O le manatu o lenei faiga e masani ona aofia ai le tele o faʻasologa o le mypy aʻo faʻaopoopoina faʻamatalaga i le code ma faʻasolosolo faʻaleleia. O le taamilosaga muamua a mypy sa matua tuai lava ona e tele naua faʻalagolago e siaki. Ma, ina ia faʻaleleia le tulaga, matou faʻatinoina se masini faʻapipiʻi mamao. Afai e iloa e mypy e foliga mai ua le toe aoga le cache i le lotoifale, e sii maia le ata o le cache o loʻo i ai nei mo le codebase atoa mai le fale teu oloa. Ona faia lea o se siaki fa'aopoopo e fa'aaoga ai lenei ata. O lenei mea ua matou faia ai se isi laasaga tele i le faʻateleina o le faʻatinoga o mypy.

O se vaitau lenei o le faʻaogaina vave ma le natura o le siakiina o ituaiga ile Dropbox. E oʻo atu i le faʻaiʻuga o le 2016, ua uma ona matou maua le tusa ma le 420000 laina o le Python code faʻatasi ai ma faʻamatalaga ituaiga. O le tele o tagata fa'aoga na fiafia i le siakiina o ituaiga. Ole tele ma le tele o 'au atina'e na fa'aogaina le Dropbox mypy.

Sa foliga lelei mea uma i lena taimi, ae sa tele lava a matou mea e fai. Na amata ona matou faia suʻesuʻega faʻa-lotoifale faʻapitoa ina ia mafai ai ona iloa vaega faʻafitauli o le poloketi ma malamalama i faʻafitauli e manaʻomia muamua ona foia (o loʻo faʻaaogaina pea lenei faiga i le kamupani i aso nei). O le mea pito sili ona taua, e pei ona manino mai, e lua galuega. Muamua, matou te manaʻomia le tele o ituaiga faʻasalalauga o le code, lona lua, matou te manaʻomia mypy e galue vave. Na matua manino lava o la matou galuega e faʻavave le mypy ma faʻatinoina i galuega a kamupani e leʻi maeʻa. Matou te malamalama atoatoa i le taua o nei galuega e lua, ua faʻatulaga e foia ai.

Fa'ateleina le gaosiga!

O siaki fa'aopoopo na fa'atopetope ai mypy, ae e le'i lava vave le meafaigaluega. O le tele o siaki fa'aopoopo e tusa ma le minute. O le mafuaaga o lea tulaga ona o oloa faaulufale mai. Atonu o le a le faate'ia ai so'o se tasi na galue ma ni codebases tetele na tusia i le Python. Sa i ai a matou seti o le fiaselau o modules, o ia mea taʻitasi na aumai faʻaulufale mai uma isi. Afai na suia so'o se faila i totonu o se matasele fa'aulufale mai, e tatau i mypy ona fa'agasolo uma faila i totonu o lena matasele, ma e masani lava o so'o se modules na fa'aulufale mai modules mai lena matasele. O se tasi o ia taamilosaga o le taʻutaʻua "faʻalagolago" na mafua ai le tele o faʻafitauli i Dropbox. O le taimi lava na i ai i lenei fausaga le tele o modules, aʻo faʻaulufale mai, tuusao pe le tuusaʻo, tele suʻega, sa faʻaaogaina foi i le gaosiga code.

Sa matou mafaufau i le avanoa e "talatala" ai faʻalagolago faʻatasi, ae matou te leʻi maua ni punaoa e fai ai. Sa tele naua tulafono laiti matou te le masani ai. O le iʻuga, na matou maua ai se isi auala. Na matou filifili e faʻavave galuega mypy e tusa lava pe i ai le "faʻalagolago faʻalagolago". Na matou ausia lenei sini e faʻaaoga ai le mypy daemon. O le daemon o se faʻagaioiga o loʻo faʻatinoina ni mea manaia se lua. Muamua, e teuina faʻamatalaga e uiga i le codebase atoa i le manatua. O lona uiga o taimi uma lava e te tamo'e ai mypy, e te le tau utaina fa'amaumauga fa'apipi'i e feso'ota'i ma afe o fa'alagolago mai fafo. Lona lua, na te fa'aeteete, i le tulaga o iunite fa'avae laiti, su'esu'e le fa'alagolago i le va o galuega ma isi fa'alapotopotoga. Mo se faʻataʻitaʻiga, afai o le galuega foo ta'ua se galuega bar, ona i ai lea o le faalagolago foo от bar. A suia se faila, o le daemon muamua, i le vavae ese, naʻo le faila ua suia. Ona tilotilo lea i suiga vaaia i fafo i lena faila, e pei o saini galuega ua suia. E fa'aaoga e le daemon fa'amatalaga au'ili'ili e uiga i fa'aulufale mai na'o le fa'alua-sia'i o na galuega e fa'aoga moni ai le galuega fa'aleleia. E masani lava, i lenei faiga, e tatau ona e siaki ni nai galuega.

O le faʻatinoina o nei mea uma e leʻi faigofie, talu ai o le uluai mypy faʻatinoga na matua taulaʻi i le faʻagaioia o faila e tasi i le taimi. Sa tatau ona matou feagai ma le tele o tulaga tuaoi, o le mea na tupu e manaʻomia ai siaki faifaipea i mataupu pe a suia se mea i le code. Mo se faʻataʻitaʻiga, e tupu lenei mea pe a tofia se vasega i se vasega fou. O le taimi lava na matou faia ai le mea matou te mananaʻo ai, na mafai ona matou faʻaititia le taimi o le faʻatinoina o le tele o siaki faʻaopoopo i na o ni nai sekone. Na foliga mai o se manumalo tele lea ia i matou.

E sili atu le gaosiga!

Faʻatasi ai ma le faʻaogaina mamao na ou talanoaina i luga, o le mypy daemon e toetoe lava a uma ona foia faʻafitauli e tulaʻi mai pe a masani ona faʻataʻitaʻiina e se tagata fai polokalame le siakiina o ituaiga, faia suiga i se numera itiiti o faila. Ae ui i lea, o le faʻatinoga o le faʻaogaina o le faʻaogaina o mea e sili ona lelei sa mamao lava mai le lelei. Ole amataga mama ole mypy e mafai ona sili atu ile 15 minute. Ma sa sili atu lenei mea nai lo semanu matou te fiafia ai. O vaiaso uma na atili ai ona leaga le tulaga a o faʻaauau pea ona tusia e le au fai polokalame le tulafono fou ma faʻaopoopo faʻamatalaga i le code o loʻo iai. Sa fiaaai pea a matou tagata faaaoga mo le tele o faatinoga, ae sa matou fiafia e feiloai ia i latou i le afa.

Na matou filifili e toe foʻi i se tasi o manatu muamua e uiga i mypy. O lona uiga, ia liliu le Python code i le C code. O le faʻataʻitaʻiga ma Cython (o se faiga e mafai ai ona e faʻaliliu le code na tusia i le Python i le C code) e leʻi maua ai se saoasaoa faʻaalia, o lea na matou filifili ai e toe faʻafouina le manatu o le tusiaina o la matou lava tagata faʻapipiʻi. Talu ai o le mypy codebase (tusia i le Python) ua uma ona i ai faʻamatalaga talafeagai uma, e foliga mai e aoga le taumafai e faʻaoga nei faʻamatalaga e faʻavave ai le faiga. Na vave ona ou faia se faʻataʻitaʻiga e suʻe ai lenei manatu. Na faʻaalia ai le sili atu i le 10-faʻateleina le faʻatinoga i luga o micro-benchmarks eseese. O lo matou manatu o le tuʻufaʻatasia o le Python modules i le C modules e faʻaaoga ai le Cython, ma faʻaliliu faʻamatalaga faʻailoga i siaki ituaiga taimi (e masani lava o faʻamatalaga faʻailoga e le amanaʻia i le taimi-taimi ma faʻaaogaina naʻo faiga siaki). Na matou fuafua moni lava e fa'aliliu le mypy fa'atinoga mai le Python i se gagana na fa'atulaga e fa'apena fa'amau, e foliga (ma, mo le tele o vaega, galue) e pei lava o le Python. (O lenei ituaiga o femalagaiga i gagana eseese ua avea ma se tu masani o le mypy project. O le uluai faatinoga mypy na tusia i Alore, ona i ai lea o se syntactic hybrid o Java ma Python).

O le taula'i atu i le CPython extension API o le ki lea e aua ne'i leiloa ai le fa'atinoina o galuega. Matou te le manaʻomia le faʻatinoina o se masini komepiuta poʻo soʻo se faletusi e manaʻomia e mypy. E le gata i lea, o le a matou maua pea le avanoa i le Python atoa faʻanatura ma meafaigaluega uma (pei o le pytest). O lona uiga e mafai ona matou faʻaauau pea ona faʻaaogaina le Python code i le taimi o le atinaʻe, faʻatagaina i matou e faʻaauau pea ona galulue ma se mamanu vave o le faia o suiga o tulafono ma suʻega, nai lo le faʻatali mo le faʻapipiʻiina o le code. E foliga mai sa matou faia se galuega tele o le saofafai i ni nofoa se lua, i se tala, ma sa matou fiafia i ai.

O le tuʻufaʻatasia, lea na matou taʻua o le mypyc (talu ai e faʻaaogaina mypy o se pito i luma mo le suʻeina o ituaiga), na avea ma se galuega sili ona manuia. I le aotelega, na matou ausia pe tusa ma le 4x le saoasaoa mo tamoʻe masani mypy e aunoa ma le faʻaogaina. O le atinaʻeina o le autu o le mypyc poloketi na ave ai se 'au toʻaitiiti a Michael Sullivan, Ivan Levkivsky, Hugh Hahn, ma aʻu e tusa ma le 4 masina faʻakalena. O lenei aofaʻi o galuega na sili atu ona laʻititi nai lo le mea e manaʻomia e toe tusi ai mypy, mo se faʻataʻitaʻiga, i le C++ poʻo le Go. Ma sa tatau ona matou faia ni nai suiga laiti i le poloketi nai lo le mea e tatau ona matou faia pe a toe tusia i se isi gagana. Matou te faʻamoemoe foi e mafai ona matou aumaia le mypyc i se tulaga e mafai ai e isi tagata fai polokalame Dropbox ona faʻaogaina e faʻapipiʻi ma faʻavave a latou code.

Ina ia ausia lenei tulaga o le faʻatinoga, e tatau ona matou faʻaogaina ni fofo faʻainisinia mataʻina. O le mea lea, e mafai e le tuʻufaʻatasia ona faʻavavevaveina le tele o gaioiga e ala i le faʻaogaina vave, maualalo-tulaga fau C. Mo se faʻataʻitaʻiga, o le tuʻufaʻatasia o le telefoni e faʻaliliuina i le C function call. Ma o sea valaau e sili atu le vave nai lo le valaau o se galuega faʻamatalaina. O nisi fa'agaioiga, e pei o su'esu'ega lolomifefiloi, o lo'o a'afia pea i le fa'aogaina o telefoni C-API masani mai le CPython, lea sa na'o sina saoasaoa pe a tu'ufa'atasia. Na mafai ona matou faʻaumatia le uta faaopoopo i luga o le faiga na faia e ala i le faʻamatalaina, ae o lenei mea i lenei tulaga na maua ai na o sina tupe maua i tulaga o le faʻatinoga.

Ina ia iloa le masani masani "telegese" faagaioiga, matou faia code profiling. Faʻaauupegaina i nei faʻamaumauga, matou te taumafai e faʻaogaina le mypyc ina ia mafai ai ona faʻateleina le C code mo ia gaioiga, pe toe tusi le code Python fetaui e faʻaaoga ai gaioiga vave (ma o nisi taimi matou te leʻi maua se tali faigofie mo lena poʻo isi faʻafitauli) . O le toe tusia o le Python code e masani lava o se fofo faigofie i le faʻafitauli nai lo le faʻaogaina otometi e le tagata faʻapipiʻi le suiga tutusa. I se taimi umi, matou te mananaʻo e faʻaogaina le tele o nei suiga, ae i le taimi na matou taulaʻi atu ai i le faʻavaveina o le mypy ma sina taumafaiga itiiti. Ma i le agai atu i lenei sini, sa matou tipiina ni nai tulimanu.

Ia toe faauau…

Lau faitau le au faitau! O a ni ou lagona i le mypy project ina ua e iloa lona i ai?

Le ala ile siakiina ole 4 miliona laina ole code Python. Vaega 2
Le ala ile siakiina ole 4 miliona laina ole code Python. Vaega 2

puna: www.habr.com

Faaopoopo i ai se faamatalaga