Utgivning av programmeringsspråket Python 3.8

Efter ett och ett halvt år av utveckling presenteras större programmeringsspråksversion python 3.8. Korrigerande uppdateringar för Python 3.8-grenen planeras släpps inom 18 månader. Kritiska sårbarheter kommer att åtgärdas i 5 år fram till oktober 2024. Korrigerande uppdateringar för 3.8-grenen kommer att släppas varannan månad, med den första korrigerande versionen av Python 3.8.1 planerad till december.

Bland de tillagda innovationer:

  • Support uppdragsoperationer inom komplexa uttryck. Med den nya operatorn ":=" är det möjligt att utföra värdetilldelningsoperationer i andra uttryck, till exempel för att undvika dubbla funktionsanrop i villkorssatser och vid definition av loopar:

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

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

  • Support ny syntax för att ange funktionsargument. När du räknar upp argument under en funktionsdefinition kan du nu ange ett "/" för att separera argument som endast kan tilldelas värden baserat på den ordning i vilken värdena räknas upp under funktionsanropet, från argument som kan tilldelas i valfri ordning (variabel=värdesyntax) ). På den praktiska sidan tillåter den nya funktionen funktioner i Python att helt emulera beteendet hos befintliga funktioner i C, och även undvika bindning till specifika namn, till exempel om parameternamnet planeras att ändras i framtiden.

    "/"-flaggan kompletterar den tidigare tillagda "*"-flaggan, och separerar variabler för vilka endast en tilldelning i formen "variabel=värde" är tillämplig. Till exempel, i funktionen "def f(a, b, /, c, d, *, e, f):" kan variablerna "a" och "b" endast tilldelas i den ordning som värdena är listade ,
    variablerna "e" och "f", endast genom tilldelningen "variabel=värde", och variablerna "c" och "d" på något av följande sätt:

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

  • tillsatt nya C API
    för att konfigurera Python-initieringsparametrar, vilket tillåter fullständig kontroll över allt konfiguration och tillhandahåller avancerade felhanteringsfaciliteter. Det föreslagna API:et gör det enkelt att bädda in Python-tolkfunktionalitet i andra C-applikationer;

  • Genomfört nytt Vectorcall-protokoll för snabbare åtkomst till objekt skrivna på C-språk. I CPython 3.8 är åtkomsten till Vectorcall fortfarande begränsad till intern användning, överföring till kategorin allmänt tillgängliga API:er planeras i CPython 3.9;
  • Lagt till anrop till Runtime Audit Hooks, som ger applikationer och ramverk i Python tillgång till lågnivåinformation om skriptets framsteg för att granska utförda åtgärder (till exempel kan du spåra import av moduler, öppna filer, använda ett spår, komma åt nätverksuttag, köra kod genom exec, eval och run_mod);
  • I modulen ättikslag säkrad stöd för Pickle 5-protokollet, som används för att serialisera och deserialisera objekt. Pickle låter dig optimera överföringen av stora mängder data mellan Python-processer i multi-core och multi-nod-konfigurationer genom att minska antalet minneskopieringsoperationer och tillämpa ytterligare optimeringstekniker som att använda dataspecifika komprimeringsalgoritmer. Den femte versionen av protokollet är känd för tillägget av ett överföringsläge utanför bandet, där data kan sändas separat från huvudströmmen av pickle.
  • Som standard är den fjärde versionen av Pickle-protokollet aktiverad, vilket, jämfört med den tredje versionen som tidigare erbjöds som standard, möjliggör högre prestanda och en minskning av storleken på överförda data;
  • I modulen skriva Flera nya funktioner introduceras:
    • Klass TypdDict för associativa arrayer där typinformation är explicit specificerad för data som är associerade med nycklarna ("TypedDict('Point2D', x=int, y=int, label=str)”).
    • Typ bokstavlig, som låter dig begränsa en parameter eller returnera värde till ett fåtal fördefinierade värden ("Literal['ansluten', 'bortkopplad']").
    • Design "Slutlig", vilket gör det möjligt att definiera värden för variabler, funktioner, metoder och klasser som inte kan ändras eller omtilldelas ("pi: Final[float] = 3.1415926536").
  • Lade till möjligheten att tilldela en cache för kompilerade filer med bytecode, sparade i ett separat FS-träd och separerat från katalogerna med koden. Sökvägen för att spara filer med bytekod ställs in via en variabel PYTHONPYCACHEPREFIX eller alternativet "-X pycache_prefix";
  • Genomfört möjligheten att skapa felsökningsbyggen av Python som använder en ABI som är identisk med versionen, vilket låter dig ladda tillägg skrivna på SI-språk, kompilerade för stabila utgåvor, i felsökningsbyggen;
  • f-strängar (formaterade bokstaver med prefixet 'f') ger stöd för operatorn = (till exempel "f'{expr=}'"), vilket låter dig konvertera ett uttryck till text för enklare felsökning. Till exempel:

    ››› användare = 'eric_idle'
    ››› medlem_sedan = datum(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Uttryck"fortsätta» får användas inuti ett block slutligen;
  • Ny modul tillagd multiprocessing.shared_memory, som tillåter användning av delade minnessegment i multiprocesskonfigurationer;
  • På Windows-plattformen har asyncio-implementeringen flyttats för att använda klassen ProactorEventLoop;
  • Prestandan för LOAD_GLOBAL-instruktionen har ökat med cirka 40 % på grund av användningen av en ny objektkodscachemekanism.

Källa: opennet.ru

Lägg en kommentar