Po roku a pol vývoja významné vydanie programovacieho jazyka . Opravy pre vetvu Python 3.8 budú vydávané počas 18 mesiacov. Kritické zraniteľnosti budú opravované 5 rokov do októbra 2024. Opravy pre vetvu 3.8 budú vychádzať každé dva mesiace, prvé opravným vydaním Python 3.8.1 je naplánované na december.
Medzi pridané :
- operácie priradenia vo zložitých výrazoch. Pomocou nového operátora „:=“ je možné vykonávať operácie priradenia hodnôt vo vnútri iných výrazov, napríklad aby sa predišlo dvojitému volaniu funkcií v podmienkových operátoroch a pri definovaní cyklov:
if (n := len(a)) > 10:
…while (block := f.read(256)) !=
… - nová syntaxa zadávania argumentov funkcie. Pri uvedení argumentov počas definovania funkcie je teraz možné uviesť znak „/“, ktorý oddelí argumenty, ktorým môžu byť priradené hodnoty len na základe poradia uvedenia hodnôt pri volaní funkcie, od argumentov, ktorým je možné priradiť hodnoty v ľubovoľnom poradí (syntaxa „premenná=hodnota“). Z praktického hľadiska táto nová možnosť umožňuje v Python funkciách úplne emulovať správanie existujúcich funkcií v jazyku C, ako aj sa vyhnúť viazaniu na konkrétne mená, napríklad ak sa plánuje zmeniť názov parametra v budúcnosti.
Znak „/“ dopĺňa predtým pridaný znak „*“, ktorý oddeluje premenné, pre ktoré je aplikovateľné iba priradenie vo forme „premenná=hodnota“. Napríklad, vo funkcii „def f(a, b, /, c, d, *, e, f):“ premenné „a“ a „b“ môžu byť priradené iba v poradí uvedenia hodnôt,
premenné „e“ a „f“, iba prostredníctvom priradenia „premenná=hodnota“, a premenné „c“ a „d“ akýmikoľvek uvedenými spôsobmi:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, c=30, d=40, e=50, f=60) - nové C API
na nastavenie parametrov inicializácie Python, umožňujúce plne kontrolovať všetko a poskytujúce rozšírené prostriedky na spracovanie chýb. Navrhnuté API zjednodušuje zabudovanie funkčnosti interpretátora Python do iných aplikácií napísaných v jazyku C; - nový protokol Vectorcall na rýchlejšie volania objektov napísaných v jazyku C. V CPython 3.8 je prístup k Vectorcall zatiaľ obmedzený na interné použitie, prevod na verejne dostupné API je plánovaný v CPython 3.9;
- Runtime Audit Hooks, ktoré poskytujú aplikáciám a rámcom v jazyku Python prístup k nízkoúrovňovým informáciám o priebehu vykonávania skriptu na vykonávanie auditu realizovaných akcií (napríklad je možné sledovať importovanie modulov, otváranie súborov, používanie sledovania, prístup k sieťovým socketom, spúšťanie kódu cez exec, eval a run_mod);
- V module podpora protokolu Pickle 5, ktorý sa používa na serializáciu a deserializáciu objektov. Pickle umožňuje optimalizovať prenos veľkých objemov dát medzi procesmi Python v mnohojadrových a mnohovláknových konfiguráciách, čím sa znižuje počet operácií kopírovania pamäte a využívajú sa dodatočné techniky optimalizácie, ako sú špecifické algoritmy kompresie pre konkrétne dáta. Piaty protokol sa vyznačuje pridaním režimu odovzdávania (out-of-band), pričom dáta môžu byť prenášané oddelene od hlavného toku pickle.
- Štvrtá verzia protokolu Pickle je predvolene aktivovaná, ktorá v porovnaní s predtým predloženou treťou verziou umožňuje dosiahnuť vyšší výkon a zníženie veľkosti prenášaných údajov;
- V module bola predstavená niekoľko nových funkcií:
- Trieda pre asociatívne polia, v ktorých je pre priradené kľúčové údaje explicitne určená informácia o type ("TypedDict('Point2D', x=int, y=int, label=str)").
- Typ , ktorý umožňuje obmedziť parameter alebo návratovú hodnotu na niekoľko preddefinovaných hodnôt ("Literal['connected', 'disconnected']").
- Konštrukcia "", ktorá umožňuje definovať hodnoty premenných, funkcií, metód a tried, ktoré nemôžu byť zmenené alebo priradené inak ("pi: Final[float] = 3.1415926536").
- Pridala sa možnosť priradiť cache pre kompilované súbory s bajtkódom, ktoré sa uchovávajú v samostatnej FS štruktúre a oddelene od adresárov s kódom. Cesta na uloženie súborov s bajtkódom sa určuje prostredníctvom premennej alebo volby "-X pycache_prefix";
- možnosť vytvorenia ladených zostáv Pythonu, ktoré používajú identický ABI ako stabilné vydanie, čo umožňuje v týchto ladených zostavách načítať rozšírenia napísané v C, skompilované pre stabilné verzie;
- Vo f-reťazcoch (formátovateľné literály s prefixom 'f') je podporované použitie operátora „=“ (napríklad „f'{expr=}'“), ktorý umožňuje previesť výraz na text na zjednodušenie ladenia. Napríklad:
››› user = 'eric_idle'
››› member_since = date(1975, 7, 31)
››› f'{user=} {member_since=}'
„user='eric_idle' member_since=datetime.date(1975, 7, 31)“ - Výraz „“ je možné použiť vo vnútri bloku ;
- Pridaný nový modul , čo umožňuje používať segmenty zdieľanej pamäte v viacprocesových konfiguráciách;
- Na platforme Windows bola implementácia asyncio prevedená na použitie triedy ;
- Výkon inštrukcie LOAD_GLOBAL sa zvýšil približne o 40 % vďaka novému mechanizmu cachovania objektového kódu.
Zdroj: opennet.ru
