Utgivelse av programmeringsspråket Python 3.8

Etter halvannet år med utvikling presentert stor utgivelse av programmeringsspråk Python 3.8. Korrigerende oppdateringer for Python 3.8-grenen planlagt utgivelse innen 18 måneder. Kritiske sårbarheter vil bli fikset i 5 år frem til oktober 2024. Korrigerende oppdateringer for 3.8-grenen vil bli utgitt annenhver måned, med den første korrigerende utgivelsen av Python 3.8.1 planlagt i desember.

Blant de tilføyde innovasjoner:

  • Støtte oppdragsoperasjoner innenfor komplekse uttrykk. Med den nye ":="-operatoren er det mulig å utføre verditilordningsoperasjoner inne i andre uttrykk, for eksempel for å unngå doble funksjonskall i betingede setninger og når du definerer løkker:

    hvis (n := len(a)) > 10:
    ...

    while (blokk := f.read(256)) != ":
    ...

  • Støtte ny syntaks for å spesifisere funksjonsargumenter. Når du teller opp argumenter under en funksjonsdefinisjon, kan du nå spesifisere en "/" for å skille argumenter som kun kan tildeles verdier basert på rekkefølgen som verdiene er oppregnet under funksjonskallet, fra argumenter som kan tildeles i hvilken som helst rekkefølge (variabel=verdisyntaks) ). På den praktiske siden lar den nye funksjonen funksjoner i Python fullstendig emulere oppførselen til eksisterende funksjoner i C, og også unngå binding til spesifikke navn, for eksempel hvis parameternavnet planlegges endret i fremtiden.

    "/"-flagget utfyller det tidligere lagt til "*"-flagget, og skiller variabler som bare en tilordning i formen "variabel=verdi" er aktuelt. For eksempel, i funksjonen "def f(a, b, /, c, d, *, e, f):" kan variablene "a" og "b" bare tilordnes i den rekkefølgen verdiene er oppført ,
    variablene "e" og "f", bare gjennom tilordningen "variabel=verdi", og variablene "c" og "d" på en av følgende måter:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • La til nye C API
    for å konfigurere Python-initieringsparametere, som gir full kontroll over alt konfigurasjon og tilby avanserte feilhåndteringsfasiliteter. Det foreslåtte API-et gjør det enkelt å bygge inn Python-tolkfunksjonalitet i andre C-applikasjoner;

  • Implementert ny Vectorcall-protokoll for raskere tilgang til objekter skrevet på C-språk. I CPython 3.8 er tilgangen til Vectorcall fortsatt begrenset til intern bruk, overføring til kategorien offentlig tilgjengelige APIer er planlagt i CPython 3.9;
  • La til kaller til Runtime Audit Hooks, som gir applikasjoner og rammeverk i Python tilgang til informasjon på lavt nivå om fremdriften til skriptet for å revidere handlingene som er utført (for eksempel kan du spore import av moduler, åpne filer, ved å bruke spor, tilgang til nettverkskontakter, kjører kode gjennom exec, eval og run_mod);
  • I modulen pickle sikret støtte for Pickle 5-protokollen, brukt for serialisering og deserialisering av objekter. Pickle lar deg optimere overføringen av store datamengder mellom Python-prosesser i multi-core og multi-node konfigurasjoner ved å redusere antall minnekopieringsoperasjoner og bruke ytterligere optimaliseringsteknikker som bruk av dataspesifikke komprimeringsalgoritmer. Den femte versjonen av protokollen er kjent for tillegget av en overføringsmodus utenfor båndet, der data kan overføres separat fra hovedbeitelstrømmen.
  • Som standard er den fjerde versjonen av Pickle-protokollen aktivert, som, sammenlignet med den tredje versjonen som tidligere ble tilbudt som standard, gir mulighet for høyere ytelse og en reduksjon i størrelsen på overførte data;
  • I modulen skrive Flere nye funksjoner er introdusert:
    • Klasse TypedDict for assosiative matriser der typeinformasjon er eksplisitt spesifisert for dataene knyttet til nøklene ("TypedDict('Point2D', x=int, y=int, label=str)”).
    • Type bokstave, som lar deg begrense en parameter eller returnere verdi til noen få forhåndsdefinerte verdier ("Literal['connected', 'disconnected']").
    • Design "Slutten", som gjør det mulig å definere verdiene til variabler, funksjoner, metoder og klasser som ikke kan endres eller tilordnes på nytt ("pi: Final[float] = 3.1415926536").
  • Lagt til muligheten til å tilordne en cache for kompilerte filer med bytekode, lagret i et eget FS-tre og atskilt fra katalogene med koden. Banen for å lagre filer med bytekode settes via en variabel PYTHONPYCACHEPREFIX eller alternativet "-X pycache_prefix";
  • Implementert muligheten til å lage feilsøkingsbygg av Python som bruker en ABI som er identisk med utgivelsen, som lar deg laste utvidelser skrevet på SI-språk, kompilert for stabile utgivelser, i feilsøkingsbygg;
  • f-strenger (formaterte bokstaver prefikset med 'f') gir støtte for =-operatoren (for eksempel "f'{expr=}'"), som lar deg konvertere et uttrykk til tekst for enklere feilsøking. For eksempel:

    ››› bruker = 'eric_idle'
    ››› medlem_siden = dato(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Uttrykk "fortsette» tillatt å brukes inne i en blokk endelig;
  • Ny modul lagt til multiprocessing.shared_memory, tillater bruk av delte minnesegmenter i multiprosesskonfigurasjoner;
  • På Windows-plattformen har asyncio-implementeringen blitt flyttet til å bruke klassen ProactorEventLoop;
  • Ytelsen til LOAD_GLOBAL-instruksjonen er økt med omtrent 40 % på grunn av bruken av en ny bufringsmekanisme for objektkode.

Kilde: opennet.ru

Legg til en kommentar