Forum Python

Please or S’enregistrer to create posts and topics.

Première version bêta de Python 3.13

Un nouveau compilateur JIT, la première édition sans GIL de Python, de meilleures erreurs et améliorations de frappe, ainsi que la suppression des piles mortes font tous partie de Python 3.13.

La première version bêta de Python 3.13 vient de sortir. Cet article présente un aperçu des nouvelles fonctionnalités les plus importantes de Python 3.13 et de ce qu'elles signifient pour les développeurs Python. Les choses peuvent changer d'ici la première version de production de la 3.13, mais la première version bêta signifie que tous les ajouts et modifications majeurs des fonctionnalités sont désormais gelés.

Nouvelles fonctionnalités de la première version bêta de Python 3.13

Voici un premier aperçu de ces nouvelles fonctionnalités de la version bêta de Python 3.13 :

  1. Le JIT expérimental
  2. La version sans GIL de Python
  3. Un nouveau REPL
  4. Messages d'erreur améliorés
  5. Améliorations des types Python
  6. Fini les « piles mortes »

Le JIT expérimental

Python 3.11 a introduit l'interprète adaptatif spécialisé. Lorsque l’interprète détecte que certaines opérations impliquent de manière prévisible les mêmes types, ces opérations sont « spécialisées ». Le bytecode générique utilisé pour ce code est remplacé par un bytecode spécifique à l'utilisation de ces types, ce qui offre des augmentations de vitesse allant de 10 % à 25 % pour ces régions du code.

Python 3.12 a apporté davantage de spécialisations et d'autres améliorations à l'interpréteur. Désormais, Python 3.13 ajoute de nouveaux éléments au JIT qui génèrent du code machine réel au moment de l'exécution, au lieu d'un simple bytecode spécialisé. L’accélération qui en résulte n’est pas encore considérable – peut-être 5 % – mais elle ouvre la voie à de futures optimisations qui n’étaient pas possibles auparavant.

À l'heure actuelle, le JIT est considéré comme expérimental : il n'est pas activé par défaut et ne peut être activé qu'en compilant CPython à partir des sources avec certains indicateurs. Si, avec le temps, cela génère une amélioration significative des performances (5 % ou plus) et n'impose pas une charge de gestion importante à l'équipe CPython ou aux utilisateurs de Python dans leur ensemble, cela deviendra une option de construction entièrement prise en charge. Qu’il soit activé ou non pour les versions officielles dépendra toujours des gestionnaires des versions CPython d’une plate-forme donnée.

Cycle de publication de Python

Le langage de programmation Python publie de nouvelles versions chaque année, avec une version bêta avec fonctionnalités verrouillées au cours du premier semestre et la version finale vers la fin de l'année. Les développeurs sont encouragés à essayer cette dernière version sur du code hors production, à la fois pour vérifier qu'elle fonctionne avec vos programmes et pour avoir une idée de si votre code bénéficiera des nouveaux ensembles de fonctionnalités et des améliorations de performances de cette dernière version.
La version « free-thread » de Python sans GIL

Le terme officiel désignant d'éventuelles versions futures de CPython sans Global Interpreter Lock (ou GIL) est « CPython à thread libre ». Cette version CPython permet aux threads de s'exécuter entièrement en parallèle, sans médiation du GIL. À cette fin, le travail lié au processeur qui ne bénéficiait autrefois que d'être exécuté dans plusieurs processus peut s'exécuter dans plusieurs threads.

CPython à thread libre est également expérimental. Il n'est pas activé par défaut dans les versions livrées, il doit donc être activé au moment de la compilation. Si les travaux futurs avec les versions à thread libre montrent qu'elles peuvent améliorer les performances multithread sans affecter les performances à thread unique, elles seront promues au rang d'option entièrement prise en charge. Avec le temps, la version libre de CPython pourrait devenir la version par défaut.

Un nouveau REPL

Le REPL, ou interpréteur interactif, se lance lorsque vous exécutez Python à partir de la ligne de commande sans exécuter de programme. Le REPL de Python 3.13 a des améliorations pour le rendre moins lourd et ressembler davantage à un véritable éditeur :

La sortie vers la console a désormais la couleur activée par défaut. Cette amélioration fournit par exemple des messages d'erreur plus riches.
Vous pouvez ouvrir le navigateur d'aide interactif de pydoc en appuyant sur F1.
Vous pouvez parcourir l'historique de la ligne de commande avec F2.
Vous pouvez coller de gros blocs de code plus facilement en appuyant sur F3 pour activer un mode spécial de collage de blocs.
Vous pouvez simplement taper exit ou quit, au lieu de exit() ou quit(), pour quitter le REPL.

Notez que ces améliorations ne sont actuellement disponibles que sur Linux et macOS. Ils ne sont pas disponibles sur Microsoft Windows, même lorsque vous utilisez le nouvel hôte de la console Windows Terminal.

Messages d'erreur améliorés

Les traces d'erreurs en Python sont devenues plus précises et détaillées au cours des deux dernières versions. Python 3.13 continue sur cette trajectoire.

Si vous essayez d'importer quelque chose qui porte le même nom que le module actuellement en contexte, Python fournira une erreur détaillée à cet effet et vous encouragera à renommer le module actuel. C'est une source de bugs très fréquente, et pas seulement pour les débutants. C'est une erreur courante de nommer un module d'après quelque chose dans la bibliothèque standard.
Si vous transmettez à une fonction un argument de mot-clé incorrect, l'erreur suggérera certains arguments corrects possibles, en fonction de ce qui est disponible dans la fonction appelée.

Améliorations des types Python

Le système d’indication de type de Python s’est étendu en termes de fonctionnalités et d’utilité à chaque nouvelle version. La version 3.13 ajoute trois nouveaux changements majeurs.
Les paramètres de type prennent en charge les valeurs par défaut

typing.TypeVar, typing.ParamSpec et typing.TypeVarTuple vous permettent tous de définir les valeurs par défaut à utiliser si aucun type n'est explicitement spécifié.

Dans les cas où T n'est pas explicitement défini lors de son utilisation, str est supposé être la valeur par défaut.
typing.TypeIs pour le rétrécissement du type

En Python en général, nous pouvons utiliser isinstance() pour prendre des décisions selon que quelque chose est ou non d'un type donné. typing.TypeIs nous permet de faire la même chose dans les mécanismes d'indication de type de Python. De cette façon, les fonctions utilisées pour valider si quelque chose est ou non un type donné peuvent être annotées pour montrer qu'elles exécutent ce comportement de restriction, plutôt qu'un simple type de retour. Ceci est utile pour ajouter une couverture précise du vérificateur de type à ces fonctions.
typing.ReadOnly pour une annotation en lecture seule

Le type typing.TypedDict a été créé pour annoter les dictionnaires avec des types fixes pour les valeurs associées à certaines clés. typing.Readonly vous permet d'annoter des valeurs spécifiques dans un TypedDict en lecture seule. Un exemple est une liste à laquelle vous pouvez uniquement ajouter ou extraire, et non remplacer par une chaîne ou un autre type.

Fini les « piles mortes »

Python 3.11 a identifié un grand nombre de modules de bibliothèque standard Python qui étaient obsolètes et n'étaient plus maintenus. Le plan était de les marquer comme obsolètes pour les versions 3.11 et 3.12, puis de les supprimer entièrement dans Python 3.13. Désormais, ces « batteries mortes » (comme on les appelle) sont définitivement supprimées. La plupart des modules supprimés peuvent être remplacés par des modules tiers, ou leurs fonctionnalités peuvent être émulées à l'aide d'autres composants de bibliothèque standard.

Les utilisateurs peuvent également s’attendre à davantage de dépréciations dans les trois prochaines versions de Python. La plupart sont des méthodes pour divers composants de bibliothèque standard qui sont rarement utilisés ou non documentés.