Le langage de programmation Python dispose déjà de nombreux moyens de s'exécuter plus rapidement, qu'il s'agisse des runtimes d'exécution alternatifs comme PyPy ou de modules écrits en C/C++. Pour permettre que le code Python s'exécute plus rapidement sans aucune modification du code, Anthony Shaw, membre de la Python Software Foundation et de Microsoft propose Pyjion, un compilateur de Microsoft pour Python 3.10 qui aujourd’hui, est à la version 1.0.Rappelons que 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. 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.
Pyjion, une extension JIT (Just-In-Time) pour CPython qui compile le code Python en CIL natif et l'exécute à l'aide du CLR .NET. Il peut être installé par pip dans une installation CPython 3.10 sous Linux, Mac OS X ou Windows. En d’autres termes, Pyjion compile le bytecode natif de CPython en code machine. Sans Pyjion, CPython utilise une boucle d'évaluation maître (appelée frame evaluation loop) pour itérer sur les opcodes Le compilateur Pyjion a 3 étapes principales :
- construire une "table de pile" des types abstraits à chaque position d'opcode ;
- Compiler les opcodes CPython en instructions IL (ECMA335 CIL) ;
- Émettre les opcodes CIL dans le compilateur .NET EE pour les convertir en code machine/assemblage natif.
Pyjion peut faire en sorte que le code Python s'exécute plus rapidement sans aucune modification du code. Lors du Python Language Summit qui s'est tenu au PyCon 2021 au mois de mai, le créateur du langage Python, Guido van Rossum, a dévoilé des plans à court et à long terme pour rendre Python encore plus rapide. Le langage de programmation Python est relativement lent dans son implémentation CPython par défaut, bien qu'il existe de nombreux moyens de le rendre plus rapide, notamment des alternatives axées sur les performances comme PyPy.
Pyjion fonctionne en compilant les opcodes de la machine virtuelle Python en langage assembleur par le biais du compilateur .NET EE. Les tests de référence effectués par les responsables du projet montrent que Pyjion est environ deux à trois fois plus rapide que Python ordinaire dans le monde réel. Certaines optimisations permettent des gains de vitesse allant jusqu'à 10 fois. L'arithmétique régulière, qui est toujours un bon candidat pour une optimisation JIT, peut être un ordre de grandeur plus rapide.
Historiquement, van Rossum ne semblait pas se soucier des performances de Python, privilégiant la simplicité d'un compilateur moins bien optimisé. Mais le créateur du populaire langage de programmation Python a fait part de ses ambitions de le rendre 2 à 5 fois plus rapide, en remédiant à certaines de ses principales faiblesses par rapport à des langages plus rapides comme le C++.
Dans le cadre d'une contribution au US PyCon Language Summit 2021, van Rossum a publié un document sur GitHub, propriété de Microsoft, dans lequel il détaille certaines de ses ambitions pour faire de Python un langage plus rapide, promettant de doubler sa vitesse à partir de Python 3.11, l'une des trois branches de Python qui sortiront l'année prochaine, et actuellement en cours de développement officiel en tant que projet de niveau préalpha.
Le créateur de Python a été embauché en novembre dernier par Microsoft, une entreprise favorable aux logiciels libres, qui l'a fait sortir de sa retraite après un passage chez Dropbox. « Je m'ennuyais à rester assis à la maison pendant ma retraite », a fait savoir van Rossum dans sa présentation, un document PDF. « J'ai postulé chez Microsoft et j'ai été embauché. On m'a donné la liberté de choisir un projet. J'ai choisi de revenir à mes racines. C'est la façon dont Microsoft rend la pareille à Python ».
Plus tôt en octobre, Sam Gross a proposé une modification majeure du Global Interpreter Lock (GIL), l'implémentation de référence de Python, afin d'améliorer les performances multithreads de Python. « J'ai travaillé sur des modifications de CPython pour lui permettre de s'exécuter sans le verrouillage global de l'interpréteur. J'aimerais partager une preuve du concept de fonctionnement sans le GIL. Cette preuve de concept implique des changements substantiels internes à CPython, mais relativement peu de changements à l'interface C-API. Elle est compatible avec de nombreuses extensions C », a déclaré Sam Gross.
Notons que le Python Global...
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.
