ʻO ke ala e nānā ai i nā laina 4 miliona o ka code Python. Mahele 3

Ke hōʻike aku nei mākou iā ʻoe i ka hapakolu o ka unuhi ʻana o nā mea e pili ana i ke ala a Dropbox i lawe ai i ka wā e hoʻokō ai i kahi ʻōnaehana nānā ʻano no ka code Python.

ʻO ke ala e nānā ai i nā laina 4 miliona o ka code Python. Mahele 3

→ Nā ʻāpana mua: ʻo ka mua и kekona

E hōʻea ana i 4 miliona mau laina o ke code i paʻi ʻia

ʻO kekahi paʻakikī nui (a ʻo ka lua o ka hopohopo maʻamau i waena o ka poʻe i noiʻi ʻia i loko) ʻo ia ka hoʻonui ʻana i ka nui o nā code i uhi ʻia e nā ʻano loiloi ma Dropbox. Ua hoʻāʻo mākou i kekahi mau ala e hoʻoponopono ai i kēia pilikia, mai ka hoʻonui maoli ʻana i ka nui o ka codebase i hoʻopaʻa ʻia i ka hoʻoikaika ʻana o ka hui mypy i ka hoʻohālikelike ʻano static a dynamic. I ka hopena, me he mea lā ʻaʻohe hoʻolālā lanakila maʻalahi, akā hiki iā mākou ke hoʻokō i ka ulu wikiwiki i ka nui o nā code annotated ma o ka hoʻohui ʻana i nā ala he nui.

ʻO ka hopena, ʻo kā mākou waihona Python nui loa (me ka code backend) he kokoke i 4 miliona mau laina o ka helu annotated. Ua hoʻopau ʻia ka hana ma ke kaomi ʻana i nā code static ma kahi o ʻekolu makahiki. Kākoʻo ʻo Mypy i kēia manawa i nā ʻano hōʻike hoʻopiʻi code e maʻalahi ke nānā i ka holomua o ka paʻi ʻana. Ma ke ʻano, hiki iā mākou ke hoʻopuka i nā hōʻike e pili ana i ke code me nā ʻano ambiguities, e like me, no ka laʻana, ka hoʻohana ʻana i kahi ʻano. Any i nā hōʻike i hiki ʻole ke hōʻoia ʻia, a i ʻole me nā mea e like me ka hoʻokomo ʻana i nā hale waihona puke ʻaoʻao ʻaʻole i loaʻa nā ʻano wehewehe. Ma ke ʻano he papahana e hoʻomaikaʻi i ka pololei o ka nānā ʻana i ke ʻano ma Dropbox, ua hāʻawi mākou i ka hoʻomaikaʻi ʻana i nā wehewehe ʻano (i kapa ʻia nā faila stub) no kekahi mau hale waihona puke punahele kaulana i loko o kahi waihona Python kikowaena. paʻi palapala.

Ua hoʻokō mākou (a hoʻopaʻa ʻia i nā PEP ma hope) i nā hiʻohiʻona hou o ka ʻano ʻōnaehana e ʻae i nā ʻano kikoʻī no kekahi mau hiʻohiʻona Python kikoʻī. ʻO kahi laʻana kaulana o kēia TypeDict, e hā'awi ana i nā 'ano no nā puke wehewehe'ōlelo e like me JSON i ho'onohonoho pono 'ia nā kī kaula, me ka waiwai o kēlā me kēia 'ano. E hoʻomau mākou i ka hoʻonui ʻana i ka ʻōnaehana ʻano. ʻO kā mākou hana aʻe e hoʻomaikaʻi i ke kākoʻo no nā mana helu Python.

ʻO ke ala e nānā ai i nā laina 4 miliona o ka code Python. Mahele 3
Ka helu o nā laina o ka helu helu helu: server

ʻO ke ala e nānā ai i nā laina 4 miliona o ka code Python. Mahele 3
Ka helu o nā laina o ka helu helu helu: mea kūʻai

ʻO ke ala e nānā ai i nā laina 4 miliona o ka code Python. Mahele 3
Huina helu o na laina o ka helu helu

Eia kahi hiʻohiʻona o nā hiʻohiʻona nui o nā mea a mākou i hana ai e hoʻonui i ka nui o nā code annotated ma Dropbox:

ʻOkoʻa hōʻike. Hoʻonui mālie mākou i nā koi no ka paʻakikī o ka hōʻike ʻana i nā code hou. Hoʻomaka mākou me nā ʻōlelo aʻoaʻo linter i manaʻo ʻia e hoʻohui i nā annotation i nā faila i loaʻa i kekahi mau annotation. Pono mākou i kēia manawa i nā annotation type i nā faila Python hou a i ka hapa nui o nā faila.

Kākau i nā hōʻike. Hoʻouna mākou i nā hui i kēlā me kēia pule e pili ana i ke kiʻekiʻe o ka paʻi ʻana i kā lākou code a hāʻawi i ka ʻōlelo aʻoaʻo i nā mea e pono e kākau mua ʻia.

Hoʻolaha ʻia o mypy. Kūkākūkā mākou e pili ana i ka mypy ma nā hanana a kamaʻilio pū me nā hui e kōkua iā lākou e hoʻomaka me nā ʻano annotation.

Nā koho balota. Hana mākou i nā loiloi mea hoʻohana i kēlā me kēia manawa e ʻike i nā pilikia nui. Mākaukau mākou e hele lōʻihi i ka hoʻoponopono ʻana i kēia mau pilikia (ʻo ka hoʻokumu ʻana i kahi ʻōlelo hou e wikiwiki ai i ka mypy!).

hana. Ua hoʻomaikaʻi nui mākou i ka hana o mypy ma ka hoʻohana ʻana i ka daemon a me mypyc. Ua hana ʻia kēia no ka hoʻomaʻamaʻa ʻana i nā pilikia e kū mai ana i ka wā o ke kaʻina hana hōʻike, a i hiki ke hana me ka nui o nā code.

Hoʻohui me nā mea hoʻoponopono. Ua kūkulu mākou i nā mea hana e kākoʻo i ka holo ʻana i ka mypy i nā mea hoʻoponopono i kaulana ma Dropbox. Aia kēia me PyCharm, Vim a me VS Code. Ua maʻalahi kēia i ke kaʻina hana o ka hōʻike ʻana i ke code a nānā i kāna hana. He mea maʻamau kēia mau ʻano hana i ka wā e hōʻike ana i nā code i loaʻa.

ʻIkepili paʻa. Ua hana mākou i kahi mea hana e hoʻohālikelike ai i nā pūlima hana me ka hoʻohana ʻana i nā mea hana loiloi static. Hiki i kēia mea hana ke hana ma nā kūlana maʻalahi, akā ua kōkua ia iā mākou e hoʻonui i kā mākou ʻano code me ka hoʻoikaika ʻole.

Kākoʻo no nā hale waihona puke ʻekolu. Hoʻohana ka nui o kā mākou papahana i ka pahu hana SQLAlchemy. Hoʻohana ia i nā mana ikaika o Python i hiki ʻole i nā ʻano PEP 484 ke hoʻohālike pololei. Ua hana mākou, e like me ka PEP 561, i ka faila stub kūpono a kākau i kahi plugin no mypy (puna hāmama), e hoʻomaikaʻi ana i ke kākoʻo SQLAlchemy.

Nā pilikia i loaʻa iā mākou

ʻAʻole i maʻalahi ke ala i 4 miliona mau laina o nā code i paʻi ʻia no mākou. Ma keia ala ua halawai makou i na luawaha a nui na hewa. ʻO kēia kekahi o nā pilikia i loaʻa iā mākou. Manaʻo mākou e kōkua ka haʻi ʻana iā lākou e pale i nā pilikia like.

Nalo nā faila. Hoʻomaka mākou i kā mākou hana ma ka nānā ʻana i nā faila liʻiliʻi wale nō. ʻAʻole i nānā ʻia nā mea ʻaʻole i hoʻokomo ʻia i loko o kēia mau faila. Hoʻohui ʻia nā faila i ka papa inoa scanning i ka wā i ʻike ʻia ai nā annotation mua i loko o lākou. Inā lawe ʻia kekahi mea mai kahi module i waho o ke ʻano o ka hōʻoia, a laila ke kamaʻilio nei mākou e pili ana i ka hana ʻana me nā waiwai like. Any, i hoao ole ia. Ua alakaʻi kēia i ka pohō nui o ka paʻi ʻana i ka pololei, ʻoi aku ka nui ma nā pae mua o ka neʻe ʻana. Ua hana maikaʻi kēia ala i kēia manawa, ʻoiai ʻo kahi kūlana maʻamau ʻo ka hoʻohui ʻana i nā faila i ke ʻano o ka loiloi e hōʻike ana i nā pilikia ma nā wahi ʻē aʻe o ka codebase. I ka hihia maikaʻi loa, i ka wā i hoʻohui ʻia ai ʻelua mau wahi kaʻawale o ke code, kahi i ʻike ʻia ai nā ʻano like ʻole, ʻike ʻia ʻaʻole kūpono nā ʻano o kēia mau wahi. Ua alakaʻi kēia i ka pono e hana i nā hoʻololi he nui i nā annotation. Ke nānā nei mākou i hope i kēia manawa, ʻike mākou ua hoʻohui mākou i nā modula waihona kumu i ka wahi nānā ʻano ʻano o mypy. ʻO kēia ka mea e ʻoi aku ka manaʻo o kā mākou hana.

Hōʻike i ke code kahiko. I ko mākou hoʻomaka ʻana, ua loaʻa iā mākou ma kahi o 4 miliona mau laina o ka code Python i loaʻa. Ua maopopo ʻaʻole he hana maʻalahi ka hōʻike ʻana i kēia code āpau. Ua hana mākou i kahi mea hana i kapa ʻia ʻo PyAnnotate e hiki ke hōʻiliʻili i ka ʻike ʻano i ka wā e holo ai nā hoʻokolohua a hiki ke hoʻohui i nā annotation ʻano i kāu code e pili ana i ka ʻike i hōʻiliʻili ʻia. Eia naʻe, ʻaʻole mākou i ʻike i ka hoʻohana nui ʻana o kēia mea hana. Ua lohi ka hōʻiliʻili ʻana i nā ʻike ʻano, a koi pinepine ʻia nā hoʻopukapuka i hana ʻia i nā hoʻoponopono lima. Ua noʻonoʻo mākou e holo maʻalahi i kēia hāmeʻa i kēlā me kēia manawa a mākou e nānā ai i ke code, a i ʻole e hōʻiliʻili i ka ʻike ʻano e pili ana i ka nānā ʻana i kekahi liʻiliʻi liʻiliʻi o nā noi pūnaewele maoli, akā ua hoʻoholo mākou ʻaʻole no ka mea he pilikia loa kēlā me kēia ala.

ʻO ka hopena, hiki ke hoʻomaopopo ʻia ʻo ka hapa nui o ke code i kākau lima ʻia e nā mea nona. I mea e alakaʻi ai i kēia kaʻina hana ma ke ala kūpono, hoʻomākaukau mākou i nā hōʻike e pili ana i nā modula koʻikoʻi a me nā hana pono e hoʻopaʻa ʻia. No ka laʻana, he mea nui ka hāʻawi ʻana i nā annotation ʻano no kahi module waihona i hoʻohana ʻia ma nā haneli he nui. Akā ʻo kahi lawelawe kahiko i hoʻololi ʻia me kahi mea hou, ʻaʻole ia he mea nui e hōʻike. Ke hoʻāʻo nei mākou me ka hoʻohana ʻana i ka loiloi static e hoʻopuka i nā ʻano annotation no ka code legacy.

Hoʻokomo ʻia ka pōʻaiapili. Ma luna aʻe, ua kamaʻilio wau e pili ana i nā hoʻokomo cyclic (ka "dependency tangles"), ʻo ia ka mea i paʻakikī i ka wikiwiki o ka mypy. Pono mākou e hana ikaika e hana i ka mypy e kākoʻo i nā ʻano ʻōlelo a pau i hoʻokumu ʻia e kēia mau hoʻopuka cyclic. Ua hoʻopau mākou i kahi papahana hoʻolālā ʻōnaehana nui i hoʻoponopono i ka hapa nui o nā pilikia o mypy e pili ana i ka lawe ʻana mai i nā pōʻai. ʻO kēia mau pilikia i loaʻa mai i nā lā mua loa o ka papahana, hoʻi mai Alore mai, ka ʻōlelo hoʻonaʻauao i manaʻo mua ʻia ai ka papahana mypy. He mea maʻalahi ka alore syntax i ka hoʻoponopono ʻana i nā pilikia me nā kauoha hoʻokomo cyclic. Ua hoʻoili ʻia ka mypy hou i kekahi mau palena mai kāna hoʻokō mua ʻana, maʻalahi-noʻonoʻo (ʻo ia ka mea kūpono no Alore). He mea paʻakikī ʻo Python i ka hana ʻana me ka lawe ʻana mai i nā pōʻai, no ka mea, ʻaʻole maopopo ka ʻōlelo. No ka laʻana, hiki i kahi hana hāʻawi ke wehewehe maoli i kahi inoa inoa. ʻAʻole hiki iā Mypy ke ʻike i nā mea e like me kēia a hiki i ka hapa nui o ka puka hoʻokomo. ʻAʻohe ʻano pohihihi like ʻole ma Alore. ʻO nā hoʻoholo maikaʻi ʻole i hana ʻia i ka hoʻomaka ʻana o ka hoʻomohala ʻana i ka ʻōnaehana hiki ke hōʻike i kahi pīhoihoi maikaʻi ʻole i ka mea papahana i nā makahiki he nui ma hope.

Nā hualoaʻa: ke ala i ka 5 miliona mau laina o ke code a me nā horizons hou

Ua hele lōʻihi ka papahana mypy - mai nā prototypes mua a hiki i kahi ʻōnaehana e hoʻomalu i 4 miliona mau laina o nā ʻano code production. I ka ulu ʻana o ka mypy, ua hoʻohālikelike ʻia nā ʻano hōʻailona o Python. I kēia mau lā, ua hoʻomohala ʻia kahi kaiaola ikaika e pili ana i ke kākau ʻana i ka code Python. He wahi ia no ke kākoʻo waihona, loaʻa iā ia nā mea hana kōkua no nā IDE a me nā mea hoʻoponopono, loaʻa iā ia nā ʻōnaehana mana ʻano like ʻole, aia kēlā me kēia me kāna pono ponoʻī a me nā pōʻino.

ʻOiai ua hāʻawi ʻia ka nānā ʻana i ke ʻano ma Dropbox, ke manaʻoʻiʻo nei au aia mākou i nā lā mua o ke kākau ʻana i ka code Python. Manaʻo wau e hoʻomau a hoʻomaikaʻi ʻia nā ʻenehana nānā ʻano.

Inā ʻaʻole ʻoe i hoʻohana i ka nānā ʻana i ke ʻano i kāu papahana Python nui, a laila ʻike ʻoe he manawa maikaʻi loa kēia e hoʻomaka ai e neʻe i ka paʻi paʻa. Ua kamaʻilio wau me ka poʻe i hana i kahi hoʻololi like. ʻAʻohe o lākou i mihi. ʻO ka nānā ʻana i ke ʻano he ʻōlelo ʻo Python i ʻoi aku ka maikaʻi o ka hoʻomohala ʻana i nā papahana nui ma mua o ka "python maʻamau."

E nā mea heluhelu aloha! Ke hoʻohana nei ʻoe i ka nānā ʻana i kāu mau papahana Python?

ʻO ke ala e nānā ai i nā laina 4 miliona o ka code Python. Mahele 3
ʻO ke ala e nānā ai i nā laina 4 miliona o ka code Python. Mahele 3

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka