Python 3.11 est–il vraiment le Python le plus rapide ? Une chose est sûre, CPython 3.11 est en moyenne 25 % plus rapide que CPython 3.10 lorsqu'il est mesuré avec la suite de benchmark pyperformance, et compilé avec GCC sur Ubuntu Linux. En fonction de la charge de travail, l'accélération peut atteindre 10 à 60 %. L'équipe de développement de Python a annoncé le 4 octobre les améliorations et les nouvelles fonctionnalités de la version 3.11 de Python. Dans le but d’améliorer les performances du langage de programmation Python, Microsoft a lancé Faster CPython.Il s’agit d’un projet financé par Microsoft, dont les membres comprennent l'inventeur de Python Guido van Rossum, l'ingénieur logiciel senior de Microsoft Eric Snow, et Mark Shannon qui est sous contrat avec Microsoft en tant que responsable technique du projet. « Python est largement reconnu comme étant lent. Alors que Python n'atteindra jamais les performances des langages de bas niveau comme C, Fortran, ou même Java, nous aimerions qu'il soit compétitif avec les implémentations rapides des langages de script, comme V8 pour Javascript », déclare Mark Shannon.
Python est un langage de programmation interprété, multi-paradigme et multi-plateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.
Pour être performantes, les machines virtuelles pour les langages dynamiques doivent spécialiser le code qu'elles exécutent en fonction des types et des valeurs du programme en cours d'exécution. Cette spécialisation est souvent associée aux compilateurs Just-in-time (JIT), mais elle est bénéfique même sans génération de code machine. Le projet Faster CPython se concentre sur deux domaines majeurs de Python : un démarrage et une exécution plus rapides.
Notons que la spécialisation permet d'améliorer les performances, et l'adaptation permet à l'interprète de changer rapidement lorsque le modèle d'utilisation d'un programme change, limitant ainsi la quantité de travail supplémentaire causée par une mauvaise spécialisation.
Démarrage plus rapide
Python met en cache le bytecode dans le répertoire __pycache__ pour accélérer le chargement des modules. Dans la version 3.10, l'exécution des modules Python ressemblait à ceci :
Read __pycache__ -> Unmarshal -> Heap allocated code object -> Evaluate
Dans Python 3.11, les modules de base essentiels au démarrage de Python sont "bloqués". Cela signifie que leurs objets de code (et bytecode) sont alloués statiquement par l'interpréteur. Cela réduit les étapes du processus d'exécution des modules à ceci :
Statically allocated code object -> Evaluate
Le démarrage de l'interpréteur est désormais 10 à 15 % plus rapide dans Python 3.11. Cela a un impact important pour les programmes à courte durée d'exécution utilisant Python. Exécution plus rapide Les frames Python sont créés chaque fois que Python appelle une fonction Python. Cette trame contient des informations sur l'exécution. Les nouvelles optimisations des frames sont les suivantes :
- Rationalisation du processus de création de trames ;
- Éviter l'allocation de mémoire en réutilisant généreusement l'espace de trame sur la pile C ;
- Rationalisation de la structure interne de la trame pour qu'elle ne contienne que les informations essentielles. Les frames contenaient auparavant des informations supplémentaires de débogage et de gestion de la mémoire.
Les objets frame de l'ancien style ne sont maintenant créés que sur demande des débogueurs ou des fonctions d'introspection Python telles que sys._getframe ou inspect.currentframe. Pour la plupart du code utilisateur, aucun objet frame n'est créé du tout. En conséquence, presque tous les appels de fonctions Python ont été accélérés de manière significative. Nous avons mesuré une accélération de 3 à 7 % dans pyperformance.
Lors d'un appel de fonction Python, Python appelle une fonction C...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

ils font la promotion de leur incompétence ?!!