Lansarea limbajului de programare Python 3.8

După un an și jumătate de dezvoltare prezentat lansare majoră a limbajului de programare Python 3.8. Actualizări corective pentru ramura Python 3.8 este planificat eliberare în termen de 18 luni. Vulnerabilitățile critice vor fi remediate timp de 5 ani până în octombrie 2024. Actualizări corective pentru ramura 3.8 vor fi lansate la fiecare două luni, prima lansare corectivă a Python 3.8.1 fiind programată pentru decembrie.

Printre adăugate inovații:

  • Sprijini operații de atribuire în cadrul expresiilor complexe. Cu noul operator „:=”, este posibil să se efectueze operații de atribuire a valorii în interiorul altor expresii, de exemplu, pentru a evita apelurile de funcții duble în instrucțiunile condiționate și la definirea buclelor:

    dacă (n := len(a)) > 10:
    ...

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

  • Sprijini nouă sintaxă pentru specificarea argumentelor funcției. Când enumerați argumente în timpul definiției unei funcții, acum puteți specifica un „/” pentru a separa argumentele cărora li se pot atribui valori numai în funcție de ordinea în care sunt enumerate valorile în timpul apelului funcției, de argumentele care pot fi atribuite în orice ordine (sintaxă variabilă=valoare) ). Din punct de vedere practic, noua caracteristică permite funcțiilor din Python să emuleze complet comportamentul funcțiilor existente în C și, de asemenea, să evite legarea de nume specifice, de exemplu, dacă numele parametrului este planificat să fie schimbat în viitor.

    Indicatorul „/” completează indicatorul „*” adăugat anterior, separând variabilele pentru care este aplicabilă doar o atribuire în forma „variabilă=valoare”. De exemplu, în funcția „def f(a, b, /, c, d, *, e, f):” variabilele „a” și „b” pot fi atribuite numai în ordinea în care sunt listate valorile ,
    variabilele „e” și „f”, numai prin atribuirea „variabilă=valoare”, și variabilele „c” și „d” în oricare dintre următoarele moduri:

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

  • Adăugat noul C API
    pentru a configura parametrii de inițializare Python, permițând control complet asupra tuturor configurație și furnizarea de facilități avansate de tratare a erorilor. API-ul propus facilitează încorporarea funcționalității interpretului Python în alte aplicații C;

  • Implementat noul protocol Vectorcall pentru acces mai rapid la obiectele scrise în limbaj C. În CPython 3.8, accesul la Vectorcall este încă limitat la uz intern; transferul la categoria de API-uri accesibile public este planificat în CPython 3.9;
  • Adăugat apelează la Runtime Audit Hooks, care oferă aplicațiilor și cadrelor în Python acces la informații de nivel scăzut despre progresul scriptului pentru a audita acțiunile efectuate (de exemplu, puteți urmări importul de module, deschiderea fișierelor, folosind o urmă, accesarea soclurilor de rețea, rularea codului prin exec, eval și run_mod);
  • În modul murătură asigurat suport pentru protocolul Pickle 5, utilizat pentru serializarea și deserializarea obiectelor. Pickle vă permite să optimizați transferul de cantități mari de date între procesele Python în configurații cu mai multe nuclee și mai multe noduri prin reducerea numărului de operațiuni de copiere a memoriei și aplicarea unor tehnici suplimentare de optimizare, cum ar fi utilizarea algoritmilor de compresie specifici datelor. A cincea versiune a protocolului se remarcă prin adăugarea unui mod de transmisie în afara benzii, în care datele pot fi transmise separat de fluxul principal pickle.
  • În mod implicit, este activată cea de-a patra versiune a protocolului Pickle care, în comparație cu cea de-a treia versiune oferită anterior implicit, permite performanțe mai mari și o reducere a dimensiunii datelor transmise;
  • În modul dactilografiere Sunt introduse mai multe funcții noi:
    • clasă TypedDict pentru tablourile asociative în care informațiile de tip sunt specificate în mod explicit pentru datele asociate cheilor („TypedDict('Point2D', x=int, y=int, label=str)”).
    • Tip literal, care vă permite să limitați un parametru sau să returnați o valoare la câteva valori predefinite ("Literal['conectat', 'dezconectat']”).
    • Constructie "Final", ceea ce face posibilă definirea valorilor variabilelor, funcțiilor, metodelor și claselor care nu pot fi modificate sau reatribuite ("pi: Final[float] = 3.1415926536").
  • S-a adăugat posibilitatea de a atribui un cache pentru fișierele compilate cu bytecode, salvate într-un arbore FS separat și separate de directoare cu codul. Calea pentru salvarea fișierelor cu bytecode este setată printr-o variabilă PYTHONPYCACHEPREFIX sau opțiunea „-X pycache_prefix”;
  • Implementat capacitatea de a crea build-uri de depanare ale Python care utilizează un ABI identic cu versiunea, care vă permite să încărcați extensii scrise în limbaj SI, compilate pentru versiuni stabile, în build-uri de depanare;
  • F-strings (literale formatate prefixate cu „f”) oferă suport pentru operatorul = (de exemplu, „f’{expr=}’”), care vă permite să convertiți o expresie în text pentru o depanare mai ușoară. De exemplu:

    ››› utilizator = 'eric_idle'
    ››› member_since = data(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    „user='eric_idle' member_since=datetime.date(1975, 7, 31)”

  • Expresie "continua» permis să fie folosit în interiorul unui bloc in cele din urma;
  • S-a adăugat un nou modul multiprocesare.memorie_partajată, permițând utilizarea segmentelor de memorie partajată în configurații multiproces;
  • Pe platforma Windows, implementarea asyncio a fost mutată pentru a utiliza clasa ProactorEventLoop;
  • Performanța instrucțiunii LOAD_GLOBAL a fost crescută cu aproximativ 40% datorită utilizării unui nou mecanism de stocare în cache a codului obiect.

Sursa: opennet.ru

Adauga un comentariu