Rêya kontrolkirina 4 mîlyon xetên koda Python. Beş 3

Em beşa sêyem a wergera materyalê ya di derbarê riya ku Dropbox dema ku pergala kontrolkirina tîpê ji bo koda Python bicîh kir, pêşkêşî we dikin.

Rêya kontrolkirina 4 mîlyon xetên koda Python. Beş 3

→ Beşên berê: yekem и duyem

Gihîştina 4 mîlyon rêzikên koda tîpkirî

Pirsgirêkek din a girîng (û duyemîn fikarên herî gelemperî di nav wan kesên ku di hundurê vekolîn de hatine lêkolîn kirin) zêdekirina jimareya kodê ya ku ji hêla kontrolên celebê ve li Dropbox-ê ve hatî vegirtin bû. Me ji bo çareserkirina vê pirsgirêkê gelek nêzîkatî ceribandiye, ji mezinbûna xwezayî ya bingeha koda tîpkirî bigire heya balkişandina hewildanên tîmê mypy li ser encamdana tîpa otomatîkî ya statîk û dînamîkî. Di dawiyê de, wusa dixuye ku stratejiyek serketî ya sade tune, lê me karîbû bi berhevkirina gelek nêzîkatiyan re mezinbûna bilez a qebareya koda şirovekirî bi dest bixin.

Wekî encamek, depoya meya Pythonê ya herî mezin (bi koda paşîn) nêzîkê 4 mîlyon xetên koda şirovekirî hene. Xebata li ser nivîsandina koda statîk bi qasî sê salan qediya. Mypy naha cûrbecûr raporên vegirtina kodê piştgirî dike ku çavdêriya pêşkeftina nivîsandinê hêsantir dike. Bi taybetî, em dikarin li ser kodê raporên ku di celeban de nezelal in, wekî mînak, karanîna eşkere ya celebek çêbikin. Any di şîroveyên ku nayên verast kirin de, an jî bi tiştên mîna îtxalkirina pirtûkxaneyên sêyemîn ên ku şîroveyên tîpan nînin. Wekî beşek ji projeyek ji bo baştirkirina rastbûna kontrolkirina tîpan li Dropbox, me ji bo baştirkirina pênaseyên tîpan (ku jê re tê gotin pelên stûyê) ji bo hin pirtûkxaneyên çavkaniya vekirî ya populer di depoyek navendî ya Python de beşdar bûn. tîpkirî.

Me taybetmendiyên nû yên pergala celebê bicîh kir (û standardîze kir) ji bo hin şêwazên Python-ê yên taybetî. Nimûneyek berbiçav a vê yekê ye TypeDict, ya ku ji bo ferhengên JSON-wek cûreyan peyda dike ku xwedan komek bişkojkên rêzikan e, her yek bi nirxek celebê xwe ye. Em ê berfirehkirina pergala tîpan bidomînin. Pêngava meya paşîn dê îhtîmalek başkirina piştgirîya ji bo kapasîteyên jimarî yên Python be.

Rêya kontrolkirina 4 mîlyon xetên koda Python. Beş 3
Hejmara rêzikên koda şîrovekirî: server

Rêya kontrolkirina 4 mîlyon xetên koda Python. Beş 3
Hejmara rêzikên koda şirovekirî: xerîdar

Rêya kontrolkirina 4 mîlyon xetên koda Python. Beş 3
Hejmara giştî ya rêzikên koda şîrovekirî

Li vir nihêrînek li ser taybetmendiyên sereke yên tiştên ku me kir ji bo zêdekirina mîqdara koda şîrovekirî ya li Dropbox-ê heye:

Hişmendiya şirovekirinê. Me hêdî hêdî hewcedariyên ji bo hişkiya şîrovekirina koda nû zêde kir. Me bi serişteyên linterê dest pê kir ku pêşniyar dikin ku şîroveyan li pelên ku berê hin şîrove hebûn zêde bikin. Naha em di pelên Python-ê yên nû de û di pir pelên heyî de şîrovekirina tîpan hewce dikin.

Raporên nivîsandinê. Em heftane raporên tîmê li ser asta nivîsandina koda wan dişînin û şîretan li ser tiştên ku divê pêşî werin şîrove kirin didin.

Popularization of mypy. Em di bûyeran de li ser mypy diaxivin û bi tîman re diaxivin da ku ji wan re bibin alîkar ku dest bi şîrovekirina tîpan bikin.

Polls. Em anketên bikarhêneran ên demkî pêk tînin da ku pirsgirêkên mezin nas bikin. Em amade ne ku di çareserkirina van pirsgirêkan de pir dûr biçin (tewra afirandina zimanek nû ji bo lezkirina mypy!).

Birêvebirinî. Me bi karanîna daemon û mypyc performansa mypy pir çêtir kiriye. Ev hate kirin da ku nerehetiyên ku di dema pêvajoya şîrovekirinê de çêdibin sivik bikin, û ji bo ku karibin bi hejmareke mezin kodê re bixebitin.

Yekbûna bi edîtoran. Me amûrên ku di edîtorên ku li Dropbox-ê de populer in piştgirî didin meşandina mypy ava kirine. Ev PyCharm, Vim û VS Code pêk tîne. Vê yekê pêvajoya şîrovekirina kodê û kontrolkirina fonksiyona wê pir hêsan kir. Dema ku koda heyî şîrove dikin ev celeb kiryar gelemperî ne.

Analîza statîk. Me amûrek çêkir ku bi karanîna amûrên analîzên statîk nîşaneyên fonksiyonê derxîne. Ev amûr tenê dikare di rewşên hêsan ên hêsan de bixebite, lê ew ji me re bû alîkar ku bêyî hewildanek zêde vegirtina celebê koda xwe zêde bikin.

Piştgiriya ji bo pirtûkxaneyên partiya sêyemîn. Gelek projeyên me amûra SQLAlchemy bikar tînin. Ew ji kapasîteyên dînamîkî yên Python sûd werdigire ku celebên PEP 484 nekarin rasterast model bikin. Me, li gorî PEP 561, pelê stûyê têkildar çêkir û ji bo mypy pêvekek nivîsand (çavkaniya vekirî), ku piştgiriya SQLAlchemy çêtir dike.

Zehmetiyên ku em pê re rû bi rû man

Rêya 4 mîlyon rêzikên koda tîpkirî ji me re her gav ne hêsan bû. Di vê rêyê de em rastî gelek qulikan hatin û gelek xeletî kirin. Ev çend ji pirsgirêkên ku em pê re rû bi rû ne. Em hêvî dikin ku vegotina wan dê ji kesên din re bibe alîkar ku ji pirsgirêkên bi vî rengî dûr bikevin.

Pelên winda ne. Me karê xwe bi kontrolkirina hejmareke piçûk a pelan dest pê kir. Tiştê ku di van dosyayan de cih negirt, nehat kontrol kirin. Dema ku şiroveyên yekem di wan de xuya bûn, pel li navnîşa şopandinê hatin zêdekirin. Ger tiştek ji modulek ku li derveyî çarçoveya verastkirinê ye hate import kirin, wê hingê me behsa xebata bi nirxên mîna Any, ku qet nehatin ceribandin. Ev bû sedema windabûnek girîng a rastnivîsê, nemaze di qonaxên destpêkê yên koçberiyê de. Ev nêzîkatî heya nuha ecêb baş xebitiye, her çend rewşek gelemperî ev e ku lê zêdekirina pelan li çarçoweya vekolînê pirsgirêkan di beşên din ên bingeha kodê de eşkere dike. Di rewşa herî xirab de, dema ku du deverên veqetandî yên kodê hatin yek kirin, ku tê de, ji hev serbixwe, celeb berê hatine kontrol kirin, derket holê ku celebên van deveran bi hevûdu re naguncan in. Vê yekê kir ku hewce bike ku gelek guhertin di şîroveyan de bêne çêkirin. Naha em li paş xwe mêze dikin, em pê dihesin ku diviyabû me modulên pirtûkxaneya bingehîn zûtir li qada kontrolkirina tîpa mypy zêde bikira. Ev ê karê me pir pêşbîntir bike.

Şîrovekirina koda kevn. Dema ku me dest pê kir, me nêzî 4 mîlyon xetên koda Python-a heyî hebû. Eşkere bû ku şîrovekirina van hemî kodê ne karekî hêsan bû. Me amûrek bi navê PyAnnotate afirandiye ku dema ceribandinan dimeşîne dikare agahdariya celebê berhev bike û li gorî agahdariya berhevkirî dikare li koda we şîroveyên tîpan zêde bike. Lêbelê, me pejirandinek taybetî ya berfireh a vê amûrê nedîtiye. Agahdariya celebê berhevkirina hêdî bû, û şîroveyên ku bixweber têne çêkirin bi gelemperî gelek guherandinên destan hewce bûn. Em difikirin ku her carê ku em kodê dinirxînin, an agahdariya celebê li ser bingeha analîzkirina hin hêjmarên piçûk ên daxwazên torê yên rastîn berhev dikin, vê amûrê bixweber bimeşînin, lê biryar da ku nebin ji ber ku her du nêzîkatî pir xeternak bû.

Wekî encamek, meriv dikare were zanîn ku piraniya kodê bi destan ji hêla xwediyên wê ve hatî şîrove kirin. Ji bo ku em vê pêvajoyê di rêça rast de rêve bibin, em li ser modul û fonksiyonên bi taybetî girîng ên ku hewce ne ku bêne şîrove kirin rapor amade dikin. Mînakî, girîng e ku ji bo modulek pirtûkxaneyê ku li bi sedan cihan tê bikar anîn, şîroveyên tîpan peyda bikin. Lê karûbarek kevn a ku bi ya nû tê guheztin êdî ne girîng e ku were şîrove kirin. Em di heman demê de ceribandina karanîna analîzên statîk dikin da ku ji bo koda mîrateyê şiroveyên tîpan çêbikin.

Importên Cyclic. Li jor, min li ser îthalata çerxîkî ("tevliheviyên girêdayîbûnê") axivî, hebûna wan lezkirina mypy dijwar kir. Di heman demê de neçar mabû ku em pir bixebitin da ku mypy piştgirî bide her cûre biwêjên ku ji ber van îthalata çerxîkî têne çêkirin. Me vê dawîyê projeyek ji nû ve sêwirana pergalê ya mezin qedand ku piraniya pirsgirêkên mypy-yê yên di derheqê îthalata dorhêl de rast kir. Van pirsgirêkan bi rastî ji rojên destpêkê yên projeyê derketin, ji Alore, zimanê perwerdehiyê ku projeya mypy di destpêkê de li ser bû. Hevoksaziya Alore çareserkirina pirsgirêkan bi fermanên importa cyclic re hêsan dike. Mypy-ya nûjen ji pêkanîna xweya berê, sade (ya ku ji Alore re guncanek mezin bû) hin sînor mîras girtiye. Python xebata bi importên dorhêl re dijwar dike, nemaze ji ber ku vegotin nezelal in. Mînakî, operasyonek peywirdarkirinê dibe ku bi rastî celebek navekî diyar bike. Mypy her gav nekare tiştên bi vî rengî tespît bike heya ku piraniya lûleya importê neyê pêvajo kirin. Li Alore nezelaliyên wisa tunebûn. Biryarên nebaş ên ku di qonaxên destpêkê yên pêşkeftina pergalê de têne girtin dikarin gelek sal şûnda surprîzek ne xweş ji bernamenûs re peyda bikin.

Encam: riya 5 mîlyon xetên kod û asoyên nû

Projeya mypy rêyek dirêj derbas bûye - ji prototîpên destpêkê heya pergalek ku 4 mîlyon xetên celeb kodên hilberînê kontrol dike. Gava ku mypy pêşve çû, îşaretên tîpên Python standard bûn. Van rojan, ekosîstemek hêzdar li dora nivîsandina koda Python pêş ketiye. Ew cîhek ji bo piştevaniya pirtûkxaneyê heye, ew amûrên alîkar ji bo IDE û edîtoran vedihewîne, çend pergalên kontrolê yên cûrbecûr hene, ku her yek ji wan xwedî erênî û neyînîyên xwe ne.

Her çend kontrolkirina tîpê jixwe li Dropbox-ê tê dayîn, ez bawer dikim ku em hîn di rojên destpêkê yên nivîsandina koda Python de ne. Ez difikirim ku teknolojiyên kontrolkirina tîpan dê pêşkeftin û pêşkeftina xwe bidomînin.

Ger we jixwe di projeya xweya Python-a mezin de kontrolkirina tîpan bikar neaniye, wê hingê zanibin ku nuha demek pir baş e ku hûn dest bi tîpkirina statîk bikin. Min bi kesên ku veguhertinek bi vî rengî kirine re axivîm. Yek ji wan poşman nebû. Kontrolkirina tîpan Python dike zimanek ku ji "Python-a birêkûpêk" ji bo pêşxistina projeyên mezin pir çêtir e.

Xwendevanên delal! Ma hûn di projeyên xwe yên Python de kontrolkirina tîpan bikar tînin?

Rêya kontrolkirina 4 mîlyon xetên koda Python. Beş 3
Rêya kontrolkirina 4 mîlyon xetên koda Python. Beş 3

Source: www.habr.com

Add a comment