An t-slighe gu bhith a’ sgrìobhadh 4 millean loidhne de chòd Python. Pàirt 3

Bidh sinn a’ taisbeanadh d’ aire an treas pàirt den eadar-theangachadh de stuth mun t-slighe a ghabh Dropbox nuair a chuir sinn an gnìomh siostam sgrùdaidh seòrsa airson còd Python.

An t-slighe gu bhith a’ sgrìobhadh 4 millean loidhne de chòd Python. Pàirt 3

→ Pàirtean roimhe: an toiseach и an dàrna fear

A’ ruighinn 4 millean loidhne de chòd clò-sgrìobhte

B’ e prìomh dhùbhlan eile (agus an dàrna dragh as cumanta am measg an fheadhainn a chaidh an sgrùdadh air an taobh a-staigh) an àireamh de chòd a bha còmhdaichte le sgrùdaidhean seòrsa ann an Dropbox a mheudachadh. Tha sinn air grunn dhòighean-obrach fheuchainn gus an duilgheadas seo fhuasgladh, bho bhith a’ fàs gu nàdarrach meud a’ chòd-chòd clò-sgrìobhte gu bhith a’ cuimseachadh oidhirpean an sgioba mypy air co-dhùnadh seòrsa fèin-ghluasadach statach agus fiùghantach. Aig a ’cheann thall, bha e coltach nach robh ro-innleachd buannachaidh sìmplidh ann, ach bha e comasach dhuinn fàs luath a choileanadh ann an meud còd le notaichean le bhith a’ cothlamadh mòran dhòighean-obrach.

Mar thoradh air an sin, tha faisg air 4 millean loidhne de chòd le notaichean aig an stòr Python as motha againn (le còd backend). Chaidh an obair air sgrìobhadh còd statach a chrìochnachadh ann an timcheall air trì bliadhna. Tha Mypy a-nis a’ toirt taic do ghrunn sheòrsan de dh’ aithisgean còmhdach còd a tha ga dhèanamh nas fhasa sùil a chumail air adhartas clò-sgrìobhaidh. Gu sònraichte, is urrainn dhuinn aithisgean còd a ghineadh le mì-chinnt ann an seòrsachan, leithid, mar eisimpleir, cleachdadh sònraichte de sheòrsa Any ann an notaichean nach gabh a dhearbhadh, no le rudan mar toirt a-steach leabharlannan treas-phàrtaidh aig nach eil notaichean seòrsa. Mar phàirt de phròiseact gus cruinneas sgrùdadh seòrsa ann an Dropbox a leasachadh, chuir sinn ri bhith a’ leasachadh na mìneachaidhean seòrsa (ris an canar faidhlichean stub) airson cuid de leabharlannan stòr fosgailte mòr-chòrdte ann an ionad-tasgaidh meadhanaichte Python. clò-sgrìobhadh.

Chuir sinn an gnìomh (agus àbhaisteachadh ann am PEPan às deidh sin) feartan ùra den t-siostam seòrsa a leigeas le seòrsachan nas mionaidiche airson cuid de phàtranan Python sònraichte. Is e eisimpleir sònraichte de seo TypeDict, a bheir seachad seòrsaichean airson faclairean coltach ri JSON aig a bheil seata iuchraichean sreang stèidhichte, gach fear le luach den t-seòrsa aige fhèin. Leanaidh sinn oirnn a’ leudachadh an t-siostam seòrsa. Is dòcha gur e an ath cheum againn taic a leasachadh do chomasan àireamhach Python.

An t-slighe gu bhith a’ sgrìobhadh 4 millean loidhne de chòd Python. Pàirt 3
Àireamh loidhnichean de chòd le nota: frithealaiche

An t-slighe gu bhith a’ sgrìobhadh 4 millean loidhne de chòd Python. Pàirt 3
Àireamh de loidhnichean de chòd le notaichean: neach-dèiligidh

An t-slighe gu bhith a’ sgrìobhadh 4 millean loidhne de chòd Python. Pàirt 3
An àireamh iomlan de loidhnichean de chòd le notaichean

Seo tar-shealladh air prìomh fheartan nan rudan a rinn sinn gus an àireamh de chòd le notaichean àrdachadh ann an Dropbox:

Neart notaichean. Mean air mhean mheudaich sinn na riatanasan airson cho cruaidh sa tha còd ùr a chomharrachadh. Thòisich sinn le molaidhean linter a bha a’ moladh notaichean a chur ri faidhlichean anns an robh cuid de notaichean mu thràth. Feumaidh sinn a-nis notaichean seòrsa ann am faidhlichean Python ùra agus anns a’ mhòr-chuid de na faidhlichean a th’ ann mar-thà.

A’ sgrìobhadh aithisgean. Bidh sinn a’ cur aithisgean gu sgiobaidhean gach seachdain air an ìre de thaidhpeadh sa chòd aca agus a’ toirt seachad comhairle air dè bu chòir a bhith air a chomharrachadh an toiseach.

Popularization de mypy. Bidh sinn a’ bruidhinn mu dheidhinn mypy aig tachartasan agus a’ bruidhinn ri sgiobaidhean gus an cuideachadh gus tòiseachadh le notaichean seòrsa.

cunntasan-bheachd. Bidh sinn a’ dèanamh sgrùdaidhean luchd-cleachdaidh bho àm gu àm gus prìomh dhuilgheadasan a chomharrachadh. Tha sinn deiseil airson a dhol gu math fada ann a bhith a’ fuasgladh nan duilgheadasan sin (eadhon a’ cruthachadh cànan ùr gus mypy a luathachadh!).

Coileanadh. Tha sinn air coileanadh mypy a leasachadh gu mòr le bhith a’ cleachdadh an daemon agus mypyc. Chaidh seo a dhèanamh gus na mì-ghoireasachd a thig am bàrr tron ​​​​phròiseas notaichean a rèiteachadh, agus gus a bhith comasach air obrachadh le àireamh mhòr de chòd.

Amalachadh le luchd-deasachaidh. Tha sinn air innealan a thogail gus taic a thoirt do ruith mypy ann an luchd-deasachaidh a tha mòr-chòrdte air Dropbox. Tha seo a’ toirt a-steach PyCharm, Vim agus Còd VS. Rinn seo nas sìmplidhe gu mòr air a’ phròiseas airson a bhith ag ainmeachadh a’ chòd agus a’ sgrùdadh a ghnìomhachd. Tha an seòrsa gnìomh seo cumanta nuair a thathar a’ comharrachadh còd a tha ann mu thràth.

Mion-sgrùdadh statach. Chruthaich sinn inneal gus ainmean gnìomh a lorg a’ cleachdadh innealan sgrùdaidh statach. Chan urrainn don inneal seo obrachadh ach ann an suidheachaidhean gu math sìmplidh, ach chuidich e sinn le bhith ag àrdachadh ar còmhdach seòrsa còd gun mòran oidhirp.

Taic do leabharlannan treas-phàrtaidh. Bidh mòran de na pròiseactan againn a’ cleachdadh an inneal SQLAlchemy. Bidh e a’ gabhail brath air comasan fiùghantach Python nach urrainn seòrsaichean PEP 484 a mhodail gu dìreach. Chruthaich sinn, a rèir PEP 561, am faidhle stub co-fhreagarrach agus sgrìobh sinn plugan airson mypy (stòr fosgailte), a leasaicheas taic SQLAlchemy.

Duilgheadasan a choinnich sinn

Cha robh an t-slighe gu 4 millean loidhne de chòd clò-sgrìobhte a-riamh furasta dhuinn. Air an t-slighe seo thachair sinn ri mòran tuill agus rinn sinn grunn mhearachdan. Seo cuid de na duilgheadasan a choinnich sinn. Tha sinn an dòchas gun cuidich innse mun deidhinn daoine eile gus duilgheadasan coltach ris a sheachnadh.

Faidhlichean a dhìth. Thòisich sinn ar n-obair le bhith a’ sgrùdadh ach glè bheag de fhaidhlichean. Cha deach sgrùdadh a dhèanamh air rud sam bith nach robh sna faidhlichean seo. Chaidh faidhlichean a chur ris an liosta sganaidh nuair a nochd a’ chiad notaichean annta. Ma chaidh rudeigin a thoirt a-steach bho mhodal a tha taobh a-muigh raon dearbhaidh, bha sinn a’ bruidhinn mu bhith ag obair le luachan mar Any, nach deach a dhearbhadh idir. Dh'adhbhraich seo call mòr ann an cruinneas clò-sgrìobhaidh, gu sònraichte anns na tràth ìrean de dh'imrich. Tha an dòigh-obrach seo air obrachadh gu math iongantach gu ruige seo, ged a tha suidheachadh àbhaisteach ann gu bheil cur ri faidhlichean ri farsaingeachd an ath-bhreithneachaidh a’ nochdadh duilgheadasan ann am pàirtean eile den bhun-chòd. Anns a 'chùis as miosa, nuair a chaidh dà raon còd iomallach a chur còmhla, anns an robh, gu neo-eisimeileach bho chèile, seòrsaichean air an sgrùdadh mar-thà, thionndaidh e a-mach nach robh na seòrsaichean de na raointean sin co-chòrdail ri chèile. Dh'adhbhraich seo gu robh feum air mòran atharrachaidhean a dhèanamh air na notaichean. A’ coimhead air ais a-nis, tha sinn a’ tuigsinn gum bu chòir dhuinn a bhith air prìomh mhodalan leabharlainn a chuir ri raon sgrùdaidh seòrsa mypy nas luaithe. Dhèanadh seo ar n-obair tòrr nas ro-innseach.

A’ comharrachadh an t-seann chòd. Nuair a thòisich sinn, bha timcheall air 4 millean loidhne de chòd Python againn. Bha e soilleir nach b’ e obair fhurasta a bh’ ann a bhith ag ainmeachadh a’ chòd seo gu lèir. Tha sinn air inneal ris an canar PyAnnotate a chruthachadh as urrainn fiosrachadh seòrsa a chruinneachadh fhad ‘s a bhios deuchainnean a’ ruith agus as urrainn notaichean seòrsa a chur ris a’ chòd agad stèidhichte air an fhiosrachadh a chaidh a chruinneachadh. Ach, chan eil sinn air mothachadh gu bheil gabhail ris an inneal seo gu sònraichte farsaing. Bha cruinneachadh fiosrachaidh mu sheòrsa slaodach, agus bha feum air mòran deasachaidhean làimhe gu tric airson notaichean a ghineadh gu fèin-ghluasadach. Bha sinn a’ smaoineachadh mu bhith a’ ruith an inneal seo gu fèin-ghluasadach a h-uile uair a bhios sinn ag ath-sgrùdadh còd, no a’ cruinneachadh fiosrachadh seòrsa stèidhichte air mion-sgrùdadh air àireamh bheag de fhìor iarrtasan lìonra, ach chuir sinn romhainn gun a bhith leis gu robh an dàrna dòigh-obrach ro chunnartach.

Mar thoradh air an sin, faodar a thoirt fa-near gun deach a’ mhòr-chuid den chòd a chomharrachadh le làimh leis na sealbhadairean aige. Gus am pròiseas seo a stiùireadh san t-slighe cheart, bidh sinn ag ullachadh aithisgean air modalan agus gnìomhan air leth cudromach a dh’ fheumar a chomharrachadh. Mar eisimpleir, tha e cudromach notaichean seòrsa a thoirt seachad airson modal leabharlainn a thathas a’ cleachdadh ann an ceudan de dh’àiteachan. Ach chan eil e cho cudromach a bhith a’ comharrachadh seann sheirbheis a thathas a’ gabhail seirbheis ùr tuilleadh. Tha sinn cuideachd a’ feuchainn le bhith a’ cleachdadh mion-sgrùdadh statach gus notaichean seòrsa a ghineadh airson còd dìleab.

In-mhalairt cearcallach. Gu h-àrd, bhruidhinn mi mu in-mhalairt baidhsagal (na “tangles eisimeileachd”), agus bha sin ga dhèanamh duilich mypy a luathachadh. B’ fheudar dhuinn cuideachd a bhith ag obair gu cruaidh gus toirt air mypy taic a thoirt do gach seòrsa gnàthasan-cainnte a tha air adhbhrachadh leis na h-in-mhalairt cearcallach sin. O chionn ghoirid chuir sinn crìoch air pròiseact ath-dhealbhachaidh siostam mòr a shocraich a’ mhòr-chuid de chùisean mypy a thaobh in-mhalairt cruinn. Thàinig na duilgheadasan sin gu dearbh bho làithean glè thràth a’ phròiseict, air ais bho Alore, an cànan foghlaim air an robh am pròiseact mypy ag amas bho thùs. Tha co-chòrdadh Alore ga dhèanamh furasta duilgheadasan fhuasgladh le òrdughan in-mhalairt cearcallach. Tha mypy an latha an-diugh air cuid de chuingealachaidhean fhaighinn bho bhith ga bhuileachadh nas tràithe, le inntinn shìmplidh (a bha gu math iomchaidh airson Alore). Tha Python ga dhèanamh duilich a bhith ag obair le in-mhalairt cruinn, gu h-àraidh leis gu bheil abairtean dà-sheaghach. Mar eisimpleir, faodaidh gnìomhachd sònrachaidh a bhith a’ mìneachadh seòrsa eile alias. Chan urrainn dha Mypy an-còmhnaidh rudan mar seo a lorg gus am bi a’ mhòr-chuid den lùb in-mhalairt air a phròiseasadh. Cha robh teagamh sam bith ann an Alore. Faodaidh droch cho-dhùnaidhean a chaidh a dhèanamh anns na tràth ìrean de leasachadh siostam iongnadh mì-thlachdmhor a thoirt don phrògramadair grunn bhliadhnaichean às deidh sin.

Toraidhean: an t-slighe gu 5 millean loidhne de chòd agus sealladh ùr

Tha am pròiseact mypy air a thighinn air slighe fhada - bho prototypes tràth gu siostam a bhios a’ cumail smachd air 4 millean loidhne de sheòrsan còd toraidh. Mar a thàinig mypy air adhart, chaidh molaidhean seòrsa Python a dhèanamh àbhaisteach. An-diugh, tha eag-shiostam cumhachdach air leasachadh timcheall air a bhith a’ taipeadh còd Python. Tha àite ann airson taic leabharlainn, tha innealan taice ann airson IDEn agus luchd-deasachaidh, tha grunn shiostaman smachd ann, agus tha na buannachdan agus na h-eas-bhuannachdan aig gach fear dhiubh.

Eadhon ged a tha sgrùdadh seòrsa mar-thà air a thoirt seachad aig Dropbox, tha mi a ’creidsinn gu bheil sinn fhathast anns na làithean tràtha de bhith a’ taipeadh còd Python. Tha mi a’ smaoineachadh gun lean teicneòlasan sgrùdaidh seòrsa a’ fàs agus a’ leasachadh.

Mura h-eil thu air sgrùdadh seòrsa a chleachdadh sa phròiseact Python mòr agad mu thràth, biodh fios agad gur e àm fìor mhath a th’ ann a-nis airson tòiseachadh air gluasad gu clò-sgrìobhadh statach. Tha mi air bruidhinn ris an fheadhainn a rinn an aon eadar-ghluasad. Cha do ghabh gin dhiubh aithreachas air. Tha sgrùdadh seòrsa a’ fàgail Python na chànan a tha fada nas freagarraiche airson pròiseactan mòra a leasachadh na “Python cunbhalach.”

Luchd leughaidh! Am bi thu a’ cleachdadh sgrùdadh seòrsa anns na pròiseactan Python agad?

An t-slighe gu bhith a’ sgrìobhadh 4 millean loidhne de chòd Python. Pàirt 3
An t-slighe gu bhith a’ sgrìobhadh 4 millean loidhne de chòd Python. Pàirt 3

Source: www.habr.com

Cuir beachd ann