Se acaba de lanzar la primera versión beta de Python 3.13. Este artículo presenta un resumen de las características nuevas más importantes de Python 3.13 y lo que significan para los desarrolladores de Python. Las cosas pueden cambiar desde ahora hasta la primera versión de producción de 3.13, pero la primera versión beta significa que todas las adiciones y cambios de funciones principales ahora están congeladas. Nuevas funciones en la primera versión beta de Python 3.13 Aquí hay un primer vistazo a estas nuevas funciones en la versión beta de Python 3.13 : El JIT experimental La compilación sin GIL de Python Un nuevo REPL Mensajes de error mejorados Mejoras en los tipos de Python No más «baterías agotadas» El JITPython 3.11 experimental introdujo el intérprete adaptativo especializado. Cuando el intérprete detecta que algunas operaciones involucran previsiblemente los mismos tipos, esas operaciones son «especializadas». El código de bytes genérico utilizado para ese código se intercambia con un código de bytes específico para trabajar con esos tipos, lo que ofrece aumentos de velocidad del 10% al 25% para esas regiones del código. Python 3.12 trajo más especializaciones y otras mejoras al intérprete. Ahora, Python 3.13 agrega nuevos elementos al JIT que generan código de máquina real en tiempo de ejecución, en lugar de solo código de bytes especializado. La aceleración resultante no es mucha todavía (tal vez un 5%), pero allana el camino para futuras optimizaciones que antes no eran posibles. En este momento, el JIT se considera experimental: no está habilitado de forma predeterminada y solo puede habilitarse mediante compilando CPython desde la fuente con ciertos indicadores. Si con el tiempo produce un aumento significativo del rendimiento (5% o más) y no impone una gran carga de administración al equipo de CPython o a los usuarios de Python en su conjunto, se convertirá en una opción de compilación totalmente compatible. Si se habilitará o no para los lanzamientos oficiales seguirá dependiendo de los administradores de las compilaciones de CPython de una plataforma determinada. La compilación de Python sin GIL y con subprocesos libres El término oficial para posibles versiones futuras de CPython sin bloqueo global de intérprete ( o GIL) es «CPython de subproceso libre». Esta compilación de CPython permite que los subprocesos se ejecuten completamente en paralelo, sin mediación del GIL. Con ese fin, el trabajo vinculado a la CPU que alguna vez solo se benefició de ejecutarse en múltiples procesos puede ejecutarse en múltiples subprocesos. CPython de subprocesos libres también es experimental. No está habilitado de forma predeterminada en las compilaciones enviadas, por lo que debe habilitarse en el momento de la compilación. Si el trabajo futuro con las compilaciones de subprocesos libres muestra que puede mejorar el rendimiento de subprocesos múltiples sin afectar el rendimiento de un solo subproceso, se promoverá a una opción totalmente compatible. Con el tiempo, la versión de subprocesos libres de CPython puede convertirse en la predeterminada. Un nuevo REPL El REPL, o intérprete interactivo, se inicia cuando ejecuta Python desde la línea de comandos sin ejecutar un programa. REPL de Python 3.13 tiene mejoras para hacerlo menos pesado y más parecido a un editor real: la salida a la consola ahora tiene el color habilitado de forma predeterminada. Esta mejora proporciona mensajes de error más completos, por ejemplo. Puede abrir el navegador de ayuda interactivo de pydoc presionando F1. Puede explorar el historial de la línea de comandos con F2. Puede pegar grandes bloques de código más fácilmente presionando F3 para habilitar un modo especial de pegado en bloque. Puede simplemente escribir exit o quit, en lugar de exit() o quit(), para salir del REPL. Tenga en cuenta que estas mejoras actualmente solo están disponibles en Linux y macOS. No están disponibles en Microsoft Windows, ni siquiera cuando se utiliza el nuevo host de consola Windows Terminal. Mensajes de error mejorados Los seguimientos de errores en Python se han vuelto más precisos y detallados en las dos últimas versiones. Python 3.13 continúa en esa trayectoria. Si intenta importar algo que tiene el mismo nombre que el módulo actualmente en contexto, Python proporcionará un error detallado a tal efecto y lo alentará a cambiar el nombre del módulo actual. Esta es una fuente muy frecuente de errores, y no sólo para los principiantes. Es un error común nombrar un módulo con el nombre de algo de la biblioteca estándar. Si pasa a una función un argumento de palabra clave incorrecto, el error sugerirá algunos posibles argumentos correctos, según lo que esté disponible en la función que se llama. Mejoras a los tipos de Python El sistema de sugerencias de tipos de Python se ha ampliado en funcionalidad y utilidad con cada nueva versión. La versión 3.13 agrega tres grandes cambios nuevos. Los parámetros de tipo admiten defaultstyping.TypeVar, tipeo.ParamSpec y tipeo.TypeVarTuple le permiten definir valores predeterminados que se usarán si no se especifica ningún tipo explícitamente. Por ejemplo: T = TypeVar(«T», default=str) En los casos en los que T no está definido explícitamente cuando se usa, se supone que str es el valor predeterminado.typing.TypeEs para limitar el tipo. En Python en general, podemos usar isinstance() para Tomar decisiones basándose en si algo es o no de un tipo determinado. tipear.TypeIs nos permite hacer lo mismo en los mecanismos de sugerencia de tipos de Python. De esta manera, las funciones utilizadas para validar si algo es o no un tipo determinado se pueden anotar para mostrar que realizan ese comportamiento de restricción, en lugar de simplemente un tipo de retorno. Esto es útil como una forma de agregar una cobertura precisa del verificador de tipos a esas funciones.typing.ReadOnly para anotaciones de solo lectura. El tipo tiping.TypedDict se creó para anotar diccionarios con tipos fijos para los valores asociados con ciertas claves. escribiendo.Readonly le permite anotar valores específicos en un TypedDict como de solo lectura. Un ejemplo es una lista a la que sólo se puede agregar o extraer, no reemplazar con una cadena u otro tipo. No más «baterías agotadas» Python 3.11 identificó una gran cantidad de módulos de biblioteca estándar de Python que estaban obsoletos y ya no se mantenían. El plan era marcarlos como obsoletos para 3.11 y 3.12 y luego eliminarlos por completo en Python 3.13. A partir de ahora, esas «baterías agotadas» (como se las ha llamado) se eliminan permanentemente. Muchos de los módulos eliminados se pueden reemplazar con módulos de terceros o se puede emular su funcionalidad utilizando otros componentes de biblioteca estándar. Los usuarios también pueden esperar que se produzcan más desaprobaciones en las próximas tres versiones de Python. La mayoría son métodos para varios componentes de biblioteca estándar que rara vez se utilizan o no están documentados. Copyright © 2024 IDG Communications, Inc.