Después de año y medio de desarrollo una versión significativa del lenguaje de programación . Actualizaciones de corrección para la rama Python 3.8 se lanzarán durante 18 meses. Las vulnerabilidades críticas se corregirán durante 5 años hasta octubre de 2024. Las actualizaciones de corrección para la rama 3.8 se lanzarán cada dos meses, con el primer lanzamiento de corrección Python 3.8.1 programado para diciembre.
Entre los añadidos :
- 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 dobles llamadas a funciones en declaraciones condicionales y al definir bucles:
if (n := len(a)) > 10:
…while (block := f.read(256)) != »:
… - nueva sintaxis para definir argumentos de función. Al enumerar argumentos durante la definición de una función, ahora se puede indicar el marcador «/», que permite separar los argumentos cuyos valores solo pueden ser asignados en función del orden en que se enumeran en la llamada de función de los argumentos que permiten asignaciones en cualquier orden (sintaxis «variable=valor»). Desde un punto de vista práctico, esta nueva característica permite en funciones en Python emular completamente el comportamiento de funciones existentes en C, así como evitar vinculaciones a nombres específicos, por ejemplo, si se planea cambiar el nombre del parámetro en el futuro.
La bandera «/» complementa el marcador «*» previamente añadido, que separa las variables para las que solo se aplica la asignación en forma de «variable=valor». Por ejemplo, en la función «def f(a, b, /, c, d, *, e, f):», las variables «a» y «b» solo pueden ser asignadas en el orden en que se enumeran los valores,
las variables «e» y «f», solo a través de la asignación «variable=valor», mientras que las variables «c» y «d» pueden ser asignadas de cualquiera de las maneras mencionadas:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, c=30, d=40, e=50, f=60) - nuevo API de C
para configurar parámetros de inicialización de Python, que permite controlar completamente todo y proporciona herramientas avanzadas para el manejo de errores. El API propuesto simplifica la integración de la funcionalidad del intérprete de Python en otras aplicaciones en C; - nuevo protocolo Vectorcall para un acceso más rápido a objetos escritos en C. En CPython 3.8, el acceso a Vectorcall está actualmente limitado a uso interno, la disponibilidad públicamente accesible del API está prevista para CPython 3.9.
- llamadas a Runtime Audit Hooks, que proporcionan a las aplicaciones y marcos en Python acceso a información de bajo nivel sobre la ejecución del script para realizar auditorías de las acciones realizadas (por ejemplo, se puede rastrear la importación de módulos, apertura de archivos, uso de rastreo, acceso a sockets de red, ejecución de código a través de exec, eval y run_mod);
- En el módulo soporte para el protocolo Pickle 5, utilizado para la serialización y deserialización de objetos. Pickle permite optimizar la transmisión de grandes volúmenes de datos entre procesos Python en configuraciones de múltiples núcleos y nodos, reduciendo el número de operaciones de copia de memoria y aplicando técnicas adicionales de optimización, como el uso de algoritmos de compresión específicos para determinados tipos de datos. La quinta versión del protocolo se destaca por la inclusión del modo de transmisión separada (out-of-band), donde los datos pueden ser transmitidos por separado del flujo principal de pickle.
- Por defecto, se activa la cuarta versión del protocolo Pickle, que en comparación con la tercera versión, que anteriormente se ofrecía como predeterminada, permite lograr un rendimiento más alto y reducción del tamaño de los datos transmitidos;
- En el módulo se han presentado varias nuevas características:
- Clase para arreglos asociativos, en los que se asigna explícitamente información de tipo a los datos vinculados a las claves ("TypedDict('Point2D', x=int, y=int, label=str)").
- Tipo , que permite restringir un parámetro o valor de retorno a varios valores predefinidos ("Literal['connected', 'disconnected']").
- La construcción "", que permite definir valores de variables, funciones, métodos y clases que no pueden ser cambiados o reasignados ("pi: Final[float] = 3.1415926536").
- Se añade la posibilidad de asignar un caché para los archivos compilados con bytecode, que se guarda en un árbol de sistema de archivos separado de los directorios de código. La ruta para guardar los archivos de bytecode se define a través de la variable o la opción "-X pycache_prefix";
- la posibilidad de crear builds de depuración de Python que usan un ABI idéntico al de la versión de lanzamiento, lo que permite cargar extensiones escritas en C compiladas para versiones estables en builds de depuración;
- En las f-strings (literales formatados con el prefijo ‘f’) se incluye soporte para el operador «=» (por ejemplo, «f'{expr=}'»), que permite convertir una expresión en texto para facilitar la depuración. Por ejemplo:
››› usuario = ‘eric_idle’
››› miembro_desde = date(1975, 7, 31)
››› f'{usuario=} {miembro_desde=}’
«usuario=’eric_idle’ miembro_desde=datetime.date(1975, 7, 31)» - La expresión «» se permite utilizar dentro del bloque ;
- Se agregó un nuevo módulo , que permite usar segmentos de memoria compartida en configuraciones multiprocesadas;
- En la plataforma Windows, la implementación de asyncio se ha traducido para utilizar la clase ;
- El rendimiento de la instrucción LOAD_GLOBAL ha aumentado aproximadamente un 40% gracias al uso de un nuevo mecanismo de caché de código de objeto.
Fuente: opennet.ru
