Ko te ara ki te tirotiro i te 4 miriona rarangi o te waehere Python. Wāhanga 2

I tenei ra kei te whakaputahia e matou te waahanga tuarua o te whakamaoritanga o nga rauemi e pa ana ki te whakahaerenga a Dropbox mo te whakahaere momo mo etahi miriona raina o te waehere Python.

Ko te ara ki te tirotiro i te 4 miriona rarangi o te waehere Python. Wāhanga 2

Panuitia te wahanga tuatahi

Tautoko momo mana (PEP 484)

I whakahaerehia e matou a maatau whakamatautau nui tuatahi me mypy i Dropbox i te wiki Hack 2014. Ko te Wiki Hack he huihuinga kotahi wiki e whakahaerehia ana e Dropbox. I tenei wa, ka taea e nga kaimahi te mahi i nga mea katoa e hiahia ana ratou! I timata etahi o nga kaupapa hangarau rongonui a Dropbox i nga huihuinga penei. Ko te hua o tenei whakamatautau, i kii matou he pai te ahua o te mypy, ahakoa kaore ano kia rite te kaupapa mo te whakamahi whanui.

I tera wa, ko te whakaaro ki te whakatau i nga punaha tohu tohu Python kei te rangi. Ka rite ki taku korero, mai i te Python 3.0 ka taea te whakamahi i nga momo tuhipoka mo nga mahi, engari he korero noa enei, me te kore he wetereo me nga tohu. I te wa o te whakatinanatanga o te hotaka, ko te nuinga o enei korero i warewarehia. I muri mai i te Wiki Hack, i timata matou ki te mahi ki te whakarite i nga tohu tohu. Na tenei mahi i puta mai PEP 484 (Guido van Rossum, Łukasz Langa me maua i mahi tahi mo tenei tuhinga).

E rua nga taha ka tirohia o maatau kaupapa. Tuatahi, i tumanako matou ka taea e te katoa o te rauwiringa kaiao Python te whakamahi i tetahi huarahi noa ki te whakamahi tohu momo (he kupu i whakamahia ki te Python hei rite ki te "momo tuhipoka"). Ko tenei, i runga i nga tupono ka taea, he pai ake i te whakamahi i nga huarahi maha kore hototahi. Tuarua, i hiahia matou ki te matapaki i nga momo tikanga tuhi korero me nga mema maha o te hapori Python. Ko tenei hiahia i kii i tetahi waahanga na te mea kaore matou e pai kia rite ki te "tahuri" mai i nga whakaaro taketake o te reo i te tirohanga a te tini o nga kaiwhakatakoto kaupapa Python. He reo patopato hihiri, e kiia ana ko "te patopato parera". I roto i te hapori, i te timatanga, ko te ahua ohorere ki te whakaaro o te patopato pateko kaore i taea te awhina engari ka ara ake. Engari i te mutunga ka memeha atu taua karekau i muri i te maaramatanga karekau e herea te tuhi pateko (a i muri i te mohiotanga o te tangata he tino whai hua).

Ko te momo wetereo tohu i tangohia i te mutunga he rite tonu ki ta mypy i tautoko i tera wa. I tukuna a PEP 484 me te Python 3.5 i te tau 2015. Kua kore te Python i te reo patopato hihiri. He pai ki ahau te whakaaro mo tenei huihuinga he tohu nui i roto i te hitori o Python.

Te timatanga o te heke

I te mutunga o te tau 2015, i hanga e Dropbox he roopu e toru nga tangata hei mahi i runga i te mypy. Ko Guido van Rossum ratou ko Greg Price me David Fisher. Mai i tera wa, ka timata te ahuatanga ki te tino tere. Ko te arai tuatahi ki te tipu o mypy ko te mahi. I taku korero i runga ake nei, i nga ra o mua o te kaupapa i whakaaro ahau ki te whakamaori i te whakatinanatanga mypy ki te C, engari i whiti tenei whakaaro i te rarangi mo naianei. I mau matou ki te whakahaere i te punaha ma te whakamahi i te kaiwhakamaori CPython, kaore i te tere mo nga taputapu penei i te mypy. (Ko te kaupapa PyPy, he whakatinanatanga Python rereke me te kaitoi JIT, kaore i awhina i a maatau.)

Waimarie, kua tae mai etahi whakapainga algorithmic ki a matou i konei. Ko te "whakatere" kaha tuatahi ko te whakatinanatanga o te arowhai taapiri. He maamaa noa te whakaaro i muri i tenei whakapainga: mena kaore ano kia rereke nga whakawhirinakitanga katoa o te waahanga mai i te waa o mua o mypy, katahi ka taea te whakamahi i nga raraunga i keteroki i te waa o mua i te wa e mahi ana me nga whakawhirinakitanga. Me mahi noa matou ki te tirotiro momo ki nga konae kua whakarereketia me nga konae e whakawhirinaki ana ki a raatau. He iti ake te haere a Mypy: ki te kore e rereke te atanga o waho o tetahi kōwae, ka whakaaro a mypy kaore e tika kia tirohia ano etahi atu waahanga i kawemai i tenei waahanga.

He nui te awhina o te arowhai i a matou i te wa e tuhi ana i te maha o nga waehere o naianei. Ko te tikanga he maha nga mahinga o te mypy i roto i tenei tukanga na te mea ka taapirihia nga korero ki te waehere me te whakapai haere. Ko te oma tuatahi o mypy he puhoi tonu na te mea he maha nga whakawhirinakitanga hei tirotiro. Na, ki te whakapai ake i te ahuatanga, i whakatinanahia e matou he tikanga keteroki mamao. Mena ka kitea e mypy kua tawhito te keteroki o te rohe, ka tangohia e ia te whakaahua keteroki o naianei mo te turanga waehere katoa mai i te putunga putunga. Ka mahia e ia he arowhai taapiri ma te whakamahi i tenei whakaahua. Na tenei i kaha ake taatau ki te whakanui ake i te mahi a mypy.

He waahi tenei mo te tango tere me te tikanga o te tirotiro momo i Dropbox. I te mutunga o te tau 2016, tata ki te 420000 nga rarangi o te waehere Python me nga momo tuhipoka. He maha nga kaiwhakamahi i hikaka ki te tirotiro momo. He maha ake nga roopu whanaketanga e whakamahi ana i te Dropbox mypy.

He pai te ahua o nga mea katoa i tera wa, engari he maha tonu nga mahi. I timata matou ki te whakahaere i nga rangahau a-roto o nga kaiwhakamahi kia mohio ai matou ki nga waahanga raru o te kaupapa me te maarama he aha nga take hei whakatau tuatahi (kei te whakamahia tonu tenei mahi i roto i te kamupene i enei ra). Ko te mea nui, i te mea kua marama, e rua nga mahi. Tuatahi, me nui ake te momo kapinga o te waehere, tuarua, me tere ake te mahi mypy. I tino marama ko ta maatau mahi ki te tere ake i te mypy me te whakauru ki roto i nga kaupapa kamupene kaore ano kia oti. Ko matou, e tino mohio ana ki te hiranga o enei mahi e rua, ka anga matou ki te whakaoti.

He hua ake!

Ko nga arowhai taapiri i tere ake ai te mypy, engari kaore ano kia tere te taputapu. He maha nga arowhai taapiri i roa mo te meneti. Ko te take o tenei ko te kawemai huritao. Kaore pea tenei e miharo ki nga tangata kua mahi me nga turanga waehere nui kua tuhia ki te Python. He maha nga rau o a maatau huinga, ko ia o enei i kawe mai i nga mea katoa. Mena i hurihia tetahi konae kei roto i te kopae kawemai, me mahi e mypy nga konae katoa kei roto i taua kopae, me te maha o nga waahanga i kawemai i nga waahanga mai i taua kopae. Ko tetahi o nga huringa ko te "tiparapara ti'aturi" i tino raruraru i Dropbox. I te wa i roto i tenei hanganga he maha nga rau o nga waahanga, i te wa i kawemai mai, tika, kore ranei, he maha nga whakamatautau, i whakamahia ano i roto i te waehere whakaputa.

I whakaarohia e matou te ahua o te "tango" i nga herenga porohita, engari karekau he rauemi hei mahi. He nui rawa te waehere kaore matou i te mohio. Ko te mutunga mai, i puta mai he huarahi rereke. I whakatau matou kia tere te mahi a mypy ahakoa i te aroaro o nga "tangles whakawhirinaki". I tutuki tenei whainga ma te whakamahi i te mypy daemon. Ko te daemon he tukanga tūmau e whakatinana ana i ngā āhuatanga whakamere e rua. Tuatahi, ka penapena nga korero mo te turanga waehere katoa i roto i te mahara. Ko te tikanga ko nga wa katoa e whakahaere ana koe i te mypy, kaore koe e utaina nga raraunga keteroki e pa ana ki nga mano tini o nga whakawhirinakitanga kawemai. Tuarua, ka ata tirotirohia e ia, i te taumata o nga waahanga hanga iti, nga whakawhirinakitanga i waenga i nga mahi me etahi atu hinonga. Hei tauira, mena ko te mahi foo ka karanga he mahi bar, katahi ka whakawhirinaki foo i bar. Ina huri te konae, ko te daemon i te tuatahi, ka wehe noa, ka tukatuka i te konae kua whakarerekehia. Ka titiro ki nga huringa ka kitea o waho ki taua konae, penei i nga waitohu mahi kua whakarereketia. Ka whakamahia e te daemon nga korero taipitopito mo nga kawemai anake hei tirotiro-rua i aua mahi e tino whakamahi ana i te mahi whakarereke. Ko te tikanga, me tenei huarahi, me tirohia e koe he iti rawa nga mahi.

Ko te whakatinana i enei mea katoa ehara i te mea ngawari, i te mea ko te whakatinanatanga mypy taketake i tino aro ki te tukatuka i tetahi konae i te wa kotahi. He maha nga ahuatanga o te rohe, he maha nga ahuatanga e tika ana kia tirotirohia i roto i nga keehi ka huri tetahi mea i roto i te waehere. Hei tauira, ka puta tenei ina hoatu he karaehe turanga hou. Ina mahia e matou ta matou i hiahia ai, ka taea e matou te whakaiti i te wa mahi o te nuinga o nga arowhai taapiri ki etahi hēkona noa iho. He wikitoria nui tenei ki a matou.

He nui ake te hua!

I te taha o te keteroki mamao i korerohia e au i runga ake nei, tata tonu te whakaoti rapanga e te mypy daemon nga raru ka puta i te wa e whakahaerehia ana e te kaihātaka te tirotiro momo, me te whakarereke i te iti o nga konae. Heoi, ko te mahinga o te punaha i roto i te keehi whakamahi iti rawa atu i te tino pai. Neke atu i te 15 meneti te tiimata o te mypy. A he nui ake tenei i ta matou i pai ai. Ia wiki ka kino haere te ahuatanga i te mea ka tuhi haere tonu nga kaihōtaka i te waehere hou me te taapiri i nga korero ki te waehere o naianei. I hiakai tonu a matou kaiwhakamahi mo etahi atu mahi, engari i harikoa matou ki te tutaki ki a ratou i te haurua.

I whakatau matou ki te hoki ki tetahi o nga whakaaro o mua mo mypy. Ara, ki te huri i te waehere Python ki te waehere C. Ko te whakamatautau ki a Cython (he punaha e taea ai e koe te whakamaori i te waehere kua tuhia ki te Python ki roto i te waehere C) kaore i kitea he tere tere, na reira i whakatauhia e matou ki te whakaora i te whakaaro ki te tuhi i ta matou ake kaitoi. I te mea kei roto i te mypy codebase (kua tuhia ki te Python) nga momo tuhipoka katoa e tika ana, i whakaaro matou he mea pai ki te ngana ki te whakamahi i enei korero kia tere ake te punaha. I tere taku hanga tauira hei whakamatautau i tenei whakaaro. Neke atu i te 10 te pikinga ake o nga mahi i runga i nga momo tohu tohu moroiti. Ko ta matou whakaaro ko te whakahiato i nga waahanga Python ki nga waahanga C ma te whakamahi i a Cython, me te huri i nga tuhipoka momo ki nga momo arowhai momo wa (te nuinga ka warewarehia nga tuhinga tuhi i te wa-waahi ka whakamahia e nga punaha tirotiro momo). I tino whakamahere matou ki te whakamaori i te whakatinanatanga mypy mai i te Python ki roto i te reo i hoahoatia kia patopatohia, he ahua (a, mo te nuinga, he mahi) rite tonu ki a Python. (Ko tenei momo hekenga reo whakawhiti kua waiho hei tikanga tuku iho mo te kaupapa mypy. Ko te whakatinanatanga mypy taketake i tuhia ki roto i te reo Alore, katahi ko te ranu syntactic o Java me Python).

Ko te arotahi ki te API toronga CPython he mea matua kia kore ai e ngaro nga mana whakahaere kaupapa. Kaore matou i hiahia ki te whakauru i tetahi miihini mariko, etahi whare pukapuka ranei e hiahiatia ana e mypy. I tua atu, ka whai waahi tonu tatou ki te katoa o te rauwiringa kaiao Python me nga taputapu katoa (penei i te pytest). Ko te tikanga ka taea tonu e matou te whakamahi i te waehere Python whakamaori i te wa o te whanaketanga, ka taea e matou te mahi tonu me te tauira tino tere ki te whakarereke i nga waehere me te whakamatautau, kaua ki te tatari kia whakahiato te waehere. Ko te ahua he pai ta matou mahi ki te noho i runga i nga tuuru e rua, me te korero, a he pai ki a matou.

Ko te whakahiato, i kiia e matou ko mypyc (i te mea ka whakamahia e ia te mypy hei pito-mua mo te tātari momo), i puta he kaupapa tino angitu. I te katoa, tata ki te 4x te tere tere mo nga oma mypy auau me te kore keteroki. Ko te whakawhanake i te kaupapa matua o te kaupapa mypyc i tango tetahi roopu iti o Michael Sullivan, Ivan Levkivsky, Hugh Hahn, me ahau mo te 4 marama maramataka. He iti ake tenei mahi i nga mea e hiahiatia ana hei tuhi ano i te mypy, hei tauira, i te C++, i te Haere ranei. A he iti noa atu nga huringa ki te kaupapa i te wa e tuhi ana matou ki tetahi atu reo. I tumanako ano matou ka taea e matou te kawe mai i te mypyc ki te taumata e taea ai e etahi atu hötaka Dropbox te whakamahi hei whakahiato me te tere ake i a raatau waehere.

Hei whakatutuki i tenei taumata o te mahi, me tono etahi otinga miihini whakamere. No reira, ka taea e te kaitoha te tere ake te maha o nga mahi ma te whakamahi i nga hanganga tere, taumata-iti C. Hei tauira, ka whakamaoritia he waea mahi whakahiato ki te waea mahi C. A he tere ake te karanga penei i te karanga i tetahi mahi whakamaori. Ko etahi o nga mahi, penei i te rapu papakupu, kei te whakamahi tonu i nga waea C-API mai i CPython, he iti ake te tere ina whakahiato. I taea e matou te whakakore i nga kawenga taapiri i runga i te punaha i hangaia e te whakamaoritanga, engari i tenei keehi he iti noa te painga o te mahi.

Hei tautuhi i nga mahi "puturi" tino noa, i mahia e matou he tohu tohu. Ma te mau o enei raraunga, ka ngana matou ki te takawiri i te mypyc kia tere ake ai te whakaputa i te waehere C mo enei mahi, ka tuhi ano ranei i te waehere Python e tika ana ma te whakamahi i nga mahi tere (a i etahi wa kaore he otinga ngawari mo tera, mo etahi atu raru ranei) . Ko te tuhi ano i te waehere Python he ngawari ake te otinga ki te raru i te mea ka mahia e te kaitoi i taua huringa. I roto i te wa roa, i hiahia matou ki te whakaaunoa i te maha o enei huringa, engari i te wa i arotahi matou ki te tere ake i te mypy me te iti o te kaha. A, i te neke ki tenei whainga, i tapahia e matou etahi kokonga.

Kia haere tonu ...

E nga kaipānui aroha! He aha o whakaaro mo te kaupapa mypy i te wa i mohio ai koe mo tona oranga?

Ko te ara ki te tirotiro i te 4 miriona rarangi o te waehere Python. Wāhanga 2
Ko te ara ki te tirotiro i te 4 miriona rarangi o te waehere Python. Wāhanga 2

Source: will.com

Tāpiri i te kōrero