Ny lalana mankany amin'ny fanoratana sora-baventy 4 tapitrisa andalana Python. Fizarana 2

Androany izahay dia mamoaka ny ampahany faharoa amin'ny fandikan-teny momba ny fomba nandaminan'i Dropbox ny fifehezana karazana ho an'ny andalana an-tapitrisany maro amin'ny kaody Python.

Ny lalana mankany amin'ny fanoratana sora-baventy 4 tapitrisa andalana Python. Fizarana 2

β†’ Vakio ny ampahany voalohany

Fanohanana karazana ofisialy (PEP 484)

Nanao andrana matotra voalohany izahay niaraka tamin'ny mypy tao amin'ny Dropbox nandritra ny Herinandron'ny Hack 2014. Herinandron'ny Hack dia hetsika iray herinandro karakarain'ny Dropbox. Mandritra izany fotoana izany, ny mpiasa dia afaka miasa amin'izay tiany! Ny sasany amin'ireo tetikasa teknolojia malaza indrindra ao Dropbox dia nanomboka tamin'ny hetsika tahaka ireny. Vokatr'ity fanandramana ity dia nanatsoaka hevitra izahay fa ny mypy dia toa mampanantena, na dia tsy mbola vonona amin'ny fampiasana miparitaka aza ny tetikasa.

Tamin'izany fotoana izany, teo amin'ny rivotra ny hevitra momba ny fanamafisam-peo karazana Python. Araka ny nolazaiko, hatramin'ny Python 3.0 dia azo atao ny mampiasa karazana annotation ho an'ny asa, fa ireo dia fanehoan-kevitra tsy misy dikany, tsy misy syntax sy semantika voafaritra. Nandritra ny fanatanterahana ny programa dia tsy noraharahiana fotsiny ireo fanamarihana ireo. Taorian'ny Herinandro Hack, dia nanomboka niasa tamin'ny fanamafisana ny semantika izahay. Io asa io no nitarika ny fisehoana PEP 484 (Guido van Rossum, Łukasz Langa ary izaho dia niara-niasa tamin'ity antontan-taratasy ity).

Azo jerena amin'ny lafiny roa ny antony manosika antsika. Voalohany, nanantena izahay fa ny tontolo iainana Python iray manontolo dia afaka mampiasa fomba fanao mahazatra amin'ny fampiasana karazana toro-hevitra (teny iray ampiasaina amin'ny Python mitovy amin'ny "annotation karazana"). Izany, raha jerena ny loza mety hitranga, dia ho tsara kokoa noho ny fampiasana fomba fiasa maro tsy mifanaraka. Faharoa, te hiresaka ampahibemaso momba ny mekanika fanoratana karazana miaraka amin'ny mpikambana maro ao amin'ny vondrom-piarahamonina Python izahay. Ity faniriana ity dia ampahany amin'ny hoe tsy te hitovy amin'ny β€œmpivadi-pinoana” isika amin'ny hevitra fototra amin'ny fiteny eo imason'ny vahoaka betsaka amin'ny programa Python. Fitenim-pitenenana mavitrika izy io, fantatra amin'ny anarana hoe "dock type". Ao amin'ny fiaraha-monina, tany am-piandohana, ny fihetsika somary mampiahiahy manoloana ny hevitra momba ny fanoratana static dia tsy afaka ny tsy hitsangana. Saingy nihena ihany io fihetseham-po io tamin'ny farany rehefa nazava fa tsy voatery ny fanoratana static (ary rehefa fantatry ny olona fa tena ilaina izany).

Ny syntax karazany izay noraisina tamin'ny farany dia nitovitovy tamin'ny tohanan'ny mypy tamin'izany fotoana izany. PEP 484 dia navoaka tamin'ny Python 3.5 tamin'ny 2015. Ny Python dia tsy fiteny dynamique type intsony. Tiako ny mieritreritra ity hetsika ity ho toy ny dingana lehibe amin'ny tantaran'ny Python.

Fiantombohan'ny fifindra-monina

Tamin'ny faran'ny taona 2015, Dropbox dia namorona ekipa misy olona telo hiasa amin'ny mypy. Anisan'izany i Guido van Rossum, Greg Price ary David Fisher. Nanomboka tamin'izay fotoana izay dia nanomboka nivoatra haingana dia haingana ny toe-draharaha. Ny sakana voalohany amin'ny fitomboan'ny mypy dia ny fampisehoana. Araka ny nosoratako etsy ambony, tamin'ny andro voalohan'ny tetikasa dia nieritreritra ny handika ny fampiharana mypy amin'ny C aho, saingy io hevitra io dia tsy hita ao anaty lisitra amin'izao fotoana izao. Nifikitra tamin'ny fampandehanana ny rafitra izahay tamin'ny fampiasana ny mpandika teny CPython, izay tsy dia haingana loatra amin'ny fitaovana toy ny mypy. (Ny tetikasa PyPy, fampiharana Python hafa miaraka amin'ny compiler JIT, dia tsy nanampy anay koa.)

Soa ihany fa nisy fanatsarana algorithmika tonga nanampy anay teto. Ny "accelerator" matanjaka voalohany dia ny fampiharana ny fisavana incremental. Tsotra ny hevitra tao ambadik'io fanatsarana io: raha tsy niova ny fiankinan'ny mΓ΄dΓ΄ly rehetra hatramin'ny nisian'ny mypy teo aloha, dia afaka mampiasa ny angon-drakitra voatahiry nandritra ny hazakazaka teo aloha isika rehefa miasa miaraka amin'ny fiankinan-doha. Tsy maintsy nanao fanaraha-maso karazana amin'ireo rakitra novaina sy ireo rakitra miankina amin'izy ireo fotsiny izahay. Nandeha lavidavitra kokoa aza ny Mypy: raha tsy miova ny interface ivelany amin'ny module iray, dia nihevitra i mypy fa tsy mila jerena indray ny maody hafa nanafatra ity module ity.

Nanampy betsaka anay ny fisavana incremental rehefa nanamarika ny kaody efa misy. Ny tiana holazaina dia ity dingana ity dia matetika misy fampandehanana mypy maro be rehefa ampidirina tsikelikely amin'ny kaody ny fanamarihana ary hatsaraina tsikelikely. Ny fihazakazahana voalohany amin'ny mypy dia mbola niadana be satria nanana fiankinan-doha be dia be izy. Avy eo, mba hanatsarana ny toe-javatra, dia nampihatra mekanika caching lavitra. Raha hitan'i mypy fa mety ho lany andro ny cache eo an-toerana, dia alainy avy ao amin'ny tahiry foibe ny sary cache amin'izao fotoana izao ho an'ny codebase manontolo. Avy eo dia manao fisavana incremental amin'ny fampiasana ity snapshot ity. Izany dia nitondra anay dingana iray lehibe kokoa amin'ny fampitomboana ny fahombiazan'ny mypy.

Ity dia vanim-potoanan'ny fandraisana haingana sy voajanahary ny fanamarinana karazana tao amin'ny Dropbox. Tamin'ny faran'ny taona 2016 dia efa manana andalana 420000 eo ho eo amin'ny kaody Python misy fanamarihana karazana. Mpampiasa maro no nazoto tamin'ny fanamarinana karazana. Nihabetsaka ny ekipa fampandrosoana nampiasa Dropbox mypy.

Toa tsara daholo ny zava-drehetra tamin'izany, saingy mbola be dia be ny tokony hatao. Nanomboka nanao fanadihadiana ara-potoana ny mpampiasa anatiny izahay mba hamantarana ireo faritra misy olana amin'ny tetikasa ary hahatakarana izay olana tokony hovahana aloha (mbola ampiasaina ao amin'ny orinasa izany fomba fanao izany ankehitriny). Ny zava-dehibe indrindra, araka ny nazava, dia asa roa. Voalohany, mila karazana fandrakofana bebe kokoa momba ny kaody izahay, faharoa, mila mypy izahay mba hiasa haingana kokoa. Nazava tanteraka fa mbola tsy vita tanteraka ny asa ataonay hanafainganana ny mypy sy hampihatra izany amin'ny tetikasan'ny orinasa. Izahay, mahafantatra tanteraka ny maha-zava-dehibe an'ireo asa roa ireo, dia nanapa-kevitra ny hamaha azy ireo.

Famokarana bebe kokoa!

Ny fisavana fanampiny dia nahatonga ny mypy haingana kokoa, saingy mbola tsy ampy ny fitaovana. Naharitra iray minitra teo ho eo ny fisavana fanampiny maro. Fanafarana cyclical no anton'izany. Mety tsy hahagaga ny olona rehetra izay niasa tamin'ny codebases lehibe nosoratana tamin'ny Python. Nanana andiana mody an-jatony izahay, izay samy nanafatra ankolaka ny hafa rehetra. Raha misy rakitra ao amin'ny loop fanafarana niova, mypy dia tsy maintsy nikarakara ny rakitra rehetra tao amin'io loop io, ary matetika ny modules rehetra nanafatra maody avy amin'io loop io. Ny tsingerina iray toy izany dia ny "fiankinan-doha" malaza izay niteraka olana be tao amin'ny Dropbox. Raha vantany vao nisy mody an-jatony io rafitra io, raha nafarana, mivantana na ankolaka, fitsapana maro, dia nampiasaina tamin'ny fehezan-dalΓ na famokarana.

Noheverinay ny mety hisian'ny fiankinan-doha amin'ny boriborintany "manalavitra", saingy tsy nanana fitaovana hanaovana izany izahay. Be loatra ny kaody tsy fantatray. Vokatr'izany dia nahita fomba hafa izahay. Nanapa-kevitra ny hanao asa haingana ny mypy na dia eo aza ny fisian'ny "fiankinan-doha". Nahatratra io tanjona io izahay tamin'ny fampiasana daemon mypy. Ny daemon dia fizotry ny mpizara izay mametraka endri-javatra roa mahaliana. Voalohany, mitahiry fampahalalana momba ny codebase manontolo ao anaty fitadidiana. Midika izany fa isaky ny mihazakazaka mypy ianao dia tsy mila mampiditra angon-drakitra voatahiry mifandraika amin'ny fiankinan-doha nafarana an'arivony. Faharoa, izy dia mandinika amim-pitandremana, eo amin'ny ambaratongan'ny singa ara-drafitra kely, ny fiankinan-doha eo amin'ny asa sy ny sampana hafa. Ohatra, raha ny asa foo miantso asa bar, dia misy fiankinan-doha foo ΠΎΡ‚ bar. Rehefa miova ny rakitra iray, ny daemon aloha, mitokana, dia ny rakitra niova ihany no karakaraina. Avy eo dia mijery ireo fiovana hita ety ivelany amin'io rakitra io, toy ny sonia fiasana niova. Ny daemon dia mampiasa fampahalalana amin'ny antsipiriany momba ny fanafarana fotsiny mba hanamarinana indroa ireo fiasa izay tena mampiasa ny fiasa novaina. Amin'ny ankapobeny, miaraka amin'ity fomba fiasa ity dia tsy maintsy manamarina fiasa vitsivitsy ianao.

Tsy mora ny fampiharana izany rehetra izany, satria ny fampiharana mypy tany am-boalohany dia nifantoka tanteraka tamin'ny fanodinana rakitra iray isaky ny mandeha. Tsy maintsy niatrika toe-javatra maro sisintany izahay, izay nitaky fisavana miverimberina rehefa nisy zavatra niova tao amin'ny code. Ohatra, mitranga izany rehefa omena kilasy fototra vaovao ny kilasy iray. Rehefa nanao izay tiany izahay dia afaka nahena ho segondra vitsy monja ny fotoana hanatanterahana ny ankamaroan'ny fisavana. Toa fandresena lehibe ho anay izany.

Mbola betsaka kokoa ny vokatra!

Miaraka amin'ny caching lavitr'ezaka noresahiko tetsy ambony, ny daemon mypy dia saika namaha tanteraka ireo olana mipoitra rehefa manao fanaraha-maso karazana matetika ny programmer iray, manao fanovana amin'ny rakitra vitsivitsy. Na izany aza, ny fahombiazan'ny rafitra amin'ny tranga fampiasana kely indrindra dia mbola lavitra ny tsara indrindra. Mety haharitra 15 minitra ny fanombohana madio mypy. Ary izany dia mihoatra lavitra noho izay mety ho nahafaly anay. Isan-kerinandro dia niharatsy ny toe-draharaha satria nanohy nanoratra kaody vaovao ireo mpandrindra ary nanampy fanamarihana amin'ny kaody efa misy. Mbola noana zava-bita bebe kokoa ireo mpampiasa anay, saingy faly izahay nihaona tamin'izy ireo antsasa-dalana.

Nanapa-kevitra ny hiverina amin'ny iray amin'ireo hevitra teo aloha momba ny mypy izahay. Izany hoe, hanova ny kaody Python ho kaody C. Ny fanandramana tamin'ny Cython (rafitra ahafahanao mandika kaody voasoratra amin'ny Python ho kaody C) dia tsy nanome anay haingana hita maso, ka nanapa-kevitra ny hamerina indray ny hevitra hanoratra ny mpanangona anay manokana izahay. Satria ny codebase mypy (nosoratana amin'ny Python) dia efa nahitana ny karazana fanamarihana ilaina rehetra, dia nihevitra izahay fa mendrika ny manandrana mampiasa ireo fanamarihana ireo mba hanafainganana ny rafitra. Namorona prototype haingana aho hitsapana an'io hevitra io. Nampiseho fitomboana mihoatra ny 10 heny amin'ny zava-bita amin'ny mari-pamantarana micro isan-karazany. Ny hevitray dia ny hanangona mody Python amin'ny maody C amin'ny fampiasana Cython, ary hamadika annotation karazana ho fisavana karazana run-time (matetika ny fanondroana karazana dia tsy noraharahiana amin'ny fotoana fandehanana ary ampiasain'ny rafitra fanamarinana karazana). Nikasa ny handika ny fampiharana mypy avy amin'ny Python ho amin'ny fiteny iray izay natao ho soratana amin'ny fomba statika izahay, izay mety hitovy amin'ny Python (ary, amin'ny ankapobeny, miasa). (Ity karazana fifindra-monina amin'ny fiteny ity dia lasa fomban-drazana amin'ny tetikasa mypy. Ny fampiharana mypy tany am-boalohany dia nosoratana tamin'ny teny Alore, avy eo nisy syntactic hybrid an'ny Java sy Python).

Ny fifantohana amin'ny API fanitarana CPython dia zava-dehibe mba tsy hahavery ny fahaiza-mitantana tetikasa. Tsy nila nampihatra milina virtoaly na tranomboky ilain'ny mypy izahay. Ho fanampin'izay, mbola afaka miditra amin'ny tontolo iainana Python manontolo sy ny fitaovana rehetra izahay (toy ny pytest). Midika izany fa afaka manohy mampiasa kaody Python voadika izahay mandritra ny fampandrosoana, ahafahantsika manohy miasa miaraka amin'ny lamina haingana dia haingana amin'ny fanovana kaody sy fitsapana azy, fa tsy miandry ny fanangonana ny code. Hoatran’ny hoe nanao asa tsara izahay nipetraka teo amin’ny seza roa, raha lazaina, ary tianay izany.

Ilay compiler, izay nantsoinay hoe mypyc (satria mampiasa mypy ho toy ny fiafaran'ny famakafakana karazana), dia nanjary tetikasa tena nahomby. Amin'ny ankapobeny, nahatratra 4x teo ho eo ny hafainganam-pandeha ho an'ny hazakazaka mypy matetika tsy misy cache. Ny fampivoarana ny fototry ny tetikasa mypyc dia nitondra ekipa kelin'i Michael Sullivan, Ivan Levkivsky, Hugh Hahn, ary izaho teo amin'ny 4 volana teo ho eo. Ity habetsaky ny asa ity dia kely kokoa noho izay nilaina hamerenana ny mypy, ohatra, amin'ny C++ na Go. Ary tsy maintsy nanao fanovana vitsy kokoa tamin'ilay tetikasa izahay noho ny tsy maintsy nataonay rehefa nanoratra azy tamin'ny fiteny hafa. Nanantena ihany koa izahay fa afaka mitondra ny mypyc ho amin'ny ambaratonga izay azon'ny mpandrindra Dropbox hafa hampiasa azy io mba hanangonana sy hanafaingana ny kaody.

Mba hahatratrarana io haavon'ny fahombiazana io dia tsy maintsy nampihatra vahaolana ara-teknika mahaliana izahay. Noho izany, ny compiler dia afaka manafaingana ny asa maro amin'ny alalan'ny fampiasana haingana, ambany-ambaratonga C constructs, ohatra, natambatra ny asa antso dia nadika ho C fonction call. Ary ny antso toy izany dia haingana kokoa noho ny fiantsoana asa voadika. Ny asa sasany, toy ny fitadiavana rakibolana, dia mbola tafiditra amin'ny fampiasana antso C-API mahazatra avy amin'ny CPython, izay somary haingana kokoa rehefa natambatra. Afaka nanafoana ny enta-mavesatra fanampiny amin'ny rafitra noforonin'ny fandikana, fa amin'ity tranga ity dia tsy nanome tombony kely fotsiny amin'ny lafiny fampisehoana.

Mba hamantarana ireo hetsika "miadana" mahazatra indrindra, dia nanao profiling code izahay. Miaraka amin'ity angon-drakitra ity, dia nanandrana nanamboatra ny mypyc izahay mba hamokarana kaody C haingana kokoa ho an'ny asa toy izany, na manoratra indray ny code Python mifanaraka amin'izany amin'ny fampiasana asa haingana kokoa (ary indraindray izahay dia tsy nanana vahaolana tsotra ho an'izany na olana hafa) . Ny fanoratana indray ny kaody Python dia matetika no vahaolana mora kokoa amin'ny olana noho ny fananana ny compiler ho azy hanao fanovana mitovy. Tao anatin'ny fotoana maharitra, te-hanao automatique ny ankamaroan'ireo fanovana ireo izahay, saingy tamin'izany fotoana izany dia nifantoka tamin'ny fanafainganana ny mypy izahay tamin'ny ezaka kely. Ary amin'ny firosoana mankany amin'io tanjona io dia nanapaka zoro maromaro izahay.

Hanohy ...

Ry mpamaky malala! Inona no tsapanao momba ny tetikasa mypy rehefa nahafantatra ny fisiany ianao?

Ny lalana mankany amin'ny fanoratana sora-baventy 4 tapitrisa andalana Python. Fizarana 2
Ny lalana mankany amin'ny fanoratana sora-baventy 4 tapitrisa andalana Python. Fizarana 2

Source: www.habr.com

Add a comment