Python 3.11 llega con mejoras de rendimiento, rediseño en almacenamiento en caché y mas
Después de un año de desarrollo, se ha publicado la nueva versión del lenguaje de programación Python 3.11, la nueva rama será compatible durante un año y medio, después de lo cual se formarán parches con vulnerabilidades durante otros tres años y medio.
Al mismo tiempo, comenzaron las pruebas alfa de la rama Python 3.12 (de acuerdo con el nuevo cronograma de desarrollo, el trabajo en una nueva rama comienza cinco meses antes del lanzamiento de la rama anterior y llega a la etapa de prueba alfa en el momento de la próxima versión).
La rama de Python 3.12 estará en versiones alfa durante siete meses, durante los cuales se agregarán nuevas funciones y se corregirán errores. Después de eso, se realizarán pruebas beta durante tres meses, durante los cuales se prohibirá la adición de nuevas funciones y se prestará toda la atención a la corrección de errores. Los últimos dos meses antes del lanzamiento, la sucursal estará en la etapa de candidato a lanzamiento, momento en el que se realizará la estabilización final.
Principales novedades de Python 3.11
En esta nueva versión se han realizado un trabajo significativo para optimizar el rendimiento, pues la nueva rama incluye cambios relacionados con la aceleración y el despliegue en línea de llamadas a funciones, el uso de intérpretes rápidos de operaciones típicas, así como optimizaciones preparadas por los proyectos Cinder y HotPy. Según el tipo de carga, la velocidad de ejecución del código aumenta entre un 10 % y un 60 %. En promedio, el rendimiento al pasar el conjunto de pruebas de pyperformance aumentó en un 25 %.
Se ha rediseñado el mecanismo de almacenamiento en caché del código de bytes, lo que se redujo el tiempo de inicio del intérprete en un 10-15 %. Los objetos con código y código de bytes ahora son asignados estáticamente por el intérprete, lo que hizo posible eliminar las etapas de desentrañar el código de bytes extraído del caché y convertir objetos con código para colocarlos en la memoria dinámica.
Se agregó soporte para grupos de excepciones, lo que le da al programa la capacidad de generar y procesar varias excepciones diferentes al mismo tiempo. Se proponen nuevos tipos de excepciones ExceptionGroup y BaseExceptionGroup para agrupar varias excepciones y juntarlas, y se agrega la expresión «except* «para separar las excepciones de un grupo.
Se ha agregado un tipo LiteralString especial que solo puede incluir cadenas literales que sean compatibles con el tipo LiteralString (es decir, cadenas desnudas y cadenas del tipo LiteralString, pero no cadenas arbitrarias o combinadas del tipo str). El tipo LiteralString se puede usar para limitar el paso de argumentos de cadena a funciones, la sustitución arbitraria de partes de cadenas en las que puede generar vulnerabilidades, por ejemplo, al generar cadenas para consultas SQL o comandos de shell.
Ademas de ello, tambien se proporciona la capacidad de marcar elementos individuales de diccionarios escritos (TypedDict) con marcas Requerido y No requerido para determinar los campos obligatorios y opcionales (de manera predeterminada, todos los campos declarados son obligatorios si el parámetro total no se establece en Falso).
Se agregó el decorador de clase, método y función @dataclass_transform, cuando se especifica, el verificador de tipo estático trata el objeto como si usara el decorador @dataclasses.dataclass.
De los demás cambios que se destacan de esta nueva versión:
- Se agregó la capacidad de usar agrupación atómica ((?>…)) y cuantificadores celosos (posesivos) (*+, ++, ?+, {m,n}+) en expresiones regulares.
- Se ha agregado el tipo TypeVarTuple, que permite el uso de genéricos variables, a diferencia de TypeVar, que cubre no un tipo, sino un número arbitrario de tipos.
- La biblioteca estándar incluye el módulo tomllib con funciones para analizar el formato TOML.
- El método add_note() se agregó a la clase BaseException, que permite adjuntar una nota de texto a la excepción, por ejemplo, para agregar información contextual que no estaba disponible en el momento en que se lanzó la excepción.
- Se ha agregado un tipo especial Self para representar la clase privada actual. Self se puede usar para anotar métodos que devuelven una instancia de su clase de una manera más simple que usar TypeVar.
- Se agregó la opción de línea de comando «-P» y la variable de entorno PYTHONSAFEPATH para deshabilitar la conexión automática de rutas de archivos potencialmente inseguras a sys.path.
- La utilidad py.exe para la plataforma Windows se ha mejorado significativamente para admitir la sintaxis «-V:<empresa>/<etiqueta>» además de «-<principal>.<menor>».
- Muchas macros de la API de C se han convertido en funciones en línea regulares o estáticas
- Los módulos uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev y sunau han quedado obsoletos y se eliminarán en Python. 3.13 liberación.
- Se eliminaron las funciones de PyUnicode_Encode*.
- La clase TaskGroup se agregó al módulo asyncio con la implementación de un administrador de contexto asíncrono que espera a que se complete el grupo de tareas.
- La adición de tareas a un grupo se realiza mediante el método create_task().
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.