Lanzamiento del lenguaje de programación Python 3.8

Después de un año y medio de desarrollo presentado lanzamiento importante del lenguaje de programación 3.8 Python. Actualizaciones correctivas para la rama Python 3.8 planeado liberación dentro de 18 meses. Las vulnerabilidades críticas se solucionarán durante 5 años, hasta octubre de 2024. Las actualizaciones correctivas para la rama 3.8 se lanzarán cada dos meses, y la primera versión correctiva de Python 3.8.1 está programada para diciembre.

Entre los agregados innovaciones:

  • Apoyar operaciones de asignación dentro de expresiones complejas. Con el nuevo operador “:=", es posible realizar operaciones de asignación de valores dentro de otras expresiones, por ejemplo, para evitar llamadas a funciones dobles en sentencias condicionales y al definir bucles:

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

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

  • Apoyar Nueva sintaxis para especificar argumentos de función. Al enumerar argumentos durante la definición de una función, ahora puede especificar un "/" para separar los argumentos a los que solo se les pueden asignar valores según el orden en que se enumeran los valores durante la llamada a la función, de los argumentos que se pueden asignar. en cualquier orden (sintaxis variable=valor)). Desde el punto de vista práctico, la nueva característica permite que las funciones en Python emulen completamente el comportamiento de funciones existentes en C, y también evitar la vinculación a nombres específicos, por ejemplo, si se planea cambiar el nombre del parámetro en el futuro.

    El indicador "/" complementa el indicador "*" agregado anteriormente, separando las variables para las cuales solo es aplicable una asignación en el formato "variable=valor". Por ejemplo, en la función "def f(a, b, /, c, d, *, e, f):" las variables "a" y "b" solo se pueden asignar en el orden en que se enumeran los valores. ,
    las variables “e” y “f”, únicamente mediante la asignación “variable=valor”, y las variables “c” y “d” de cualquiera de las siguientes formas:

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

  • Добавлен nueva API C
    para configurar los parámetros de inicialización de Python, permitiendo un control completo sobre todos configuración y proporcionar instalaciones avanzadas de manejo de errores. La API propuesta facilita la incorporación de la funcionalidad del intérprete de Python en otras aplicaciones C;

  • Implementado Nuevo protocolo Vectorcall para un acceso más rápido a objetos escritos en lenguaje C. En CPython 3.8, el acceso a Vectorcall todavía está limitado al uso interno; en CPython 3.9 está prevista la transferencia a la categoría de API de acceso público;
  • Adicional llamadas a Runtime Audit Hooks, que brindan a las aplicaciones y marcos en Python acceso a información de bajo nivel sobre el progreso del script para auditar las acciones realizadas (por ejemplo, puede rastrear la importación de módulos, abrir archivos, usar un seguimiento, acceder a sockets de red, ejecutar código a través de exec, eval y run_mod);
  • en el modulo conservar en vinagre proporcionado soporte para el protocolo Pickle 5, utilizado para serializar y deserializar objetos. Pickle le permite optimizar la transferencia de grandes cantidades de datos entre procesos de Python en configuraciones de múltiples núcleos y múltiples nodos al reducir la cantidad de operaciones de copia de memoria y aplicar técnicas de optimización adicionales, como el uso de algoritmos de compresión específicos de datos. La quinta versión del protocolo se destaca por la adición de un modo de transmisión fuera de banda, en el que los datos se pueden transmitir por separado del flujo principal de pickle.
  • Por defecto está activada la cuarta versión del protocolo Pickle que, en comparación con la tercera versión ofrecida anteriormente por defecto, permite un mayor rendimiento y una reducción en el tamaño de los datos transmitidos;
  • en el modulo escribiendo Se introducen varias características nuevas:
    • clase MecanografiadoDict para matrices asociativas en las que la información de tipo se especifica explícitamente para los datos asociados con las claves (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • tipo literal, que le permite limitar un parámetro o valor de retorno a unos pocos valores predefinidos ("Literal['conectado', 'desconectado']").
    • Construcción "Final", que permite definir los valores de variables, funciones, métodos y clases que no se pueden cambiar ni reasignar ("pi: Final[float] = 3.1415926536").
  • Se agregó la capacidad de asignar un caché para archivos compilados con código de bytes, guardados en un árbol FS separado y separados de los directorios con el código. La ruta para guardar archivos con código de bytes se establece mediante una variable PREFIJO DE PYTHONPYCACHE o la opción "-X pycache_prefix";
  • Implementado la capacidad de crear compilaciones de depuración de Python que utilizan una ABI idéntica a la versión, lo que le permite cargar extensiones escritas en lenguaje SI, compiladas para versiones estables, en compilaciones de depuración;
  • Las cadenas f (literales formateados con el prefijo 'f') brindan soporte para el operador = (por ejemplo, "f'{expr=}'"), que le permite convertir una expresión en texto para facilitar la depuración. Por ejemplo:

    ››› usuario = 'eric_idle'
    ››› miembro_desde = fecha(1975, 7, 31)
    ››› f'{usuario=} {miembro_since=}'
    "usuario='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Expresión "continue» permitido su uso dentro de un bloque finalmente;
  • Nuevo módulo agregado multiprocesamiento.memoria_compartida, permitiendo el uso de segmentos de memoria compartida en configuraciones multiproceso;
  • En la plataforma Windows, la implementación de asyncio se ha movido para usar la clase ProactorEventLoop;
  • El rendimiento de la instrucción LOAD_GLOBAL se ha incrementado en aproximadamente un 40% debido al uso de un nuevo mecanismo de almacenamiento en caché de código objeto.

Fuente: opennet.ru

Añadir un comentario