HeadlinesBriefing HeadlinesBriefing.com

Résultats de performance Python 3.15

Hacker News •
×

C'est octobre une fois de plus, ce qui signifie qu'il est temps de tester la nouvelle version de Python (techniquement, j'utilise la version 3.15.0rc3, la version officielle 3.15 n'est pas encore disponible). Comme j'ai fait avec mon article de performance Python 3.14 il y a un an, je partage aujourd'hui une nouvelle série de mon benchmark informel, comparant Python 3.15 aux interprètes précédents allant jusqu'à la 3.10. Si vous n'êtes pas intéressé par les graphiques et les tableaux et que vous voulez juste lire mon analyse, n'hésitez pas à sauter à la section de conclusions à la fin.

Le benchmark que j'ai appelé "informal" signifie quoi ? Il est impossible d'obtenir une mesure objective et universelle des performances d'un langage de programmation. Tout ce que vous pouvez faire, c'est écrire quelques programmes et les exécuter pour obtenir une mesure de leurs performances. D'autres programmes peuvent montrer des caractéristiques de performance similaires ou non, il n'y a vraiment aucun moyen de le savoir.

Mon intention avec ce benchmark n'est que de ressentir les changements de performance across les versions de Python, mais je veux laisser clair que je n'essaie pas d'obtenir un profil de performance complet de l'interpréteur Python. Pour mon benchmark, je vais exécuter deux programmes appelés fibo.py et bubble.py, que vous pouvez inspecter si vous le souhaitez. Ce sont les mêmes programmes que j'ai utilisés dans les éditions précédentes de ce benchmark.

Le premier calcule des nombres de la suite de Fibonacci, et le second trie des nombres using the bubble sort algorithm. J'ai choisi ces deux programmes comme représentatifs de deux classes d'algorithmes. Le calcul de Fibonacci est fait using la récursion, que j'ai trouvé quelque peu inefficace dans les interprètes Python.

D'autre part, le bubble sort n'utilise que des boucles for, sans aucune récursion. Il y a d'autres types de programmes que mon benchmark n'essaie pas de couvrir. En particulier, notez que je n'inclus pas de code I/O limité dans ce benchmark.

Parce que certaines améliorations de performance dans les versions récentes de Python tournent autour du multithreading, j'ai également créé une variation multithreadée pour chaque programme, donc au total j'ai quatre tests différents. La matrice de tests complète est en réalité assez complexe, car je dois exécuter les quatre variations de programme sous toutes les versions de Python, ainsi que les alternatives JIT et free-threading pour celles qui les ont. J'aime exécuter les tests sous Py Py également, car cet interpréteur a montré des performances impressionnantes dans les exécutions précédentes de ce benchmark.

Et pour situer la performance de Python au sein de l'écosystème plus large, j'ai également porté les deux programmes vers Java Script (Node.js) et Rust. Voici la matrice de tests complète avec laquelle j'ai travaillé : 2 scripts de test : fibo.py : calcule des nombres de la suite de Fibonacci, avec récursion ; bubble.py : trie une liste de nombres générés au hasard, sans récursion. 2 modes de thread : Single-threaded ; 4 threads parallèles. 6 versions de Python, plus des versions récentes de Py Py, Node.js et Rust : CPython 3.10, 3.11, 3.12, 3.13, 3.14, 3.15; Py Py 3.12; Node 26.3; Rust 1.97. 3 interprètes Python : Standard ; Just-In-Time (JIT) : uniquement pour CPython 3.13+ ; Free-threading (FT) : uniquement pour CPython 3.13+. Les lecteurs de mes benchmarks précédents peuvent se rappeler que j'avais une dimension supplémentaire dans ma matrice pour Linux vs. mac OS.

Compte tenu du fait qu'il n'y avait pas de différences significatives entre eux dans les deux précédentes exécutions du benchmark, j'ai décidé d'abandonner les tests mac OS cette fois-ci, donc tous les tests ont été exécutés sur mon laptop sous Linux, qui possède un processeur Intel Core i5 et fait tourner Gentoo Linux. La méthode que j'utilise pour mesurer la performance de chaque participant à ce benchmark consiste à exécuter le programme de test trois fois et à prendre la durée moyenne des trois. Dans les tableaux de résultats que je partage ci-dessous, j'affiche également la différence de vitesse par rapport à la version 3.15, et lorsque cela a du sens aussi la différence de vitesse par rapport à la version précédente d'un interpréteur donné.

Pour les comparaisons de vitesse, j'utilise un ratio simple, où 1x signifie même vitesse, 0.5x signifie moitié de vitesse (ou qu'il a fallu deux fois plus de temps pour...

Source: Hacker News · Résumé par HeadlinesBriefing