Release fan de Python 3.8 programmeartaal

Nei oardel jier fan ûntwikkeling presintearre grutte útjefte fan programmeartaal Python 3.8. Korrigearjende fernijings foar Python 3.8 branch is pland frijlitting binnen 18 moannen. Krityske kwetsberens sille wurde fêst foar 5 jier oant oktober 2024. Korrigearjende fernijings foar de 3.8-tûke wurde elke twa moannen frijlitten, mei de earste korrektive release fan Python 3.8.1 pland foar desimber.

Under de tafoege ynnovaasjes:

  • stipe opdracht operaasjes binnen komplekse útdrukkingen. Mei de nije operator ":=" is it mooglik om operaasjes foar tawizing fan wearde yn oare útdrukkingen út te fieren, bygelyks om dûbele funksje-oanroppen te foarkommen yn betingsten útspraken en by it definiearjen fan loops:

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

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

  • stipe nije syntaksis foar it opjaan fan funksje arguminten. By it opsomjen fan arguminten tidens in funksje-definysje kinne jo no in "/" opjaan om arguminten te skieden dy't allinich wearden kinne wurde tawiisd op basis fan 'e folchoarder wêryn't de wearden wurde opnomd tidens de funksje-oanrop, fan arguminten dy't kinne wurde tawiisd yn elke folchoarder (fariabele=weardesyntaksis)). Oan 'e praktyske kant lit de nije funksje funksjes yn Python it gedrach fan besteande funksjes yn C folslein emulearje, en ek om ferbining te foarkommen oan spesifike nammen, bygelyks as de parameternamme pland is om yn 'e takomst te feroarjen.

    De flagge "/" komplementearret de earder tafoege flagge "*", en skiedt fariabelen wêrfoar allinich in opdracht yn 'e foarm "fariabele=wearde" fan tapassing is. Bygelyks, yn 'e funksje "def f(a, b, /, c, d, *, e, f):" kinne de fariabelen "a" en "b" allinich wurde tawiisd yn 'e folchoarder fan' e wearden wurde neamd ,
    fariabelen "e" en "f", allinich troch de opdracht "fariabele = wearde", en fariabelen "c" en "d" op ien fan 'e folgjende manieren:

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

  • Added nije C API
    om Python-initialisaasjeparameters te konfigurearjen, wêrtroch folsleine kontrôle oer alles mooglik is konfiguraasje en it bieden fan avansearre flater ôfhanneling fasiliteiten. De foarstelde API makket it maklik om Python-tolkfunksjonaliteit yn oare C-applikaasjes yn te setten;

  • Implementearre nij Vectorcall protokol foar flugger tagong ta objekten skreaun yn C taal. Yn CPython 3.8 is tagong ta Vectorcall noch beheind ta ynterne gebrûk; oerdracht nei de kategory fan iepenbier tagonklike API's is pland yn CPython 3.9;
  • Added ropt op Runtime Audit Hooks, dy't applikaasjes en kaders yn Python tagong jouwe ta ynformaasje op leech nivo oer de fuortgong fan it skript om de útfierde aksjes te kontrolearjen (jo kinne bygelyks de ymport fan modules folgje, triemmen iepenje, in spoar brûke, tagong ta netwurk sockets, rinnende koade fia exec, eval en run_mod);
  • Yn de module augurk befeilige stipe foar it Pickle 5-protokol, brûkt foar serialisearjen en deserialisearjen fan objekten. Pickle kinne jo de oerdracht fan grutte hoemannichten gegevens tusken Python-prosessen yn multi-core en multi-node konfiguraasjes optimalisearje troch it ferminderjen fan it oantal ûnthâldkopyoperaasjes en it tapassen fan ekstra optimisaasjetechniken lykas it brûken fan dataspesifike kompresjealgoritmen. De fyfde ferzje fan it protokol is opmerklik foar de tafoeging fan in out-of-band oerdracht modus, wêryn gegevens kinne wurde oerdroegen apart út de wichtichste pickle stream.
  • Standert is de fjirde ferzje fan it Pickle-protokol aktivearre, dy't, yn ferliking mei de tredde ferzje dy't earder standert oanbean wurdt, hegere prestaasjes en in fermindering fan 'e grutte fan oerdroegen gegevens mooglik makket;
  • Yn de module typearje Ferskate nije funksjes wurde yntrodusearre:
    • Klasse TypedDict foar assosjative arrays wêryn typeynformaasje eksplisyt wurdt oantsjutte foar de gegevens dy't ferbûn binne mei de kaaien ("TypedDict('Point2D', x=int, y=int, label=str)”).
    • Typ Letterlik, wêrmei jo in parameter kinne beheine of wearde werombringe nei in pear foarôf definieare wearden ("Literaal['ferbûn', 'ôfsletten']").
    • Ûntwerp "Finale", wat it mooglik makket om de wearden fan fariabelen, funksjes, metoaden en klassen te definiearjen dy't net kinne wurde feroare of opnij tawiisd ("pi: Final[float] = 3.1415926536").
  • Taheakke de mooglikheid om tawize in cache foar kompilearre triemmen mei bytecode, bewarre yn in aparte FS beam en skieden fan de mappen mei de koade. It paad foar it bewarjen fan triemmen mei bytecode wurdt ynsteld fia in fariabele PYTHONPYCACHEPREFIX of de opsje "-X pycache_prefix";
  • Implementearre de mooglikheid om debug-builds fan Python te meitsjen dy't in ABI brûke dy't identyk binne oan 'e frijlitting, wêrtroch jo útwreidingen kinne laden yn SI-taal, kompilearre foar stabile releases, yn debug-builds;
  • f-strings (opmaakte letters foarôfgeand mei 'f') jouwe stipe foar de = operator (bygelyks "f'{expr=}'"), wêrmei jo in útdrukking omsette nei tekst foar makliker debuggen. Bygelyks:

    ››› brûker = 'eric_idle'
    ››› member_since = date(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Ekspresje "trochgean» tastien te brûken binnen in blok úteinlik;
  • Nije module tafoege multiprocessing.shared_memory, wêrtroch it brûken fan dielde ûnthâld segminten yn multiprocess konfiguraasjes;
  • Op it Windows-platfoarm is de asyncio-ymplemintaasje ferpleatst om de klasse te brûken ProactorEventLoop;
  • De prestaasjes fan 'e LOAD_GLOBAL-ynstruksje is ferhege mei sawat 40% troch it brûken fan in nij cachingmeganisme foar objektkoade.

Boarne: opennet.ru

Add a comment