Po enain letih razvoja значajen prenovljen programski jezik . Popravki za veje Python 3.8 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 :
- 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)) != »:
… - 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) - nov C API
za nastavitev parametrov inicializacije Pythona, kar omogoča popoln nadzor nad celotno in nudi razširjene sredstva za obravnavo napak. Predlagani API poenostavi vgradnjo funkcionalnosti interpreterja Pythona v druge aplikacije v jeziku C; - 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.
- 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 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 predstavljene so nekatere nove možnosti:
- Razred 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 , ki omogoča omejitev parametra ali vrnjenega vrednosti na več predhodno določenih vrednosti ("Literal['connected', 'disconnected']").
- Konstrukcija "", 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 ali možnosti "-X pycache_prefix";
- 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 «» razresheno ispol'zovat' vnutri bloka ;
- Dodata je nova modula , pozvolyayushchiy ispol'zovat' segmenty razdelayemoy pamyati v mnogoprotsessnykh konfiguratsiyakh;
- Na platforme Windows realizatsiya asyncio perevedena na ispol'zovanie klassa ;
- Proizvoditel'nost' instruktsii LOAD_GLOBAL uvelichena primerno na 40% za schyot ispol'zovaniya novogo mekhanizma keshirovaniya ob'yeza koda.
Izvor: opennet.ru
