Llega la nueva version estable de Python 3.12 y estas son sus novedades
Después de un año de desarrollo, se dio a conocer el lanzamiento la versión estable y también del inicio de la fase de pruebas alfa, del lenguaje de programación Python 3.12 y Python 3.13 (respectivamente) . Se menciona que esta nueva rama de Python 3.12 recibirá soporte durante un año y medio, después del cual, durante otros tres años y medio, se generarán correcciones para eliminar vulnerabilidades.
La nueva versión que se presenta de Python 3.12 llega con mejoras en la flexibilidad del analizis de «f-strings». Con esta mejora ahora es posible dejar de lado muchas restricciones, ya que por ejemplo ahora se puede contener cualquier expresión válida en Python, incluidas expresiones multilínea, comentarios, barras invertidas y secuencias de escape Unicode. Además, los strings internos ahora permite reutilizar las mismas comillas es decir, las comillas dobles ahora se pueden reutilizar en el interior sin tener que cambiar a comillas simples.
Por ejemplo :
f"""{f'''{f'{f"{1+1}"}'}'''}"""
Ahora es posible anidar de forma arbitraria:
f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}"
Otro de los cambios que se destaca, es el soporte para subintérpretes aislados y bloqueos globales separados, los cuales llegan para aumentar la eficiencia del uso de recursos en sistemas multinúcleo, ya que para diferentes intérpretes dentro de un proceso CPython permite ejecutar varios intérpretes a la vez en un proceso. En su forma actual, la función actualmente solo está disponible a través de C-API (la compatibilidad con la API de Python aparecerá en la siguiente rama importante).
Ademas de ello, también se destaca que se ha aumentado el contenido informativo de los mensajes de error y se ha ampliado la gama de excepciones, ofreciendo recomendaciones para eliminar errores tipográficos. Por ejemplo, ahora se muestran recomendaciones para importar módulos de biblioteca estándar olvidados y sugerencias para agregar el prefijo «self»
Se agregó la capacidad de usar el protocolo de búfer en el código Python. Las clases que proporcionan un método » __buffer__() » ahora se pueden usar como tipos que operan directamente con datos binarios en la memoria.
El módulo sys.monitoring se propone para la depuración y creación de perfiles, lo que le permite monitorear eventos en CPython como llamadas, retornos de funciones, ejecución de líneas arbitrarias de código, excepciones y transiciones con una sobrecarga mínima.
El intérprete implementa soporte para el subsistema de rendimiento del kernel de Linux, que permite determinar los nombres de las funciones de Python al crear perfiles utilizando la utilidad de rendimiento (anteriormente, solo los nombres de las funciones de C se determinaban en los seguimientos).
Por la parte de las mejoras de rendimiento, se menciona que se continuó con las optimizaciones, con la cual se ha obtenido una ganancia total de rendimiento que se estima en un 5%, asi mismo se agregó soporte experimental para el optimizador binario BOLT al proceso de compilación, lo que aumenta el rendimiento entre un 1 y un 5 %, mientras que el rendimiento del paquete asyncio ha mejorado significativamente (algunas pruebas muestran una aceleración del 75%).
Se ha implementado la expansión en línea de las listas por comprensión , lo que acelera el trabajo con listas por comprensión hasta dos veces (para el código que utiliza activamente listas por comprensión, las pruebas mostraron un aumento general del rendimiento del 11%).
Para mejorar la seguridad, las implementaciones integradas de los algoritmos SHA1, SHA3, SHA2-384, SHA2-512 y MD5 en hashlib se han reemplazado con opciones formalmente verificadas del proyecto HACL* (las implementaciones integradas se utilizan únicamente si OpenSSL no está disponible).
De los demás cambios que se destacan:
- El módulo os ha ampliado el soporte para Windows.
- Python implementa protección contra desbordamiento de pila.
Se ha acelerado la creación de la clase asyncio.Task. - El tamaño de los objetos Unicode se ha reducido entre 8 y 16 bytes.
- Se han acelerado las operaciones con expresiones regulares re.sub(), re.subn() y re.Pattern.
- La ejecución de comprobaciones isinstance() para algunos protocolos se ha acelerado de 2 a 20 veces.
- Significativamente (en algunas pruebas hasta un 64%) las funciones tokenize.tokenize() y tokenize.generate_tokens() se han acelerado.
- Se ha acelerado la carga de atributos y la llamada al método super().
- Se ha propuesto una nueva sintaxis de anotación de tipo más compacta para clases y funciones genéricas
- El módulo del navegador web ya no admite navegadores más antiguos, incluidos Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird y Firefox hasta la versión 36.
- En preparación para futuras optimizaciones, se ha cambiado la representación interna de los números enteros.
Por último y no menos importante, como se menciono, se han iniciado las pruebas alfa de Python 3.13, en las que apareció un modo de compilación CPython sin un bloqueo de intérprete global (GIL, Global Interpreter Lock).
La rama Python 3.13 estará en versión alfa durante siete meses, durante los cuales se agregarán nuevas características y se corregirán errores 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 por el momento de la próxima versión llega a la etapa de prueba alfa.
Después de esto, las versiones beta se probarán durante tres meses, durante los cuales se prohibirá agregar nuevas funciones y se prestará toda la atención a corregir errores. Durante los dos últimos meses antes de la liberación, la sucursal estará en la etapa de candidato a liberación, en la que se realizará la estabilización final.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.