PyPy, le runtime Python qui utilise la compilation JIT pour apporter des améliorations de performance majeures à la distribution CPython, est désormais disponible en version 7.0. La grande nouveauté, c’est qu’elle supporte d’un coup les trois versions majeures de Python, à savoir les versions 2.7, 3.5 et 3.6.

Selon un message posté sur le blog officiel PyPy Status Blog, les trois versions utilisent « à peu près la même base de code, d’où cette triple version ». L'interpréteur Python 3.6 est « la première version officielle de PyPy à supporter les fonctionnalités de Python 3.6, même si elle est toujours considérée de niveau alpha ». Par rapport à la dernière version, la plupart des améliorations apportées à PyPy concernent la gestion de la mémoire et l'interfaçage avec du code C externe construit pour Python. Si CPython contient des crochets programmatiques dans son sous-système de collecte des déchets, PyPy 7 va encore plus loin en faisant tourner le ramasse-miettes par étapes incrémentielles pour éviter que le processus de collecte n'arrête les programmes trop longtemps.

Un meilleur support des structures asynchrones

Par rapport à l'interpréteur CPython standard, PyPy posait depuis longtemps un problème : de nombreux paquets utilisant des roues binaires, ou des composants binaires conçus pour fonctionner avec l'interpréteur Python, pouvaient ne pas fonctionner correctement ou à la même vitesse. Officiellement, tous les projets C/C++ qui doivent travailler avec PyPy devraient utiliser les projets cffi et cppyy pour emballer leurs binaires. Les dernières versions de ces projets fonctionnent désormais avec PyPy. Des outils tiers permettent également de reconstruire certains paquets Python populaires, comme NumPy, Pandas et SciPy, afin de travailler spécifiquement avec PyPy, mais ce processus de compilation est encore expérimental et ne fournit des binaires que pour Ubuntu Linux.

Cette version apporte également d’autres changements et améliorations à PyPy 7. Le runtime offre par exemple un meilleur support des structures asynchrones et une meilleure compatibilité avec d'autres fonctionnalités du langage dans Python 3.5 et Python 3.6. Cependant, les créateurs de PyPy précisent que la version pour Python 3.6, et celle pour Python 3.5 pour Windows, n’ont « toujours pas le statut de version de production » en raison de problèmes de compatibilité partielle et d’un support étendu à C incomplet ».

Des retombées positives sur le projet CPython

Le développement de PyPy a également eu des retombées positives sur le projet maître CPython. Quand les développeurs de PyPy ont réécrit le code de gestion de la structure de données du dictionnaire Python pour améliorer les performances et économiser la mémoire, CPython a également adopté ce code. Les fonctions de ramasse-miettes de PyPy, notamment la collecte incrémentielle, seraient également utiles dans CPython, mais la manière radicalement différente utilisée par les deux runtimes pour traiter la collecte pourrait rendre le portage difficile.