După un an și jumătate de dezvoltare o lansare semnificativă a limbajului de programare . Actualizările corective pentru ramura Python 3.8 vor fi lansate timp de 18 luni. Vulnerabilitățile critice vor fi corectate până în octombrie 2024. Actualizările corective pentru ramura 3.8 vor apărea la fiecare două luni, prima lansare corectivă Python 3.8.1 fiind planificată pentru decembrie.
Printre îmbunătățirile adăugate :
- operațiunile de atribuire în interiorul expresiilor complexe. Cu ajutorul noului operator „:=”, a apărut posibilitatea de a efectua operațiuni de atribuire a valorilor în interiorul altor expresii, de exemplu, pentru a evita apelurile redundante ale funcțiilor în instrucțiunile condiționale și în definirea buclelor:
if (n := len(a)) > 10:
…while (block := f.read(256)) != »:
… - noul syntaxă de definire a argumentelor funcției. La enumerarea argumentelor în timpul definirii funcției, acum se poate specifica indicatorul „/”, care permite separarea argumentelor ale căror valori pot fi atribuite exclusiv pe baza ordinii enumerării valorilor în timpul apelului funcției, de argumentele care permit atribuirea în orice ordine (sintaxa „variabilă=valoare”). Din punct de vedere practic, noua caracteristică permite funcțiilor Python să emuleze complet comportamentul funcțiilor existente în limbajul C, precum și să evite legăturile la nume specifice, de exemplu, dacă se preconizează modificarea numelui parametrului în viitor.
Indicatorul „/” completează indicatorul anterior „*”, care separă variabilele pentru care se aplică doar atribuirea sub formă „variabilă=valoare”. De exemplu, în funcția „def f(a, b, /, c, d, *, e, f):” variabilele „a” și „b” pot fi atribuite doar în ordinea enumerării valorilor,
variabilele „e” și „f”, doar prin atribuirea „variabilă=valoare”, iar variabilele „c” și „d” în oricare dintre modurile specificate:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, c=30, d=40, e=50, f=60) - noul API C
pentru configurarea parametrilor de inițializare Python, care oferă un control complet asupra întregului și oferă mijloace avansate de gestionare a erorilor. API-ul propus simplifică integrarea funcționalității interpretului Python în alte aplicații scrise în limbajul C; - noul protocol Vectorcall pentru acces mai rapid la obiectele scrise în limbajul C. În CPython 3.8, accesul la Vectorcall este deocamdată limitat la utilizarea internă, conversia la API-uri publice fiind planificată pentru CPython 3.9.
- apeluri Runtime Audit Hooks, care oferă aplicațiilor și cadrelor de lucru în limbajul Python acces la informații de nivel scăzut despre execuția scriptului pentru a efectua audite ale acțiunilor realizate (de exemplu, se poate urmări importul modulelor, deschiderea fișierelor, utilizarea trasării, accesarea socket-urilor de rețea, executarea codului prin exec, eval și run_mod);
- În modulul suport pentru protocolul Pickle 5, utilizat pentru serializarea și deserializarea obiectelor. Pickle permite optimizarea transferului unor volume mari de date între procesele Python în configurații multi-core și multi-node, reducând numărul de operațiuni de copiere a memoriei și aplicând tehnici suplimentare de optimizare, cum ar fi utilizarea algoritmilor de comprimate specifici pentru anumite date. A cincea versiune a protocolului se remarcă prin adăugarea modului de transmitere separată (out-of-band), în care datele pot fi transmise separat de fluxul principal pickle.
- Versiunea a patra a protocolului Pickle este activată implicit, ceea ce permite o performanță mai bună și o reducere a dimensiunii datelor transmise, comparativ cu versiunea a treia propusă anterior ca fiind implicit;
- În modulul au fost introduse câteva noi funcționalități:
- Clasă pentru array-uri asociative, în care informația despre tipul datelor asociate cheilor este specificată explicit ("TypedDict('Point2D', x=int, y=int, label=str)").
- Tip , care permite limitarea unui parametru sau a unei valori returnate la câteva valori predeterminate ("Literal['connected', 'disconnected']").
- Construcția "" permite definirea valorilor variabilelor, funcțiilor, metodelor și claselor care nu pot fi modificate sau reasignate ("pi: Final[float] = 3.1415926536").
- A fost adăugată posibilitatea asignării unui cache pentru fișierele compilate cu bytecode, păstrat într-o structură de sistem de fișiere separată de directoarele cu cod. Calea pentru salvarea fișierelor cu bytecode este specificată prin variabila sau opțiunea „-X pycache_prefix”;
- posibilitatea de a crea build-uri de depanare Python, care utilizează ABI identic cu versiunea de release, ce permite în build-urile de depanare încărcarea extensiilor scrise în C, compilate pentru versiunile stabile;
- În f-stringuri (literaluri formatate cu prefixul ‘f’) este suportat operatorul «=» (de exemplu, «f'{expr=}'»), care permite transformarea expresiei într-un text pentru a facilita depanarea. De exemplu:
››› user = ‘eric_idle’
››› member_since = date(1975, 7, 31)
››› f'{user=} {member_since=}’
«user=’eric_idle’ member_since=datetime.date(1975, 7, 31)» - Expresia «» este permisă în interiorul blocului ;
- A fost adăugat un nou modul , care permite utilizarea segmentelor de memorie partajată în configurații multi-procesare;
- Pe platforma Windows, implementarea asyncio a fost modificată pentru a utiliza clasa ;
- Performanța instrucțiunii LOAD_GLOBAL a crescut cu aproximativ 40% datorită utilizării unui nou mecanism de caching al codului obiect.
Sursa: opennet.ro
