Lanzamento da linguaxe de programación Python 3.8

Despois de ano e medio de desenvolvemento presentado versión principal da linguaxe de programación python 3.8. Actualizacións correctivas para a rama de Python 3.8 planifícase liberación nun prazo de 18 meses. As vulnerabilidades críticas arranxaranse durante 5 anos ata outubro de 2024. As actualizacións correctivas para a rama 3.8 publicaranse cada dous meses, sendo a primeira versión correctiva de Python 3.8.1 programada para decembro.

Entre os engadidos innovacións:

  • Apoiar operacións de asignación dentro de expresións complexas. Co novo operador “:=", é posible realizar operacións de asignación de valores dentro doutras expresións, por exemplo, para evitar chamadas de funcións dobres en instrucións condicionais e cando se definen bucles:

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

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

  • Apoiar nova sintaxe para especificar argumentos de función. Ao enumerar argumentos durante a definición dunha función, agora pode especificar un "/" para separar os argumentos aos que só se lles pode asignar valores en función da orde na que se enumeran os valores durante a chamada da función, dos argumentos que se poden asignar. en calquera orde (sintaxe de variable=valor) ). No lado práctico, a nova característica permite que as funcións en Python emulen completamente o comportamento das funcións existentes en C e tamén eviten vincularse a nomes específicos, por exemplo, se se planea cambiar o nome do parámetro no futuro.

    A marca "/" complementa a marca "*" engadida anteriormente, separando as variables para as que só é aplicable unha asignación na forma "variable=valor". Por exemplo, na función "def f(a, b, /, c, d, *, e, f):" as variables "a" e "b" só se poden asignar na orde en que aparecen os valores. ,
    variables “e” e “f”, só mediante a asignación “variable=valor” e as variables “c” e “d” de calquera das seguintes formas:

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

  • Engadido nova API C
    para configurar os parámetros de inicialización de Python, permitindo un control total sobre todo configuración e proporcionar facilidades avanzadas de manexo de erros. A API proposta facilita a incorporación da funcionalidade do intérprete de Python noutras aplicacións C;

  • Implementado novo protocolo Vectorcall para un acceso máis rápido a obxectos escritos en linguaxe C. En CPython 3.8, o acceso a Vectorcall aínda está limitado ao uso interno; a transferencia á categoría de API de acceso público está prevista en CPython 3.9;
  • Engadido chamadas a Runtime Audit Hooks, que proporcionan ás aplicacións e frameworks en Python acceso a información de baixo nivel sobre o progreso do script para auditar as accións realizadas (por exemplo, pode realizar un seguimento da importación de módulos, abrir ficheiros, utilizar un rastrexo, etc.). acceder a sockets de rede, executar código a través de exec, eval e run_mod);
  • No módulo escabeche asegurado soporte para o protocolo Pickle 5, usado para serializar e deserializar obxectos. Pickle permítelle optimizar a transferencia de grandes cantidades de datos entre os procesos de Python en configuracións de varios núcleos e varios nodos, reducindo o número de operacións de copia de memoria e aplicando técnicas de optimización adicionais, como o uso de algoritmos de compresión específicos de datos. A quinta versión do protocolo destaca pola adición dun modo de transmisión fóra de banda, no que os datos poden transmitirse por separado do fluxo principal.
  • Por defecto, está activada a cuarta versión do protocolo Pickle que, en comparación coa terceira versión ofrecida anteriormente por defecto, permite un maior rendemento e unha redución do tamaño dos datos transmitidos;
  • No módulo escribindo Introdúcense varias características novas:
    • Clase Dict escrito para matrices asociativas nas que se especifica explícitamente a información de tipo para os datos asociados ás claves (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Tipo Literal, que permite limitar un parámetro ou valor de retorno a uns poucos valores predefinidos ("Literal['conectado', 'desconectado']").
    • Construción"Final", que permite definir os valores de variables, funcións, métodos e clases que non se poden cambiar ou reasignar ("pi: Final[float] = 3.1415926536").
  • Engadida a posibilidade de asignar unha caché para ficheiros compilados con bytecode, gardado nunha árbore FS separada e separada dos directorios co código. A ruta para gardar ficheiros con bytecode establécese mediante unha variable PYTHONPYCACHEPREFIX ou a opción "-X pycache_prefix";
  • Implementado a capacidade de crear compilacións de depuración de Python que usen un ABI idéntico á versión, que lle permite cargar extensións escritas en linguaxe SI, compiladas para versións estables, en compilacións de depuración;
  • As cadeas f (literais formateados con prefixo 'f') ofrecen soporte para o operador = (por exemplo, "f'{expr=}'"), que lle permite converter unha expresión en texto para facilitar a depuración. Por exemplo:

    ››› usuario = 'eric_idle'
    ››› membro_desde = data (1975, 7, 31)
    ››› f'{usuario=} {membro_desde=}'
    "usuario='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Expresión "continuar» permitido para ser usado dentro dun bloque finalmente;
  • Engadiuse un novo módulo multiprocesamento.memoria_compartida, permitindo o uso de segmentos de memoria compartida en configuracións multiproceso;
  • Na plataforma Windows, a implementación de asyncio foi movida para usar a clase ProactorEventLoop;
  • O rendemento da instrución LOAD_GLOBAL aumentou aproximadamente un 40 % debido ao uso dun novo mecanismo de almacenamento en caché de código obxecto.

Fonte: opennet.ru

Engadir un comentario