Njira yolembera mizere 4 miliyoni ya Python code. Gawo 3

Tikukudziwitsani gawo lachitatu la zomasulira za njira yomwe Dropbox idatenga pokhazikitsa njira yowunikira mtundu wa Python code.

Njira yolembera mizere 4 miliyoni ya Python code. Gawo 3

β†’ Zigawo zam'mbuyo: Choyamba ΠΈ chachiwiri

Kufikira mizere 4 miliyoni yamakhodi otayidwa

Vuto lina lalikulu (ndipo lachiwiri lomwe lidakhudzidwa kwambiri pakati pa omwe adafunsidwa mkati) linali kukulitsa kuchuluka kwa ma code omwe amalembedwa ndi macheke amtundu wa Dropbox. Tayesa njira zingapo zothetsera vutoli, kuyambira kukula mwachilengedwe kukula kwa codebase yojambulidwa mpaka kuyang'ana zoyesayesa za gulu la mypy pamalingaliro okhazikika komanso osinthika. Pamapeto pake, zinkawoneka ngati palibe njira yopambana yopambana, koma tinatha kukwaniritsa kukula mofulumira kwa chiwerengero cha code yotchulidwa mwa kuphatikiza njira zambiri.

Zotsatira zake, chosungira chathu chachikulu kwambiri cha Python (chokhala ndi code yakumbuyo) chili ndi mizere pafupifupi 4 miliyoni ya code yolembedwa. Ntchito ya static code typing inatha pafupifupi zaka zitatu. Mypy tsopano imathandizira mitundu yosiyanasiyana ya malipoti ofotokozera zomwe zimapangitsa kuti zikhale zosavuta kuyang'anira momwe ntchito ikulembera. Makamaka, titha kupanga malipoti pama code okhala ndi zosadziwika bwino zamitundu, monga, mwachitsanzo, kugwiritsa ntchito mtundu Any muzofotokozera zomwe sizingatsimikizidwe, kapena ndi zinthu monga kuitanitsa malaibulale ena omwe alibe mawu omasulira. Monga gawo la polojekiti yowongolera kulondola kwa mtundu wa Dropbox, tidathandizira kukonza matanthauzidwe amtundu (omwe amatchedwa mafayilo a stub) a malaibulale ena otchuka otsegula m'malo apakati a Python. zojambulidwa.

Tidakhazikitsa (ndikusinthanso mu ma PEP otsatirawa) zatsopano zamakina amtunduwu zomwe zimalola mitundu yolondola kwambiri yamitundu ina ya Python. Chitsanzo chodziwika bwino cha izi ndi TypeDict, yomwe imapereka mitundu yamadikishonale ngati JSON omwe ali ndi makiyi okhazikika a zingwe, iliyonse ili ndi mtengo wamtundu wake. Tidzapitiriza kukulitsa mtundu wamtundu. Chotsatira chathu chingakhale kukonza kuthandizira kwa manambala a Python.

Njira yolembera mizere 4 miliyoni ya Python code. Gawo 3
Chiwerengero cha mizere ya code yofotokozera: seva

Njira yolembera mizere 4 miliyoni ya Python code. Gawo 3
Nambala ya mizere ya code yofotokozera: kasitomala

Njira yolembera mizere 4 miliyoni ya Python code. Gawo 3
Chiwerengero chonse cha mizere ya code yofotokozera

Nayi chithunzithunzi chazinthu zazikulu zomwe tidachita kuti tiwonjezere kuchuluka kwa ma code mu Dropbox:

Kukhazikika kwa Annotation. Pang'onopang'ono tinawonjezera zofunikira za kukhwima kwa code yatsopano. Tinayamba ndi maupangiri a linter omwe amalimbikitsa kuwonjezera maupangiri kumafayilo omwe anali ndi zofotokozera kale. Tsopano tikufuna zolemba zolemba m'mafayilo atsopano a Python komanso m'mafayilo ambiri omwe alipo.

Kulemba malipoti. Timatumiza malipoti amagulu mlungu ndi mlungu pa mlingo wa kulemba khodi yawo ndi kupereka malangizo pa zomwe ziyenera kutchulidwa poyamba.

Popularization wa mypy. Timalankhula za mypy pazochitika ndikuyankhula ndi magulu kuti awathandize kuti ayambe ndi zolemba zamtundu.

Mavoti. Timafufuza nthawi ndi nthawi kuti tipeze zovuta zazikulu. Ndife okonzeka kupita patali kwambiri kuthetsa mavutowa (ngakhale kupanga chinenero chatsopano kufulumizitsa mypy!).

Kachitidwe. Tasintha kwambiri magwiridwe antchito a mypy pogwiritsa ntchito daemon ndi mypyc. Izi zidachitidwa kuti zithetse zovuta zomwe zimachitika panthawi yofotokozera, komanso kuti athe kugwira ntchito ndi ma code ambiri.

Kuphatikiza ndi akonzi. Tapanga zida zothandizira kuthamanga kwa mypy mu osintha omwe amadziwika pa Dropbox. Izi zikuphatikiza PyCharm, Vim ndi VS Code. Izi zidachepetsa kwambiri njira yofotokozera code ndikuwunika momwe imagwirira ntchito. Zochita zamtunduwu ndizofala pofotokozera ma code omwe alipo.

Kusanthula mosasunthika. Tinapanga chida chodziwira masiginecha a ntchito pogwiritsa ntchito zida zowunikira. Chida ichi chimatha kugwira ntchito m'malo osavuta, koma chidatithandizira kuwonjezera kufalitsa kwamtundu wa code popanda kuyesetsa kwambiri.

Thandizo kwa malaibulale ena. Ntchito zathu zambiri zimagwiritsa ntchito zida za SQLAlchemy. Zimatengera mwayi wamphamvu za Python zomwe mitundu ya PEP 484 siyingathe kutengera mwachindunji. Ife, molingana ndi PEP 561, tidapanga fayilo yofananira ndikulemba pulogalamu yowonjezera ya mypy (gwero lotseguka), zomwe zimathandizira SQLAlchemy thandizo.

Zovuta zomwe tidakumana nazo

Njira yopita ku mizere 4 miliyoni yamakhodi otayidwa sinakhale yapafupi kwa ife nthawi zonse. Panjira imeneyi tinakumana ndi maenje ambiri ndipo tinalakwitsa zingapo. Awa ndi ena mwamavuto omwe tidakumana nawo. Tikukhulupirira kuti kufotokoza za iwo kudzathandiza ena kupewa mavuto ngati amenewa.

Mafayilo akusowa. Tinayamba ntchito yathu poyang'ana mafayilo ochepa chabe. Chilichonse chomwe sichinaphatikizidwe m'mafayilowa sichinafufuzidwe. Mafayilo adawonjezedwa pamndandanda wojambulira pomwe mawu oyamba adawonekera mwa iwo. Ngati china chake chidatumizidwa kuchokera ku module yomwe ili kunja kwa chitsimikiziro, ndiye kuti tikukamba za kugwira ntchito ndi makhalidwe monga Any, zomwe sizinayesedwe konse. Izi zinapangitsa kuti kulemba kutayike kwambiri, makamaka kumayambiriro kwa kusamuka. Njirayi yagwira ntchito modabwitsa mpaka pano, ngakhale momwe zinthu ziliri ndikuti kuwonjezera mafayilo pakukula kwa ndemanga kumasonyeza mavuto m'madera ena a codebase. Choipa kwambiri, pamene madera awiri akutali a code adaphatikizidwa, momwe, mopanda wina ndi mzake, mitundu idafufuzidwa kale, zinapezeka kuti mitundu ya maderawa inali yosagwirizana. Izi zidapangitsa kuti pakufunika kusintha zambiri pazofotokozera. Tikayang'ana m'mbuyo tsopano, tikuzindikira kuti tikanayenera kuwonjezera ma module a library kudera loyang'ana mtundu wa mypy posachedwa. Izi zipangitsa kuti ntchito yathu ikhale yodziwika bwino kwambiri.

Kufotokozera code yakale. Pamene tidayamba, tinali ndi mizere pafupifupi 4 miliyoni ya code ya Python yomwe inalipo kale. Zinali zoonekeratu kuti kutchula code yonseyi sinali ntchito yophweka. Tapanga chida chotchedwa PyAnnotate chomwe chimatha kusonkhanitsa zambiri zamtundu akamayesa ndikuwonjezera maupangiri ku khodi yanu kutengera zomwe mwasonkhanitsa. Komabe, sitinazindikire kutengera kwakukulu kwa chida ichi. Kusonkhanitsa zidziwitso zamtundu kunali kochedwa, ndipo mawu ofotokozera omwe amangopangidwa okha nthawi zambiri amafunikira zosintha zambiri pamanja. Tidaganiza zongogwiritsa ntchito chidachi nthawi zonse tikamawunika ma code, kapena kusonkhanitsa zidziwitso zamtundu kutengera kusanthula kwakanthawi kochepa kwa pempho lenileni la intaneti, koma tidaganiza kuti tisatero chifukwa njira iliyonse inali yowopsa kwambiri.

Chifukwa chake, zitha kudziwika kuti ma code ambiri adafotokozedwa pamanja ndi eni ake. Kuti tiwongolere njirayi m'njira yoyenera, timakonzekera malipoti a ma modules ofunikira kwambiri ndi ntchito zomwe ziyenera kufotokozedwa. Mwachitsanzo, ndikofunikira kupereka zolemba zamtundu wa gawo la library lomwe limagwiritsidwa ntchito m'malo mazana. Koma ntchito yakale yomwe ikusinthidwa ndi yatsopano sikufunikanso kumveketsa. Tikuyesanso kugwiritsa ntchito kusanthula kwa static kuti tipange zolemba zamtundu wa code ya cholowa.

Kutumiza kunja kwa cyclic. Pamwambapa, ndidalankhula za cyclic imports ("dependency tangles"), kupezeka kwake komwe kunapangitsa kuti zikhale zovuta kufulumizitsa mypy. Tidayeneranso kulimbikira kupanga mypy kuthandizira mitundu yonse ya zilankhulo zomwe zimayambitsidwa ndi zotengera izi. Posachedwa tamaliza ntchito yayikulu yokonzanso dongosolo yomwe idakonza zovuta zambiri za mypy zokhudzana ndi zotuluka kunja. Mavutowa adachokera kumasiku oyambirira a polojekitiyi, kuchokera ku Alore, chinenero cha maphunziro chomwe polojekiti ya mypy inkayang'ana poyamba. Syntax ya Alore imapangitsa kuti zikhale zosavuta kuthana ndi mavuto ndi malamulo otengera cyclic. Mypy yamakono yatengera zofooka zina kuchokera pakukhazikitsa kwake koyambirira, kosavuta (komwe kunali koyenera kwa Alore). Python imapangitsa kugwira ntchito ndi zozungulira zozungulira kukhala zovuta, makamaka chifukwa mawu samveka bwino. Mwachitsanzo, ntchito yogawa ikhoza kutanthauzira mtundu wina wa alias. Mypy nthawi zonse samatha kuzindikira zinthu ngati izi mpaka nthawi zambiri zolowera kunja zitakonzedwa. Panalibe zotsutsana zotere ku Alore. Zosankha zolakwika zomwe zidapangidwa kumayambiriro kwa kachitidwe kazinthu zimatha kuwonetsa zodabwitsa kwa wopanga mapulogalamu zaka zambiri pambuyo pake.

Zotsatira: njira yopita ku mizere ya 5 miliyoni ya ma code ndi ma horizons atsopano

Pulojekiti ya mypy yafika patali kwambiri - kuyambira pamayendedwe oyambilira kupita ku kachitidwe komwe kamayang'anira mizere 4 miliyoni yamitundu yopangira. Pamene mypy idasinthika, malingaliro amtundu wa Python adasinthidwa. Masiku ano, chilengedwe champhamvu chapanga polemba khodi ya Python. Ili ndi malo othandizira laibulale, ili ndi zida zothandizira ma IDE ndi okonza, ili ndi machitidwe angapo owongolera, iliyonse ili ndi zabwino ndi zoyipa zake.

Ngakhale kuyang'ana kwamtundu kwaperekedwa kale ku Dropbox, ndikukhulupirira kuti tikadali m'masiku oyambilira kulemba Python code. Ndikuganiza kuti matekinoloje owunikira mitundu apitiliza kusinthika ndikuwongolera.

Ngati simunagwiritsepo ntchito kale cheke mu projekiti yanu yayikulu ya Python, ndiye dziwani kuti ino ndi nthawi yabwino kwambiri kuti muyambe kusuntha polemba mokhazikika. Ndalankhulapo ndi anthu amene asintha zinthu ngati zimenezi. Palibe aliyense wa iwo amene anadandaula. Kufufuza kwamtundu kumapangitsa Python chilankhulo chomwe chili choyenera kupanga mapulojekiti akuluakulu kuposa "Python wamba."

Wokondedwa owerenga! Kodi mumagwiritsa ntchito cheke muma projekiti anu a Python?

Njira yolembera mizere 4 miliyoni ya Python code. Gawo 3
Njira yolembera mizere 4 miliyoni ya Python code. Gawo 3

Source: www.habr.com

Kuwonjezera ndemanga