Llançament del llenguatge de programació Python 3.8

Després d'un any i mig de desenvolupament presentat versió principal del llenguatge de programació 3.8 Python. Actualitzacions correctives per a la branca de Python 3.8 es planifica alliberament en 18 mesos. Les vulnerabilitats crítiques es solucionaran durant 5 anys fins a l'octubre de 2024. Les actualitzacions correctives per a la branca 3.8 es publicaran cada dos mesos, amb la primera versió correctiva de Python 3.8.1 programada per al desembre.

Entre els afegits innovacions:

  • suport operacions d'assignació dins d'expressions complexes. Amb el nou operador “:=”, és possible realitzar operacions d'assignació de valors dins d'altres expressions, per exemple, per evitar trucades de doble funció en declaracions condicionals i quan es defineixen bucles:

    si (n := len(a)) > 10:
    ...

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

  • suport nova sintaxi per especificar arguments de funció. Quan s'enumeren arguments durant la definició d'una funció, ara podeu especificar un "/" per separar els arguments als quals només es poden assignar valors en funció de l'ordre en què s'enumeren els valors durant la crida de la funció, dels arguments que es poden assignar. en qualsevol ordre (sintaxi variable=valor)). Pel que fa a la pràctica, la nova característica permet que les funcions de Python emulin completament el comportament de les funcions existents en C, i també per evitar l'enllaç a noms específics, per exemple, si es preveu canviar el nom del paràmetre en el futur.

    El senyalador "/" complementa el senyalador "*" afegit anteriorment, separant les variables per a les quals només s'aplica una assignació en la forma "variable=valor". Per exemple, a la funció "def f(a, b, /, c, d, *, e, f):" les variables "a" i "b" només es poden assignar en l'ordre en què es mostren els valors ,
    variables "e" i "f", només mitjançant l'assignació "variable=valor" i les variables "c" i "d" de qualsevol de les maneres següents:

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

  • Afegit nova API C
    per configurar els paràmetres d'inicialització de Python, permetent un control complet sobre tot configuració i proporcionar instal·lacions avançades de gestió d'errors. L'API proposada facilita la incorporació de la funcionalitat d'intèrpret de Python a altres aplicacions C;

  • Implementat nou protocol Vectorcall per a un accés més ràpid als objectes escrits en llenguatge C. A CPython 3.8, l'accés a Vectorcall encara està limitat a l'ús intern; la transferència a la categoria d'API d'accés públic està prevista a CPython 3.9;
  • Afegit crida a Runtime Audit Hooks, que proporcionen aplicacions i marcs en Python amb accés a informació de baix nivell sobre el progrés de l'script per auditar les accions realitzades (per exemple, podeu fer un seguiment de la importació de mòduls, obrir fitxers, utilitzar un rastre, etc.). accedir als endolls de xarxa, executar codi mitjançant exec, eval i run_mod);
  • En el mòdul escabetx assegurat suport per al protocol Pickle 5, utilitzat per serialitzar i deserialitzar objectes. Pickle us permet optimitzar la transferència de grans quantitats de dades entre processos de Python en configuracions de diversos nuclis i multinodes reduint el nombre d'operacions de còpia de memòria i aplicant tècniques d'optimització addicionals, com ara l'ús d'algoritmes de compressió específics de dades. La cinquena versió del protocol destaca per l'addició d'un mode de transmissió fora de banda, en què les dades es poden transmetre per separat del flux de pickle principal.
  • Per defecte, s'activa la quarta versió del protocol Pickle que, en comparació amb la tercera versió que s'oferia anteriorment per defecte, permet un major rendiment i una reducció de la mida de les dades transmeses;
  • En el mòdul escrivint S'introdueixen diverses funcions noves:
    • Classe TypedDict per a matrius associatives en què la informació de tipus s'especifica explícitament per a les dades associades a les claus (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Tipus Literal, que us permet limitar un paràmetre o un valor de retorn a uns quants valors predefinits ("Literal['connected', 'disconnected']").
    • Construcció "final", que permet definir els valors de variables, funcions, mètodes i classes que no es poden canviar ni reassignar ("pi: Final[float] = 3.1415926536").
  • S'ha afegit la possibilitat d'assignar una memòria cau per a fitxers compilats amb bytecode, desat en un arbre FS separat i separat dels directoris amb el codi. El camí per desar fitxers amb bytecode s'estableix mitjançant una variable PYTHONPYCACHEPREFIX o l'opció "-X pycache_prefix";
  • Implementat la possibilitat de crear versions de depuració de Python que utilitzen un ABI idèntic a la versió, que permet carregar extensions escrites en llenguatge SI, compilades per a versions estables, en versions de depuració;
  • Les cadenes f (literals amb format prefixats amb 'f') ofereixen suport per a l'operador = (per exemple, "f'{expr=}'"), que us permet convertir una expressió en text per facilitar la depuració. Per exemple:

    ››› usuari = 'eric_idle'
    ››› membre_des de = data (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Expressió "continuar» es pot utilitzar dins d'un bloc finalment;
  • S'ha afegit un nou mòdul multiprocessament.memoria_compartida, permetent l'ús de segments de memòria compartida en configuracions multiprocés;
  • A la plataforma Windows, la implementació asyncio s'ha mogut per utilitzar la classe ProactorEventLoop;
  • El rendiment de la instrucció LOAD_GLOBAL s'ha augmentat aproximadament un 40% a causa de l'ús d'un nou mecanisme de memòria cau del codi objecte.

Font: opennet.ru

Afegeix comentari