Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 1

Kajeno re u hlokomelisa karolo ea pele ea phetolelo ea litaba tse mabapi le hore na Dropbox e sebetsana joang le taolo ea mofuta oa khoutu ea Python.

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 1

Dropbox e ngola haholo ho Python. Ke puo eo re e sebelisang haholo ho pharaletseng, bakeng sa lits'ebeletso tsa morao-rao le lits'ebetso tsa bareki ba komporong. Re boetse re sebelisa Go, TypeScript le Rust haholo, empa Python ke puo ea rona e ka sehloohong. Ha re nahana ka boholo ba rona, 'me re bua ka mela e limilione ea khoutu ea Python, ho ile ha fumaneha hore ho thaepa ka matla ha khoutu e joalo ho thatafatsa kutloisiso ea eona ho sa hlokahale mme ho ile ha qala ho ama tlhahiso ea basebetsi haholo. Ho fokotsa bothata bona, re se re qalile ho fetolela khoutu ea rona butle-butle ho hlahloba mofuta o tsitsitseng re sebelisa mypy. Mohlomong ena ke mokhoa o tsebahalang ka ho fetesisa oa mofuta o ikemetseng oa Python. Mypy ke projeke ea mohloli o bulehileng, baetsi ba eona ba ka sehloohong ba sebetsa ho Dropbox.

Dropbox e ne e le e 'ngoe ea lik'hamphani tsa pele tsa ho kenya ts'ebetsong ho hlahloba mofuta o tsitsitseng ka khoutu ea Python ka tekanyo ena. Mypy e sebelisoa mererong e likete matsatsing ana. Sesebelisoa sena ka makhetlo a mangata, joalo ka ha ba re, "lekoa ntoeng." Re tsamaile hole hore re fihle moo re leng teng. Ha re ntse re le tseleng, ho ne ho e-na le mesebetsi e mengata e sa atleheng le liteko tse hlōlehileng. Poso ena e akaretsa nalane ea ho hlahloba mofuta o sa fetoheng ho Python, ho tloha qalong ea eona e thata e le karolo ea morero oa ka oa ho etsa lipatlisiso, ho fihlela kajeno, ha tlhahlobo ea mofuta le ho fana ka maikutlo e se e le ntho e tloaelehileng ho bahlahisi ba bangata ba ngolang Python. Hona joale mekhoa ena e tšehetsoa ke lisebelisoa tse ngata tse kang li-IDE le li-code analyzers.

Bala karolo ea bobeli

Ke hobane'ng ha ho hlokahala tlhahlobo ea mofuta?

Haeba o kile oa sebelisa Python e thaetsoeng ka matla, u kanna oa ba le pherekano ea hore na ke hobaneng ha ho bile le moferefere hakana mabapi le ho thaepa ha maemo le mypy morao tjena. Kapa mohlomong u rata Python hantle ka lebaka la ho thaepa ha eona ka matla, 'me se etsahalang sea u khopisa. Senotlolo sa bohlokoa ba ho thaepa ka mokhoa o tsitsitseng ke boholo ba litharollo: ha morero oa hau o le moholo, ha o itšetleha haholo ka ho thaepa ka mokhoa o tsitsitseng, 'me qetellong, o hloka ho feta.

A re re morero o itseng o fihlile boholo ba mela e mashome a likete, 'me ho ile ha fumaneha hore baetsi ba mananeo ba' maloa ba ntse ba sebetsa ho eona. Ha re sheba morero o ts'oanang, ho latela boiphihlelo ba rona, re ka bolela hore ho utloisisa khoutu ea eona e tla ba senotlolo sa ho boloka bahlahisi ba atleha. Ntle le litlhaloso tsa mofuta, ho ka ba thata ho fumana, mohlala, hore na ke mabaka afe a lokelang ho fetisa tšebetsong, kapa hore na tšebetso e ka khutlisa mefuta efe. Mona ke lipotso tse tloaelehileng tseo hangata ho leng thata ho li araba ntle le ho sebelisa litlhaloso tsa mofuta:

  • Na mosebetsi ona o ka khutla None?
  • Khang ee e lokela ho ba eng? items?
  • Sebopeho sa mofuta ke sefe id: int ke, str, kapa mohlomong mofuta o itseng?
  • Na khang ee e lokela ho ba lethathamo? Na hoa khoneha ho fetisetsa tuple ho eona?

Haeba u sheba mofuta o latelang oa mantsoe a qotsitsoeng 'me u leka ho araba lipotso tse tšoanang, ho bonahala eka ona ke mosebetsi o bonolo ka ho fetisisa:

class Resource:
    id: bytes
    ...
    def read_metadata(self, 
                      items: Sequence[str]) -> Dict[str, MetadataItem]:
        ...

  • read_metadata ha e khutle None, kaha mofuta oa ho khutla ha o joalo Optional[…].
  • khang items ke tatellano ea mela. E ke ke ea phetoa ka tšohanyetso.
  • Hlahisa id ke letoto la li-byte.

Lefatšeng le letle, motho o ne a ka lebella hore lintho tse poteletseng tse joalo li tla hlalosoa litokomaneng tse hahiloeng (docstring). Empa phihlelo e fana ka mehlala e mengata ea 'nete ea hore litokomane tse joalo hangata ha li hlokomeloe ka khoutu eo u lokelang ho sebetsa le eona. Esita le haeba litokomane tse joalo li le teng ka khoutu, motho a ke ke a itšetleha ka ho nepahala ha eona ka ho feletseng. Litokomane tsena li ka ba tse sa hlakang, tse sa nepahaleng, 'me tsa bulehela ho se utloisisane. Lihlopheng tse kholo kapa merero e meholo, bothata bona bo ka ba bobe haholo.

Le hoja Python e ipabola ka mekhahlelo ea pele kapa e bohareng ea merero, ka nako e 'ngoe merero e atlehileng le lik'hamphani tse sebelisang Python li ka tobana le potso ea bohlokoa: "Na re lokela ho ngola ntho e' ngoe le e 'ngoe hape ka puo e thaepileng?".

Mefuta ea ho hlahloba mefuta e kang mypy e rarolla bothata bo ka holimo ka ho fa moqapi puo e hlophisitsoeng bakeng sa ho hlalosa mefuta, le ka ho hlahloba liphatlalatso tsa mofuta oo li lumellana le ts'ebetsong ea lenaneo ('me, ka boikhethelo, ka ho hlahloba boteng ba tsona). Ka kakaretso, re ka re litsamaiso tsena li re fa ntho e kang litokomane tse hlahlobiloeng ka hloko.

Tšebeliso ea litsamaiso tse joalo e na le melemo e meng, 'me e se e ntse e se e sa reng letho:

  • Sistimi ea ho hlahloba mofuta o ka bona liphoso tse nyane (mme eseng tse nyane haholo). Mohlala o tloaelehileng ke ha ba lebala ho sebetsana le boleng None kapa boemo bo bong bo ikgethang.
  • Code refactoring e nolofalitsoe haholo hobane mokhoa oa ho hlahloba mofuta hangata o nepahetse haholo mabapi le hore na ke khoutu efe e lokelang ho fetoloa. Ka nako e ts'oanang, ha ho hlokahale hore re tšepe hore 100% e fana ka tšireletso ea khoutu ka liteko, tseo, leha ho le joalo, hangata li ke keng tsa khoneha. Ha ho hlokahale hore re nyarele botebong ba seketsoana ho fumana sesosa sa bothata.
  • Le mererong e meholo, mypy hangata e ka hlahloba mofuta o felletseng ka karoloana ea motsotsoana. 'Me ho etsoa ha liteko hangata ho nka metsotsoana e mashome kapa esita le metsotso. Sistimi ea ho hlahloba mofuta o fa mohlophisi maikutlo hang hang mme e mo lumella ho etsa mosebetsi oa hae kapele. Ha a sa hloka ho ngola ka mokhoa o fokolang le ka thata ho boloka liteko tsa yuniti tse nkelang mekhatlo ea 'nete sebaka ka litšeho le lipache ho fumana sephetho sa tlhahlobo ea khoutu kapele.

Li-IDE le bahlophisi ba kang PyCharm kapa Visual Studio Code ba sebelisa matla a litlhaloso tsa mofuta oa mofuta ho fa bahlahisi ka ho phethoa ha khoutu, ho totobatsa liphoso, le ho tšehetsa meaho ea lipuo tse sebelisoang hangata. Mme ena ke e meng ya melemo ya ho thaepa. Bakeng sa baetsi ba mananeo, sena sohle ke khang e ka sehloohong e emelang ho thaepa. Ena ke ntho e ruisang molemo hang ka mor'a ts'ebetsong. Nyeoe ena ea ts'ebeliso ea mefuta ha e hloke mofuta o fapaneng oa ho hlahloba mofuta joalo ka mypy, leha ho lokela ho hlokomeloa hore mypy e thusa ho boloka litlatsetso tsa mofuta o tsamaellana le khoutu.

Semelo sa mypy

Nalane ea mypy e qalile UK, Cambridge, lilemo tse 'maloa pele ke kenella Dropbox. Ke bile le seabo, e le karolo ea liphuputso tsa ka tsa bongaka, ho kopantseng lipuo tse thaepang ka lipalo le tse matla. Ke ile ka bululeloa ke sengoloa se buang ka ho thaepa ho eketsehileng ka Jeremy Siek le Walid Taha, le morero oa Typed Racket. Ke lekile ho fumana mekhoa ea ho sebelisa puo e tšoanang ea mananeo bakeng sa merero e fapaneng - ho tloha ho lingoloa tse nyane ho isa ho metheo ea khoutu e nang le mela e limilione tse ngata. Ka nako e ts'oanang, ke ne ke batla ho etsa bonnete ba hore morerong oa tekanyo leha e le efe, motho o ne a ke ke a tlameha ho etsa litšepiso tse kholo haholo. Karolo ea bohlokoa ho tsena tsohle e ne e le mohopolo oa ho falla butle-butle ho tloha morerong o sa ngolisoang ho ea ho sehlahisoa se felileng se lekiloeng ka mokhoa o hlakileng. Matsatsing ana, mehopolo ena e nkoa e le ea bohlokoa, empa ka 2010 e ne e le bothata bo neng bo ntse bo hlahlojoa ka matla.

Mosebetsi oa ka oa pele oa ho hlahloba mofuta o ne o sa rereloa Python. Ho e-na le hoo, ke ne ke sebelisa puo e nyenyane "ea lapeng". Alore. Mohlala ke ona o tla u thusa ho utloisisa seo re buang ka sona (litlhaloso tsa mofuta oa boikhethelo mona):

def Fib(n as Int) as Int
  if n <= 1
    return n
  else
    return Fib(n - 1) + Fib(n - 2)
  end
end

Ho sebelisa puo ea matsoalloa e nolofalitsoeng ke mokhoa o tloaelehileng o sebelisoang liphuputsong tsa saense. Sena se joalo, eseng bonyane hobane se u lumella ho potlakela ho etsa liteko, hape ka lebaka la hore se sa amane le thuto se ka hlokomolohuoa habonolo. Lipuo tsa 'nete tsa lefats'e li atisa ho ba liketsahalo tse kholo tse nang le ts'ebetsong e rarahaneng,' me sena se liehisa liteko. Leha ho le joalo, liphetho leha e le life tse thehiloeng puong e nolofalitsoeng li shebahala li belaella hanyane, kaha ka ho fumana liphetho tsena mofuputsi a ka 'na a tela lintlha tsa bohlokoa bakeng sa tšebeliso e sebetsang ea lipuo.

Mohloli oa ka oa mofuta oa Alore o ne o shebahala o ts'episa haholo, empa ke ne ke batla ho e leka ka ho leka khoutu ea 'nete, eo u ka reng, e ne e sa ngoloa ka Alore. Ka lehlohonolo ho 'na, puo ea Alore e ne e thehiloe haholo mehopolong e tšoanang le ea Python. Ho ne ho le bonolo ho lekana ho etsa mochini oa ho thaepa hape hore o tle o sebetse le syntax ea Python le semantics. Sena se re lumelletse ho leka ho thaepa ho hlahloba khoutu ea Python e bulehileng. Ho phaella moo, ke ngotse transpiler ho fetolela khoutu e ngotsoeng ka Alore ho ea Python code mme ke e sebelisa ho fetolela khoutu ea ka ea typechecker. Joale ke ne ke e-na le mokhoa oa ho hlahloba mofuta o ngotsoeng ka Python o tšehetsang karoloana ea Python, mofuta o mong oa puo eo! (Liqeto tse ling tsa meralo tse neng li utloahala bakeng sa Alore li ne li sa tšoanele Python hampe, 'me sena se ntse se bonahala likarolong tsa mypy codebase.)

Ebile, puo e tšehelitsoeng ke sistimi ea ka ea mofuta o ne e ke ke ea bitsoa Python ntlheng ena: e ne e le mofuta o fapaneng oa Python ka lebaka la mefokolo e itseng ea syntax ea mofuta oa Python 3.

E ne e shebahala joalo ka motsoako oa Java le Python:

int fib(int n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

E 'ngoe ea mehopolo ea ka ka nako eo e ne e le ho sebelisa litlhaloso tsa mofuta ho ntlafatsa ts'ebetso ka ho bokella mofuta ona oa Python ho C, kapa mohlomong JVM bytecode. Ke fihlile mothating oa ho ngola prototype ea compiler, empa ke ile ka lahla mohopolo ona, kaha mofuta oa ho itlhahloba o ne o bonahala o le molemo haholo.

Ke ile ka qetella ke hlahisitse projeke ea ka ho PyCon 2013 ho la Santa Clara. Ke boetse ke buile ka sena le Guido van Rossum, mohatelli ea molemo oa Python bophelo bohle. O ile a nkholisa hore ke tlohele syntax ea ka 'me ke khomarele syntax e tloaelehileng ea Python 3. Python 3 e tšehetsa litlhaloso tsa mosebetsi, kahoo mohlala oa ka o ka ngoloa hape joalokaha ho bontšitsoe ka tlase, ho fella ka lenaneo le tloaelehileng la Python:

def fib(n: int) -> int:
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

Ke ile ka tlameha ho sekisetsa (pele ho tsohle, ke batla ho hlokomela hore ke ile ka iqapela syntax ea ka ka lona lebaka lena). Haholo-holo, Python 3.3, phetolelo ea morao-rao ea puo ka nako eo, e ne e sa tšehetse litlhaloso tse fapaneng. Ke buisane le Guido ka e-mail ka menyetla e fapaneng ea moralo oa litlhaloso tse joalo. Re nkile qeto ea ho sebelisa litlhaloso tsa mofuta bakeng sa mefuta e fapaneng. Sena se ile sa sebeletsa sepheo se reriloeng, empa se ne se le boima (Python 3.6 e re file syntax e ntle):

products = []  # type: List[str]  # Eww

Litlhaloso tsa mofuta le tsona li bile teng ho ts'ehetsa Python 2, e se nang tšehetso e hahelletsoeng bakeng sa litlatsetso tsa mofuta:

f fib(n):
    # type: (int) -> int
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

Ho ile ha fumaneha hore likhohlano tsena (le tse ling) li ne li se na taba - melemo ea ho thaepa ka mokhoa o tsitsitseng e ne e bolela hore basebelisi ba potlakela ho lebala ka li-syntax tse tlase ho feta tse loketseng. Kaha ha ho na meaho e khethehileng ea syntactic e sebelisitsoeng khoutu ea Python e hlahlojoang ke mofuta, lisebelisoa tse teng tsa Python le mekhoa ea ho sebetsana le khoutu li ile tsa tsoela pele ho sebetsa ka mokhoa o tloaelehileng, ho nolofalletsa bahlahisi ho ithuta sesebelisoa se secha.

Guido o ile a boela a nkholisa hore ke kene Dropbox ka mor'a hore ke qete thuto ea ka ea mangolo. Mona ke moo karolo e thahasellisang ka ho fetisisa ea pale ea mypy e qalang teng.

E tla ntšetsoa pele…

Babali ba ratehang! Haeba u sebelisa Python, ka kopo re bolelle ka boholo ba merero eo u e hlahisang ka puo ena.

Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 1
Mokhoa oa ho thaepa mela e limilione tse 4 ea khoutu ea Python. Karolo ea 1

Source: www.habr.com

Eketsa ka tlhaloso