Vue d'ensemble
Le plan pour la 3.13 est similaire aux premiers plans pour la 3.12.
La grande différence est que nous avons maintenant terminé le travail de base dont nous avons besoin :
- La surveillance à faible impact (PEP 669) est implémentée.
- Le compilateur de bytecode est en bien meilleur état.
- Le générateur d'interprètes fonctionne.
- Les expériences sur la machine à registres sont terminées.
- Nous disposons d'une approche viable pour créer un générateur de code machine facile à maintenir, à faible surcharge et basé sur le copy-and-patch.
Nous prévoyons trois travaux parallélisables pour la version 3.13 :
- L'optimiseur Tier 2
- Activation des sous-interprètes à partir du code Python (PEP 554).
- Gestion de la mémoire
L'optimiseur Tier 2
Voir Optimiseur Tier 2 pour une explication de ce qu'est l'optimiseur de niveau 2.
Le plan de travail est à peu près le suivant :
- Faire fonctionner l'interpréteur de niveau 2
- Générer des superblocs (de mauvaise qualité)
- Mise en œuvre d'une gestion de base des superblocs
- En parallèle :
- Ajouter le support de la désoptimisation aux superblocs
- Améliorer le code de création des superblocs
- Mise en œuvre du spécialisateur
- Implémentation de l'évaluateur partiel
- Implémentation du générateur de code machine copy-and-patch
- Intégration build-time
- Génération de code de niveau 2
Notre objectif pour la version 3.13 est de réduire d'au moins 50 % le temps passé dans l'interpréteur.
Plan détaillé.
Plan détaillé pour copy-and-patch.
Activation des sous-interprètes à partir de Python
Contrairement aux autres tâches, qui sont principalement axées sur les performances d'un seul thread, ce travail s'appuie sur le travail GIL par interprète qui a été livré dans Python 3.12 pour permettre aux programmeurs Python de tirer parti d'un meilleur parallélisme dans les sous-interprètes à partir du code Python (sans avoir besoin d'écrire une extension C).
Un projet de PEP 554 existe déjà pour ce travail. La première étape consistera à le mettre à jour et à demander une approbation rapide, afin que nous puissions changer de cap si nécessaire.
Plan détaillé.
Meilleure gestion de la mémoire
Les données de profilage montrent qu'un temps assez important est consacré à la gestion de la mémoire et au cycle GC. Cette fraction ne fera qu'augmenter au fur et à mesure que nous accélérerons le reste de la VM.
Contrairement aux tâches précédentes, nous sommes moins sûrs des solutions appropriées, c'est pourquoi il faut d'abord poursuivre la recherche et l'expérimentation. Nous prévoyons d'en faire un projet secondaire basé sur ce que nous avons appris du travail de niveau 2 ci-dessus.
Nous voulons
- Réduire le nombre d'allocations en améliorant les structures de données. Nous espérons également que l'évaluation partielle réduira le nombre d'objets temporaires, mais cela fait partie du champ d'application de l'optimiseur de niveau 2, et non de la gestion de la mémoire.
- Passer moins de temps à faire des GC de cycle. Cela peut être aussi simple que de faire moins de collections, ou aussi complexe que d'implémenter un nouveau chercheur de cycle incrémental.
Et vous ?
Qu'en pensez-vous ?
Quelles fonctionnalités attendez-vous de cette future version de Python ?
Voir aussi
Python 3.12.0b1, la première des quatre versions bêta de la 3.12, a été publiée, et apporte de nouvelles fonctionnalités ainsi que des corrections de bogues
Une nouvelle version alpha de Python 3.12, plus rapide et plus légère, est désormais disponible, et apporte plusieurs améliorations au niveau du multitraitement et de la gestion des erreurs
Python 3.11 est disponible et s'accompagne d'une amélioration de la vitesse, de meilleures gestions des erreurs, du type self ainsi que des notes d'exception