Udgivelse af programmeringssproget Python 3.8

Efter halvandet års udvikling præsenteret større udgivelse af programmeringssprog Python 3.8. Korrigerende opdateringer til Python 3.8-grenen er planlagt frigives inden for 18 måneder. Kritiske sårbarheder vil blive rettet i 5 år indtil oktober 2024. Korrigerende opdateringer til 3.8-grenen vil blive frigivet hver anden måned, med den første korrigerende udgivelse af Python 3.8.1 planlagt til december.

Blandt de tilføjede innovationer:

  • Support opgaveoperationer inden for komplekse udtryk. Med den nye ":="-operator er det muligt at udføre værditildelingsoperationer inde i andre udtryk, for eksempel for at undgå dobbeltfunktionskald i betingede sætninger og ved definition af sløjfer:

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

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

  • Support ny syntaks til angivelse af funktionsargumenter. Når du optæller argumenter under en funktionsdefinition, kan du nu angive et "/" for at adskille argumenter, der kun kan tildeles værdier baseret på den rækkefølge, værdierne er opregnet i under funktionskaldet, fra argumenter, der kan tildeles i vilkårlig rækkefølge (variabel=værdisyntaks) ). På den praktiske side tillader den nye funktion funktioner i Python fuldstændig at efterligne adfærden af ​​eksisterende funktioner i C, og også undgå binding til specifikke navne, for eksempel hvis parameternavnet planlægges ændret i fremtiden.

    "/"-flaget supplerer det tidligere tilføjede "*"-flag og adskiller variabler, for hvilke kun en tildeling i formen "variabel=værdi" er gældende. For eksempel, i funktionen "def f(a, b, /, c, d, *, e, f):" kan variablerne "a" og "b" kun tildeles i den rækkefølge værdierne er angivet ,
    variablerne "e" og "f", kun gennem tildelingen "variabel=værdi", og variablerne "c" og "d" på en af ​​følgende måder:

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

  • Tilføjet ny C API
    at konfigurere Python initialiseringsparametre, hvilket giver fuld kontrol over alt konfiguration og leverer avancerede fejlhåndteringsfaciliteter. Den foreslåede API gør det nemt at integrere Python-fortolkerfunktionalitet i andre C-applikationer;

  • Implementeret ny Vectorcall-protokol for hurtigere adgang til objekter skrevet i C-sprog. I CPython 3.8 er adgangen til Vectorcall stadig begrænset til intern brug, overførsel til kategorien af ​​offentligt tilgængelige API'er er planlagt i CPython 3.9;
  • Tilføjet opkald til Runtime Audit Hooks, som giver applikationer og rammer i Python adgang til information på lavt niveau om scriptets fremskridt for at auditere de udførte handlinger (f.eks. kan du spore importen af ​​moduler, åbne filer, ved hjælp af et spor, adgang til netværkssockets, kørende kode gennem exec, eval og run_mod);
  • I modulet lage sikret understøttelse af Pickle 5-protokollen, der bruges til at serialisere og deserialisere objekter. Pickle giver dig mulighed for at optimere overførslen af ​​store mængder data mellem Python-processer i multi-core- og multi-node-konfigurationer ved at reducere antallet af hukommelseskopieringsoperationer og anvende yderligere optimeringsteknikker, såsom brug af dataspecifikke komprimeringsalgoritmer. Den femte version af protokollen er bemærkelsesværdig for tilføjelsen af ​​en out-of-band transmissionstilstand, hvor data kan transmitteres separat fra den primære pickle-strøm.
  • Som standard er den fjerde version af Pickle-protokollen aktiveret, hvilket sammenlignet med den tredje version, der tidligere blev tilbudt som standard, giver mulighed for højere ydeevne og en reduktion i størrelsen af ​​transmitterede data;
  • I modulet at skrive Flere nye funktioner introduceres:
    • Klasse Typedict for associative arrays, hvor typeinformation er eksplicit angivet for de data, der er knyttet til nøglerne ("TypedDict('Point2D', x=int, y=int, label=str)").
    • Type bogstavelig, som giver dig mulighed for at begrænse en parameter eller returnere værdi til et par foruddefinerede værdier ("Literal['connected', 'disconnected']").
    • Design "Endelig", som gør det muligt at definere værdierne af variabler, funktioner, metoder og klasser, der ikke kan ændres eller gentildeles ("pi: Final[float] = 3.1415926536").
  • Tilføjet muligheden for at tildele en cache til kompilerede filer med bytekode, gemt i et separat FS-træ og adskilt fra mapperne med koden. Stien til at gemme filer med bytekode indstilles via en variabel PYTHONPYCACHEPREFIX eller muligheden "-X pycache_prefix";
  • Implementeret evnen til at skabe debug builds af Python, der bruger en ABI identisk med udgivelsen, som giver dig mulighed for at indlæse udvidelser skrevet i SI sprog, kompileret til stabile udgivelser, i debug builds;
  • f-strenge (formaterede bogstaver foran med 'f') understøtter =-operatoren (f.eks. "f'{expr=}'"), som giver dig mulighed for at konvertere et udtryk til tekst for lettere fejlretning. For eksempel:

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

  • Udtryk"fortsæt» tilladt at blive brugt inde i en blok endelig;
  • Nyt modul tilføjet multiprocessing.shared_memory, der tillader brugen af ​​delte hukommelsessegmenter i multiproceskonfigurationer;
  • På Windows-platformen er asyncio-implementeringen blevet flyttet til at bruge klassen ProactorEventLoop;
  • Ydeevnen af ​​LOAD_GLOBAL-instruktionen er blevet øget med cirka 40 % på grund af brugen af ​​en ny objektkode-caching-mekanisme.

Kilde: opennet.ru

Tilføj en kommentar