Izid programske opreme Python 3.8

Po enain letih razvoja predstavljen значajen prenovljen programski jezik Python 3.8. Popravki za veje Python 3.8 je načrtovan bodo izšli v 18 mesecih. Kritične ranljivosti bodo popravili 5 let, do oktobra 2024. Popravki za vejo 3.8 bodo izšli na vsaka dva meseca, prvi popravni izdaj Python 3.8.1 je načrtovan za december.

Med dodanimi novosti:

  • Podpora operacijami dodelitve znotraj kompleksnih izrazov. Z novim operatorjem «:=» je postala možna dodelitev vrednosti znotraj drugih izrazov, na primer, da se izognemo dvojna klicem funkcij v pogojnih stavkih in pri določanju zank:

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

    while (block := f.read(256)) != »:
    …

  • Podpora nove sintakse določanja argumentov funkcije. Pri naštevanju argumentov med definicijo funkcije je zdaj mogoče navesti oznako «/», ki omogoča ločitev argumentov, katerih vrednosti lahko dobijo le po vrstnem redu, od argumentov, ki dovoljujejo dodelitev v poljubnem vrstnem redu (sintaksa «spremenljivka=vrijednost»). Z vidika prakse nova možnost omogoča, da se v Pythonu popolnoma emulira vedenje obstoječih funkcij v jeziku C ter se izogne vezavam na konkretna imena, na primer, če se pričakuje, da se bo ime parametra v prihodnosti spremenilo.

    Oznaka «/» dopolnjuje prej dodano oznako «*», ki ločuje spremenljivke, za katere velja le dodelitev v obliki «spremenljivka=vrijednost». Na primer, v funkciji «def f(a, b, /, c, d, *, e, f):» lahko spremenljivki «a» in «b» dodelimo le v vrstnem redu naštevanja vrednosti,
    spremenljivke «e» in «f» pa le prek dodelitve «spremenljivka=vrijednost», medtem ko lahko spremenljivki «c» in «d» vrednosti dodelimo na kateri koli od navedenih načinov:

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

  • Dodano nov C API
    za nastavitev parametrov inicializacije Pythona, kar omogoča popoln nadzor nad celotno konfiguraciju in nudi razširjene sredstva za obravnavo napak. Predlagani API poenostavi vgradnjo funkcionalnosti interpreterja Pythona v druge aplikacije v jeziku C;
  • Izvedeno nov protokol Vectorcall za hitrejši dostop do objektov, napisanih v jeziku C. V CPython 3.8 je dostop do Vectorcall zaenkrat omejen na interno uporabo, prehod v razred javno dostopnih API pa je načrtovan za CPython 3.9.
  • Dodani klici Runtime Audit Hooks, ki aplikacijam in ogrodjem v jeziku Python omogočajo dostop do nizkonivojskih informacij o poteku izvajanja skripta za izvajanje revizij opravljenih dejanj (na primer, slediti je mogoče uvozu modulov, odpiranju datotek, uporabi sledenja, dostopu do omrežnih socketov, izvajanju kode preko exec, eval in run_mod);
  • V modulu pickle je zagotovljena podpora protokolu Pickle 5, ki se uporablja za serializacijo in deserializacijo objektov. Pickle omogoča optimizacijo prenosa velikih količin podatkov med Python procesi v večjedrnih in večvozných konfiguracijah, s čimer se zmanjša število operacij kopiranja pomnilnika in uporabi dodatne tehnike optimizacije, kot je vključitev algoritmov stiskanja specifičnih za določene podatke. Peta različica protokola je znana po dodajanju načina ločene prenose (out-of-band), pri katerem se lahko podatki prenašajo ločeno od glavnega toka pickle.
  • Privzeto je aktivirana četrta različica protokola Pickle, ki v primerjavi s prej predlagano privzeto tretjo različico omogoča dosego višje zmogljivosti in zmanjšanje velikosti prenesenih podatkov;
  • V modulu typing predstavljene so nekatere nove možnosti:
    • Razred TypedDict za asociativne tabele, kjer je za podatke, povezane s ključi, izrecno določena informacija o tipu ("TypedDict('Point2D', x=int, y=int, label=str)").
    • Tip Literal, ki omogoča omejitev parametra ali vrnjenega vrednosti na več predhodno določenih vrednosti ("Literal['connected', 'disconnected']").
    • Konstrukcija "Final", ki omogoča določitev vrednosti spremenljivk, funkcij, metod in razredov, ki jih ni mogoče spremeniti ali ponovno dodeliti ("pi: Final[float] = 3.1415926536").
  • Dodana je možnost dodelitve predpomnilnika za skompilirane datoteke z bytecode, ki se shranjujejo v ločeno drevesno strukturo datotečnega sistema in ločeno od map z kodo. Pot za shranjevanje datotek z bytecode se določi preko spremenljivke PYTHONPYCACHEPREFIX ali možnosti "-X pycache_prefix";
  • Implementirano možnost ustvarjanja odprtokodnih različic Pythona, ki uporabljajo identičen ABI z izdajo, kar omogoča nalaganje razširitev v C, sestavljenih za stabilne različice, v odprtokodnih različicah;
  • V f-nizah (formiruyemye literaly s prefixom ‘f’) obespechena podderzhka operatora «=» (naprimer, «f'{expr=}'»), pozvolyayushchego preobrazovat' vyrazhenie v tekst dlya uproshcheniya otладки. Naprimer:

    ››› user = ‘eric_idle’
    ››› member_since = date(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    «user=’eric_idle’ member_since=datetime.date(1975, 7, 31)»

  • Vyrazhenie «continue» razresheno ispol'zovat' vnutri bloka finally;
  • Dodata je nova modula multiprocessing.shared_memory, pozvolyayushchiy ispol'zovat' segmenty razdelayemoy pamyati v mnogoprotsessnykh konfiguratsiyakh;
  • Na platforme Windows realizatsiya asyncio perevedena na ispol'zovanie klassa ProactorEventLoop;
  • Proizvoditel'nost' instruktsii LOAD_GLOBAL uvelichena primerno na 40% za schyot ispol'zovaniya novogo mekhanizma keshirovaniya ob'yeza koda.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster