A l’occasion du Python Language Summit qui s'est tenu à la PyCon 2021, Guido van Rossum, créateur du langage Python (depuis peu passé chez Microsoft), a dévoilé les projets à court et à long terme en vue de rendre Python deux à cinq fois plus rapide, voire davantage. Plusieurs solutions permettent déjà d’exécuter le langage Python plus rapidement. C’est le cas par exemple avec des moteurs d’exécution alternatifs comme PyPy ou des modules d’emballage écrits en C/C++. Mais aucune ou presque de ces méthodes n’accélère CPython lui-même, l'implémentation de référence de Python, écrite en C, qui est la version la plus largement utilisée du langage. Dans un premier temps, les créateurs prévoient d’apporter un minimum d’améliorations importantes des performances à Python 3.11, la version en cours de développement, actuellement au niveau alpha, dont la sortie est prévue pour 2022.
Dans la présentation faite lors du Language Summit, M. van Rossum a expliqué les fortes contraintes qu’impliquait l’accélération de Python. Notamment, les modifications apportées à CPython ne doivent pas casser l'ABI (application binary interface) du runtime, de façon à ce que les extensions Python écrites en C continuent de fonctionner telles quelles. Ces contraintes imposent de réaliser des modifications incrémentielles et gérables, conformément aux objectifs généraux de CPython, afin notamment de préserver la maintenabilité et une base de code simple et compréhensible. De plus, toutes les modifications doivent être open source : il ne peut y avoir d'extensions propriétaires, en « boîtes noires » dans CPython.
Des axes d’amélioration identifiés
Néanmoins, M. van Rossum et ses collègues ont identifié plusieurs parties de Python pouvant être modifiées librement. Le système de bytecode, le compilateur et l'interprète de Python ont tous été désignés comme cibles, car ils ont tendance à changer entre les versions. C’est le cas en particulier du bytecode qui n'offre aucune garantie de compatibilité entre les versions majeures, si bien qu’il pourrait être modifié de façon radicale si nécessaire. Les premières propositions visant Python 3.11 comprennent un « interpréteur de bytecode adaptatif et spécialisé », comme indiqué dans le PEP 659. Les instructions de bytecode faisant référence à un type de données spécifique dans une section particulière du code pourraient être remplacées en ligne par une version « spécialisée » de ce bytecode pour ce type de données particulier, ce qui engendrerait un gain de vitesse. Les développeurs estiment que l’amélioration potentielle des performances pourrait atteindre environ 50 % dans les situations les plus propices.
Parmi les autres options d'amélioration de la vitesse, les créateurs ont évoqué l'optimisation de la pile de trame, la modification dans les modalités d’appel des fonctions, un traitement plus efficace des exceptions, l'ajout d'optimisations qui accélèrent le temps de démarrage et la modification du format de fichier cache du bytecode .pyc. Mais, parmi tous ces changements aucun ne concerne l’une des améliorations les plus couramment suggérées pour Python : la génération de code machine au moment de l'exécution, ou compilation Just-in-Time (JIT). Dans son exposé, M. van Rossum a laissé entendre que ce type de projet serait envisagé après Python 3.11, parce qu'il était logique de rechercher d'abord les améliorations de performance possibles avec des changements plus ciblés. Tout le travail effectué dans le cadre de ce projet a été mis à disposition sur GitHub dans un référentiel faster-cypthon, comprenant à la fois du code (un fork de CPython 3.11) et les idées suivies.
Commentaire