Le ala ile siakiina ole 4 miliona laina ole code Python. Vaega 1

O aso nei matou te fa'ailoa atu ia te oe le vaega muamua o le fa'aliliuga o mea i le auala e fa'atautaia ai e Dropbox le fa'atonuga o le Python code.

Le ala ile siakiina ole 4 miliona laina ole code Python. Vaega 1

E tele mea e tusia e Dropbox i le Python. Ose gagana matou te fa'aogaina lautele, e le gata mo au'aunaga pito i tua ma talosaga a tagata o le desktop. Matou te faʻaaogaina foi Go, TypeScript ma Rust tele, ae o le Python o la matou gagana autu. Mafaufau i la tatou fua, ma o loʻo tatou talanoa e uiga i le faitau miliona o laina o le Python code, na faʻaalia ai o le malosi o le taina o ia tulafono e le tatau ai ona faigata lona malamalama ma amata ona matua afaina ai le gaosiga o tagata faigaluega. Ina ia faʻaitiitia lenei faʻafitauli, ua amata ona faʻasolosolo malie le matou code i le siakiina o le faʻaogaina o le mypy. Atonu o le faiga e sili ona ta'uta'ua tuto'atasi mo le Python. O le Mypy o se poloketi faʻalauiloa, o ona tagata atinaʻe autu e galulue i Dropbox.

O le Dropbox o se tasi o kamupani muamua na faʻatinoina le siakiina o ituaiga faʻamau i le Python code i lenei fua. Mypy o loʻo faʻaaogaina i le faitau afe o poloketi i nei aso. O lenei meafaigaluega e le mafaitaulia, e pei ona latou fai mai, "tofotofoina i le taua." Ua mamao lava le ala ua tatou oo i ai i le mea ua tatou i ai nei. I luga o le ala, sa i ai le tele o galuega le manuia ma faʻataʻitaʻiga le manuia. O lenei pou e aofia ai le talaʻaga o le siakiina o ituaiga i le Python, mai lona amataga papa e avea o se vaega o laʻu suʻesuʻega, e oʻo mai i le taimi nei, pe a faʻataʻitaʻiina le siakiina ma le faʻailoga faʻailoga ua avea ma mea masani mo le anoanoaʻi o tagata atiaʻe e tusitusi i le Python. O nei masini ua lagolagoina nei e le tele o meafaigaluega e pei o IDEs ma code analyzers.

Faitau le vaega lona lua

Aisea e mana'omia ai le siakiina o ituaiga?

Afai na e faʻaaogaina le Python faʻamalosi malosi, atonu e te le mautonu pe aisea ua tupu ai le vevesi i le taina ma le mypy talu ai nei. Pe atonu foi e te fiafia i le Python ona o le malosi o le taina, ma o le mea o loʻo tupu e naʻo lou le fiafia. O le ki i le taua o le taina o le static o le fua lea o fofo: o le tele o lau poloketi, o le tele foi lea o lou faʻalagolago i le taina faʻamau, ma i le faaiuga, o le tele foi lea o lou manaʻomia.

Fa'apea la ua o'o atu i le fia sefulu afe o laina le tele o se poloketi, ma ua aliali mai o lo'o galulue ai le tele o tagata fai polokalame. O le vaʻavaʻai i se galuega faʻatusa, faʻavae i luga o lo tatou poto masani, e mafai ona tatou fai atu o le malamalama i lana tulafono o le a avea ma ki i le faʻatumauina o tagata atinaʻe. A aunoa ma ni fa'amatalaga fa'aigoa, e mafai ona faigata ona iloa, mo se fa'ata'ita'iga, po'o a finauga e pasi atu i se galuega, po'o a ituaiga o galuega e mafai ona toe fo'i mai. O fesili masani nei e masani ona faigata ona tali e aunoa ma le faʻaogaina o faʻamatalaga faʻapitoa:

  • E mafai ona toe foʻi mai lenei galuega None?
  • O le a lenei finauga e tatau ona i ai? items?
  • O le a le ituaiga uiga id: int olena, str, po'o se ituaiga tu'aiga masani?
  • E tatau ona avea lenei finauga ma se lisi? E mafai ona pasi atu se tuple i ai?

Afai e te vaʻavaʻai i le snippet code-annotated type ma taumafai e tali fesili tutusa, e foliga mai o le galuega sili lea ona faigofie:

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

  • read_metadata e le toe foi mai None, talu ai e le o le ituaiga toe faafoi Optional[…].
  • Manatu finau items o se faasologa o laina. E le mafai ona toe fai fa'afuase'i.
  • Uiga id o se manoa o paita.

I se lalolagi lelei, o le a faʻamoemoe se tasi e faʻamatalaina uma ia faʻamatalaga i totonu o faʻamaumauga (docstring). Ae o le poto masani e maua ai le tele o faʻataʻitaʻiga o le mea moni o ia faʻamaumauga e masani ona le matauina i le tulafono lea e te galue ai. E tusa lava pe o iai ia faʻamaumauga i totonu o le tulafono, e le mafai e se tasi ona faʻamoemoe i lona saʻo atoatoa. O lenei faʻamaumauga e mafai ona le manino, le saʻo, ma tatala i le le malamalama. I 'au tetele po'o galuega tetele, o lenei fa'afitauli e mafai ona matua'i tu'ina.

E ui o le Python e sili atu i le amataga poʻo le vaeluaga o laʻasaga o galuega faatino, i nisi taimi o poloketi manuia ma kamupani e faʻaaogaina le Python e ono feagai ma le fesili taua: "Pe tatau ona tatou toe tusia mea uma i se gagana faʻapipiʻi faʻamau?".

Ituaiga faiga siaki pei mypy foia le faafitauli o loo i luga e ala i le tuuina atu i le tagata atiaeina se gagana aloaia mo le faamatalaina o ituaiga, ma e ala i le siakiina o le ituaiga taʻutinoga e fetaui ma le polokalama o le faatinoga (ma, filifiliga, e ala i le siakiina o latou ola). I se tulaga lautele, e mafai ona tatou fai atu o nei faiga o loʻo tuʻuina atu ia i tatou se mea e pei o faʻamaumauga siaki ma le faaeteete.

O le faʻaaogaina o ia faiga e iai isi faʻamanuiaga, ma ua matua leai lava se mea taua:

  • E mafai e le faiga o le siakiina o ituaiga ona iloa ni mea laiti (ae le o ni mea laiti). O se fa'ata'ita'iga masani o le taimi e galo ai ona fa'agasolo se tau None po'o se isi tulaga fa'apitoa.
  • O le toe fa'atulafonoina e matua fa'afaigofie ona o le faiga o le siakiina o ituaiga e masani lava ona sa'o lelei e uiga i le tulafono e tatau ona suia. I le taimi lava e tasi, matou te le manaʻomia le faʻamoemoe mo le 100% code coverage ma suʻega, lea, i soʻo se tulaga, e masani lava e le mafai. E le mana'omia ona tatou su'esu'e i le loloto o le su'ega fa'aputu e su'e ai le mafua'aga o le fa'afitauli.
  • E oo lava i luga o galuega tetele, e masani ona mafai e mypy ona faia suʻesuʻega atoa i se vaega o le sekone. Ma o le faʻatinoina o suʻega e masani lava e sefulu sekone pe oʻo lava i minute. O le faiga o le siakiina o ituaiga e maua ai e le tagata fai polokalame ni tali vave ma mafai ai e ia ona fai lana galuega vave. Na te le toe manaʻomia ona tusi maʻaleʻale ma faigata e tausia suʻega iunite e sui ai mea moni i tauemuga ma faʻapipiʻi naʻo le maua vave o faʻaiʻuga o suʻega code.

IDE ma fa'atonu e pei ole PyCharm po'o le Visual Studio Code latou te fa'aogaina le malosi o fa'amatalaga fa'ailoga e tu'uina atu ai i le au atina'e le fa'amae'aina o tulafono, fa'ailoga sese, ma le lagolago mo fau gagana masani. Ma o nisi nei o aoga o le taina. Mo nisi tagata fai polokalame, o nei mea uma o le finauga autu e fiafia i le taina. O se mea lea e aoga vave pe a uma ona faʻatinoina. O lenei fa'aoga mo ituaiga e le mana'omia ai se faiga e siaki ai ituaiga e pei o mypy, e ui lava e tatau ona maitauina e fesoasoani le mypy e fa'atumauina fa'amatalaga fa'aigoa e ogatasi ma code.

talaaga o mypy

O le talafaasolopito o mypy na amata i Peretania, i Cambridge, i ni nai tausaga ae ou te lei auai i le Dropbox. Sa ou auai, o se vaega o laʻu suʻesuʻega faafomaʻi, i le tuʻufaʻatasia o gagana faʻapipiʻi ma le malosi. Na musuia aʻu i se tusiga e uiga i le faʻaopoopoina o le taina e Jeremy Siek ma Walid Taha, ma e ala i le Poloketi Typed Racket. Sa ou taumafai e su'e ni auala e fa'aoga ai le gagana fa'akomepiuta tutusa mo galuega eseese - mai tusitusiga laiti i fa'amaufa'ailoga e aofia ai le tele o miliona o laina. I le taimi lava e tasi, sa ou manaʻo e faʻamautinoa i totonu o se poloketi o soʻo se fua, o le a le tatau i se tasi ona faia ni fetuunaiga tetele. O se vaega taua o nei mea uma o le manatu o le faasolosolo malie atu mai se galuega faʻataʻitaʻi e leʻi faʻapipiʻiina i se faʻataʻitaʻiga maeʻa faʻataʻitaʻiina oloa maeʻa. O nei aso, o nei manatu ua tele lava ina manatu faatauvaa, ae o le 2010 o se faʻafitauli o loʻo faʻaauau pea ona suʻesuʻeina.

O laʻu galuega muamua ile siaki ituaiga e leʻi faʻatatau ile Python. Nai lo lena, sa ou faaaogaina se tamai gagana "faiga fale". Alore. O se faʻataʻitaʻiga lea e faʻatagaina oe e te malamalama i mea o loʻo matou talanoa ai (ituaiga faʻamatalaga e filifili iinei):

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

O le fa'aaogaina o se gagana fa'afaigofie ose faiga masani lea e fa'aoga i su'esu'ega fa'asaienisi. O le mea lea, e le o se mea itiiti ona e mafai ai ona e faia vave faʻataʻitaʻiga, ma ona o le mea moni o le mea e leai se mea e fai i le suʻesuʻega e mafai ona faigofie ona le amanaiaina. O gagana faʻapolokalame a le lalolagi moni e masani ona avea ma faʻalavelave tetele ma faʻalavelave faʻatinoga, ma e faʻagesegese ai le faʻataʻitaʻiga. Peita'i, so'o se fa'ai'uga e fa'atatau i se gagana fa'afaigofie e foliga mai e masalosalo, talu ai o le mauaina o nei fa'ai'uga atonu na ositaulagaina ai e le tagata su'esu'e ni manatu taua mo le fa'aaogaina o gagana.

O la'u siaki siaki mo Alore na foliga mai e matua fiafia lava, ae na ou manaʻo e faʻataʻitaʻi e ala i le faʻataʻitaʻiina o le code moni, atonu e te fai mai, e leʻi tusia i Alore. O le laki mo aʻu, o le gagana Alore na faʻavae tele i manatu tutusa e pei o le Python. Sa faigofie lava le toe faia o le siaki siaki ina ia mafai ona galue i le Python's syntax ma semantics. O lenei mea na mafai ai ona matou taumafai e siaki siaki ile faʻamatalaga tatala Python code. E le gata i lea, na ou tusia se transpiler e faaliliu ai le code na tusia i le Alore i le Python code ma faʻaaogaina e faʻaliliu ai laʻu numera typechecker. O lea la ua i ai sau faiga siaki ituaiga na tusia i le Python e lagolagoina ai se vaega o le Python, o se ituaiga o lena gagana! (O nisi o faʻaiuga faʻataʻitaʻiga e talafeagai mo Alore e le fetaui mo Python, ma o loʻo maitauina pea i vaega o le mypy codebase.)

O le mea moni, o le gagana e lagolagoina e laʻu ituaiga faiga e le mafai ona taʻua o le Python i le taimi nei: o se fesuiaiga o le Python ona o nisi tapulaʻa o le Python 3 type annotation syntax.

E foliga mai o se faʻafefiloi o Java ma Python:

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

O se tasi o oʻu manatu i lena taimi o le faʻaaogaina o faʻamatalaga faʻapitoa e faʻaleleia ai le faʻatinoga e ala i le tuʻufaʻatasia o lenei ituaiga Python i C, pe atonu o le JVM bytecode. Na ou oʻo i le tulaga o le tusiaina o se faʻataʻitaʻiga tuʻufaʻatasia, ae na ou lafoaʻia lenei manatu, talu ai o le siakiina o ia lava e foliga aoga.

Na iu ina ou tuʻuina atu laʻu poloketi ile PyCon 2013 i Santa Clara. Na ou talanoa foi e uiga i lenei mea ma Guido van Rossum, le pule alofa o le Python mo le olaga. Na ia faʻamalosia aʻu e tuʻu laʻu lava syntax ma pipii i le Python 3 syntax masani. E lagolagoina e le Python 3 faʻamatalaga galuega, o lea e mafai ai ona toe tusia laʻu faʻataʻitaʻiga e pei ona faʻaalia i lalo, e maua ai se polokalame Python masani:

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

Sa tatau ona ou faia ni fetuunaiga (muamua, ou te fia matauina na ou fatuina laʻu lava syntax mo lenei lava mafuaaga). Aemaise lava, Python 3.3, o le lomiga aupito lata mai o le gagana i lena taimi, e leʻi lagolagoina faʻamatalaga fesuisuiai. Na ou talanoa ma Guido e ala i le imeli i le tele o avanoa mo le syntactic design o ia faʻamatalaga. Na matou filifili e faʻaoga faʻamatalaga ituaiga mo fesuiaiga. O lenei mea na faʻamoemoeina, ae na fai si faigata (Python 3.6 na tuʻuina mai ia i matou se syntax sili atu):

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

O faʻamatalaga faʻapipiʻi na oʻo mai foi e fesoasoani e lagolago ai le Python 2, lea e leai se lagolago faʻapipiʻi mo faʻamatalaga ituaiga:

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

Na aliali mai o nei (ma isi) fefaʻatauaʻiga e leʻi afaina tele - o faʻamanuiaga o le faʻapipiʻi faʻasolosolo o lona uiga e le pine ae galo i tagata faʻaoga le faʻaogaina o le syntax e itiiti ifo nai lo le lelei. Talu ai e leai ni fa'ailoga fa'apitoa na fa'aogaina i le Python code-type-checked, o mea faigaluega a le Python o lo'o i ai ma fa'agasologa o fa'asologa o tulafono na fa'aauau pea ona galue masani, ma fa'afaigofie atili ai le a'oa'oina o le meafaigaluega fou.

Na fa'atonu a'u e Guido e 'auai i le Dropbox pe a uma la'u su'esu'ega fa'au'u. O iinei e amata ai le vaega sili ona manaia o le mypy tala.

Ia toe faauau…

Lau faitau le au faitau! Afai e te fa'aogaina le Python, fa'amolemole ta'u mai e uiga i le fua o poloketi e te atia'e i lenei gagana.

Le ala ile siakiina ole 4 miliona laina ole code Python. Vaega 1
Le ala ile siakiina ole 4 miliona laina ole code Python. Vaega 1

puna: www.habr.com

Faaopoopo i ai se faamatalaga