IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Python 3.13 est disponible : la première édition sans GIL de Python s'accompagne d'un compilateur Just-In-Time (JIT) expérimental
D'une amélioration du typage et de la gestion d'erreurs

Le , par Stéphane le calme

49PARTAGES

6  0 
Python 3.13 vient d'être publié. La dernière version stable du langage de programmation Python s'accompagne d'un mélange de changements au niveau du langage, de l'implémentation et de la bibliothèque standard. Les changements les plus importants comprennent un nouvel interpréteur interactif, un support expérimental pour l'exécution en mode libre, et un compilateur Just-In-Time (JIT). La première édition sans GIL de Python est proposée avec l'amélioration des erreurs et du typage. locals() a maintenant une sémantique définie pour changer le mapping retourné et les paramètres de type supportent maintenant les valeurs par défaut.

Les modifications apportées à la bibliothèque comprennent la suppression des API et des modules obsolètes, ainsi que les améliorations habituelles en matière de convivialité et de correction. Plusieurs modules de la bibliothèque standard ont été supprimés à la suite de leur dépréciation dans Python 3.11.


Un REPL Amélioré

L’une des fonctionnalités les plus attendues de Python 3.13 est l’amélioration du REPL (Read-Eval-Print Loop). Ce nouvel interpréteur interactif offre une édition multi-lignes, un support des couleurs, et des messages d’erreur colorisés. Ces améliorations rendent le débogage et l’expérimentation de code beaucoup plus intuitifs et agréables. Les développeurs peuvent désormais visualiser les erreurs de manière plus claire et corriger leur code plus rapidement, ce qui améliore considérablement la productivité.

Le REPL de Python 3.13 a été amélioré pour le rendre moins lourd et plus proche d'un véritable éditeur :
  • La couleur est désormais activée par défaut pour les sorties vers la console. Cette amélioration permet d'obtenir des messages d'erreur plus riches, par exemple.
  • Vous pouvez ouvrir le navigateur d'aide interactif 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 sous Linux et macOS. Elles ne sont pas disponibles sous Microsoft Windows, même en cas d'utilisation du nouvel hôte de la console Windows Terminal.

Amélioration des messages d'erreur

Les traces d'erreurs dans Python sont devenues plus précises et plus détaillées au cours des deux dernières versions. Python 3.13 poursuit cette trajectoire.
  • Si vous tentez 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. Il s'agit d'une source très fréquente de bogues, et pas seulement pour les débutants. C'est une erreur courante de nommer un module d'après un élément de la bibliothèque standard.
  • Si vous passez à une fonction un argument de mot-clé incorrect, l'erreur suggérera quelques arguments corrects possibles, basés sur ce qui est disponible dans la fonction appelée.
  • Là où c'est possible, les messages d'erreur utilisent désormais la couleur dans les tracebacks pour les rendre plus faciles à lire. Un traceback est un module Python que vous pouvez utiliser pour remonter à la source d'une erreur . Il signale les appels de fonction effectués à un point spécifique de votre code.


Exécution sans GIL

Python 3.13 introduit également une option expérimentale pour exécuter Python sans le GIL (Global Interpreter Lock). Cette fonctionnalité permet une exécution plus concurrente des threads, ce qui est particulièrement bénéfique pour les applications multi-threadées. Le GIL a longtemps été un obstacle à la performance des applications Python multi-threadées, et cette nouvelle option pourrait représenter une avancée majeure. Bien que cette option soit encore en phase expérimentale, elle ouvre la voie à des performances accrues pour les applications Python, en particulier dans les domaines de l’intelligence artificielle et du traitement de données massives.

« Le free threading est une tentative de supprimer le Global Interpreter Lock de CPython, qui a traditionnellement été le plus grand obstacle à l'obtention d'un parallélisme basé sur les threads lors de l'exécution de tâches liées au processeur », a expliqué Bartosz Zaczyński. « En bref, le GIL n'autorise qu'un seul fil d'exécution à la fois, quel que soit le nombre de cœurs dont est équipé votre processeur. Cela empêche Python d'exploiter efficacement la puissance de calcul disponible ».

Historiquement, le GIL de Python a empêché une véritable exécution concurrente des threads, a estimé Stanley Seibert, directeur principal de l'innovation communautaire chez Anaconda. Toutefois, la nouvelle fonctionnalité expérimentale de Python 3.13 permet l'exécution simultanée de code Python pur. Cette fonction vise à mieux utiliser les processeurs multicœurs sans sacrifier les performances d'un seul thread. Elle sera désactivée par défaut dans cette version en raison de sa nature expérimentale. Cette fonctionnalité a été développée par les ingénieurs de Meta et approuvée par le comité de pilotage de Python. Anaconda travaille sur des paquets de test pour que la communauté puisse essayer cette fonctionnalité, a déclaré Seibert.


Les débuts du JIT (encore au stade expérimental)

Un compilateur JIT est un compilateur qui compile le code au moment de de l'exécution. Cela signifie que le code n'est pas compilé avant d'être exécuté, mais qu'il est compilé au fur et à mesure des besoins. Les compilateurs JIT sont souvent utilisés pour les langages interprétés - comme Perl, Ruby, PHP et JavaScript - car ils peuvent améliorer les performances du langage. Ces langages sont largement utilisés dans le développement Web, l'écriture de scripts et les tâches d'automatisation en raison de leur facilité d'utilisation et de leur processus de développement rapide. Python, qui est un langage interprété, ne disposait pas d'un compilateur JIT jusqu'ici.

Python 3.11 a introduit l'interpréteur adaptatif spécialisé. Lorsque l'interpréteur 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 du bytecode spécifique à l'utilisation de ces types, ce qui permet d'augmenter la vitesse de 10 à 25 % pour ces parties du code.

Python 3.12 a apporté davantage de spécialisations et d'autres améliorations à l'interpréteur.

À son tour, Python 3.13 ajoute de nouveaux éléments au JIT qui génère 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 très importante mais elle ouvre la voie à de futures optimisations qui n'étaient pas possibles auparavant.

Pour l'instant, le JIT est considérée comme expérimentale (elle n'est pas activée par défaut, et ne peut l'être qu'en compilant CPython à partir des sources avec certains drapeaux). Si, avec le temps, il apporte un gain de performance significatif et n'impose pas un grand fardeau de gestion à l'équipe CPython ou aux utilisateurs de Python dans leur ensemble, il deviendra une option de construction entièrement supportée. L'activation ou non de cette option pour les versions officielles dépendra toujours des gestionnaires des builds CPython d'une plateforme donnée.

Citation Envoyé par Python
Lorsque CPython est configuré et construit en utilisant l'option --enable-experimental-jit, un compilateur JIT est ajouté, ce qui peut accélérer certains programmes Python. Sous Windows, utilisez PCbuild/build.bat --experimental-jit pour activer le JIT ou --experimental-jit-interpreter pour activer l'interpréteur Tier 2. Les exigences de construction et d'autres informations sont contenues dans Tools/jit/README.md.

L'option --enable-experimental-jit prend ces valeurs (optionnelles), et prend par défaut la valeur yes si --enable-experimental-jit est présent sans la valeur optionnelle.

Les deux fonctionnalités phares de cette version sont expérimentales

Le nouveau compilateur expérimental JIT de Python 3.13 utilise un algorithme assez récent appelé « copy-and-patch », explique Bartosz Zaczyński : « L'idée de base de cette technique de compilation se résume à trouver un modèle approprié avec un code machine précompilé pour le processeur cible et à le remplir avec les informations manquantes, telles que les adresses mémoire des variables ».

Zaczyński a ajouté que le plan à long terme est d'améliorer le JIT de Python au point qu'il fasse une différence notable dans les performances d'exécution du code sans prendre beaucoup de mémoire supplémentaire.

Brad Shimmin, analyste chez Omdia, a qualifié le compilateur JIT « d'énorme affaire », car il met Python sur un pied d'égalité avec des langages JIT réputés et axés sur l'entreprise, comme Java : « Plus que cela, cette implémentation JIT introduit une amélioration des performances par rapport aux architectures JIT traditionnelles ». Plutôt que de faire passer le code par un langage intermédiaire avant de créer le code machine, ce qui peut être assez lent, l'implémentation de Python 13.3 utilise une approche de type « copy-and-patch » qui ne nécessite pas l'exécution de l'ensemble de la JIT au sein du runtime Python.

Andrew Cornwall, analyste chez Forrester Research, reconnaît que les deux changements les plus importants apportés au moteur d'exécution de Python 3.13 sont expérimentaux, « de sorte que les utilisateurs quotidiens de CPython ne verront pas encore beaucoup de différence ». Cependant, Python pose les bases d'un code plus rapide fonctionnant sur plusieurs processeurs.

« Un compilateur JIT devrait permettre à CPython de fonctionner plus rapidement pour tout le monde une fois activé, mais Python est conservateur et le laisse désactivé par défaut pour le moment », a déclaré Cornwall. Cependant, « la possibilité de désactiver le verrouillage global de l'interpréteur pourrait être plus perturbante, en permettant aux bibliothèques Python de tirer parti d'un plus grand nombre de cœurs si les bibliothèques peuvent prendre en charge le multithreading. Ceux qui développent des bibliothèques C devront étudier les effets de la désactivation du GIL. Cependant, pour les utilisateurs quotidiens, ces changements sont plus éloignés - ils sont dans un binaire séparé de python3.13t pour l'instant ».

Autres améliorations notables

En outre, Python 3.13 dispose d'une implémentation incrémentale du collecteur mémoire qui réduit les longues pauses lors du nettoyage de la mémoire allouée. Notons également que la prise en charge de Wasm est passée d'emscripten à WASI.

Voici quelques améliorations dont nous pouvons parler :
  • Support Typing Amélioré : Python 3.13 introduit de nouvelles annotations pour les paramètres de type et les éléments en lecture seule. Ces améliorations facilitent l’écriture de code plus sûr et plus lisible, en permettant aux développeurs de spécifier plus précisément les types de données attendus.
  • Nettoyage de la bibliothèque standard : conformément à la PEP 594, de nombreux modules obsolètes ont été supprimés de la bibliothèque standard. Ce nettoyage permet de réduire la taille de la bibliothèque et de se concentrer sur les modules les plus utilisés et les plus pertinents.
  • Support Étendu des Plateformes : WASI (WebAssembly System Interface) est désormais une plateforme de niveau 2, tandis qu’Android et iOS sont promus au niveau 3. Cela signifie que Python est de plus en plus adapté pour le développement sur des plateformes mobiles et web, ouvrant de nouvelles possibilités pour les développeurs.

Conclusion

Python 3.13 marque une étape importante dans l’évolution de ce langage de programmation populaire. Avec ces nouvelles fonctionnalités, les développeurs disposent d’outils encore plus puissants pour créer des applications robustes et performantes. Ces innovations montrent que Python continue de s’adapter aux besoins des développeurs modernes, tout en conservant sa simplicité et sa flexibilité.

Source : documentation Python

Et vous ?

L’option sans GIL pourrait-elle changer la manière dont vous développez vos applications Python ? Quels types de projets en bénéficieraient le plus ?
Pensez-vous que l’introduction du JIT pourrait rendre Python compétitif avec des langages comme Java ou C++ en termes de performances ? Pourquoi ou pourquoi pas ?
Comment voyez-vous l’évolution de Python avec ces nouvelles fonctionnalités ? Quelles autres innovations attendez-vous dans les futures versions ?
Le nettoyage de la bibliothèque standard vous semble-t-il une bonne initiative ? Y a-t-il des modules que vous regrettez de voir disparaître ?
Avec l’amélioration du support des plateformes comme WASI, Android et iOS, envisagez-vous d’utiliser Python pour des projets sur ces plateformes ? Quels types de projets ?
Les améliorations du support typing vous incitent-elles à utiliser davantage les annotations de type dans vos projets ? Pourquoi ou pourquoi pas ?
Comment comparez-vous le nouveau REPL amélioré avec d’autres outils de développement interactifs que vous utilisez ? Quels avantages ou inconvénients voyez-vous ?

Une erreur dans cette actualité ? Signalez-nous-la !