Présentation de la version 8.0.0

Le 19 septembre 2026, le projet PyPy a publié PyPy v8.0.0. Cette version regroupe trois interprètes : PyPy2.7 (compatible avec la bibliothèque standard CPython 2.7.18+), PyPy3.11 (basé sur CPython 3.11.16) et PyPy3.12, proposé en qualité beta et aligné sur CPython 3.12.14. La décision de passer à un numéro majeur « 8.0.0 » reflète la mise à jour du système de construction Linux et l’introduction du support de l’ABI 3, deux changements qui modifient la compatibilité binaire des roues Python.

Modifications de la chaîne de construction Linux

Les buildbots Linux (linux64, linux32, aarch64) utilisent désormais des images manylinux_2_28 basées sur AlmaLinux 8, intégrant glibc 2.28 et le compilateur gcc 14, remplaçant le gcc 5 des versions antérieures. En conséquence, les archives tarball générées exigent au minimum glibc >= 2.28, une contrainte déjà satisfaite par les distributions récentes : Ubuntu 24.04 embarque glibc 2.39. Cette évolution assure une meilleure uniformité des dépendances système, mais impose aux utilisateurs de systèmes plus anciens de mettre à jour leurs bibliothèques C.

Prise en charge de l’ABI 3 pour Python 3.12

PyPy 8.0.0 introduit un nouveau modèle de liaison entre l’objet C PyObject et la représentation interne RPython. Un champ supplémentaire ob_pypy_link a été ajouté :

struct PyObject {
    ...
    void *ob_pypy_link;  // préfixe caché pour l’ABI 3
};

Ce champ est placé avant le pointeur remis aux modules d’extension, ce qui « cache » les extensions propres à PyPy et rend la structure compatible avec les en‑têtes CPython lorsque la macro #define Py_LIMITED_API 0x030C0000 est définie. De plus, PyPy ne préfixe plus les fonctions exportées ; par exemple, PyTuple_New reste PyTuple_New au lieu de PyPyTupleNew. Malgré ces avancées, l’importateur de modules doit encore reconnaître les fichiers abi3.so, et les gestionnaires de paquets comme pip ou uv doivent accepter les roues cp312‑abi3. Le projet collabore avec Cython et PyO3 pour automatiser cette prise en charge.

Améliorations du générateur RPython et retrait de HPy

Le compilateur RPython a été enrichi de computed gotos et d’une inlining plus agressive, réduisant la taille du code C généré. Bien que ces optimisations n’aient pas produit de gains de performance spectaculaires, elles facilitent le traçage du code source grâce à des commentaires qui relient chaque bloc C à son origine RPython. Parallèlement, le backend interne HPy a été désactivé : le code reste présent mais n’est plus compilé par défaut, et il peut être réactivé via une option de construction. Enfin, l’outil pyhdrdump, basé sur Clang, a été relancé pour comparer les en‑têtes PyPy aux en‑têtes CPython, offrant ainsi un moyen automatisé de vérifier la conformité ABI.