Quoi de neuf dans Python depuis mars 2025 ? Nouvelles fonctions, performances et avenir du langage

Depuis mars 2025, Python a poursuivi son évolution avec la stabilisation de la version 3.13.2 (publiée en février 2025) et l’arrivée des préversions de Python 3.14, désormais en phase bêta. Ces versions ne remplacent pas la 3.12 (publiée en 2023), mais marquent un tournant en matière de performance, de typage, de sécurité et de parallélisme avec l’introduction progressive du mode sans GIL et d’un compilateur JIT expérimental.

Nouveau REPL amélioré (basé sur PyPy)

  • Le REPL (Read-Eval-Print Loop) bénéficie désormais d’une interface interactive plus puissante, inspirée du shell IPython.
  • Édition multi-ligne : possibilité d’écrire du code en blocs avec indentation, comme dans un éditeur.
  • Historique intelligent : gestion du rappel des commandes avec flèches directionnelles, et navigation contextuelle.
  • Messages d’erreur colorisés (par défaut) pour une meilleure lisibilité et un débogage visuel plus rapide.
  • Raccourcis REPL (help, exit, etc.) utilisables sans parenthèses.

Améliorations des messages d’erreur

  • Lorsque vous avez une faute de frappe dans un nom de module ou un argument de fonction, Python propose désormais des suggestions automatiques, semblables à celles qu’on retrouve dans des IDEs.
  • Exemple :
import matplotlb  # Suggestion : matplotlib

Nouvelles fonctions dans la bibliothèque standard

  • math.fma(x, y, z) : calcule avec précision (x * y) + z en une seule opération flottante, en limitant les erreurs d’arrondi. Utile en calcul scientifique.
  • copy.replace(obj, **changes) : crée une copie modifiée d’un objet sans passer par des structures de données complexes (inspiré de dataclasses.replace()).
  • random via CLI :
python -m random

Fournit des fonctionnalités comme l’échantillonnage, les dés, ou la génération de nombres directement en ligne de commande.

dbm.sqlite3 devient le backend par défaut du module dbm, facilitant la persistance simple de données clés-valeurs sur disque avec SQLite.

Fonctionnalités expérimentales : sans GIL et JIT

Mode sans GIL (PEP 703 – en test)

Le GIL (Global Interpreter Lock) est un verrou global empêchant l’exécution parallèle réelle des threads Python. Le mode sans GIL permet une exécution multi-threadée concurrente et efficace, notamment pour :

  • le calcul parallèle lourd (scientifique, IA, traitement d’image),
  • les serveurs à threads multiples (ex. FastAPI, Django, etc.).

Cela nécessite cependant des ajustements dans les bibliothèques C/C++ et dans le code natif pour assurer la sécurité en accès mémoire.

JIT expérimental (PEP 744)

  • Python 3.13 introduit un compilateur Just-In-Time expérimental, qui convertit dynamiquement le bytecode Python en instructions machine.
  • Objectif : accélérer l’exécution de certaines parties de code, notamment les boucles et appels fréquents.
  • Encore instable, ce système repose sur l’intégration d’un nouveau backend de compilation appelé « nogil-builtins » et n’est activé que manuellement.

Python 3.14 alpha : préparer l’avenir du langage

En mai 2025, Python 3.14 entre en phase bêta, après plusieurs versions alpha très riches. Voici les PEP les plus marquantes :

PEP 649 – Évaluation différée des annotations de type

  • Jusqu’ici, les annotations de type étaient évaluées au moment de l’exécution, ce qui pouvait poser des problèmes avec des références croisées ou des types non encore définis.
  • Avec cette PEP, les annotations sont conservées sous forme de fonctions lambda différées, accessibles via __annotations__ et converties à la demande. Cela :
    • améliore la compatibilité avec les outils de typage statique (mypy, pyright),
    • évite certains NameError,
    • rend les imports circulaires moins problématiques.

PEP 741 – Nouvelle API C pour l’embedding Python

  • Objectif : simplifier l’intégration de l’interpréteur Python dans des applications C ou C++.
  • L’ancienne API (Py_Initialize, PyRun_SimpleString, etc.) est modernisée et mieux encapsulée.
  • Permet de configurer plus finement l’environnement Python intégré (par exemple, en sandboxant certains modules).

PEP 761 – Signatures numériques avec Sigstore

  • Les distributions officielles de Python seront désormais signées via Sigstore, un système de signature numérique basé sur l’identité (OpenID, GitHub, etc.).
  • Cela améliore la chaîne de confiance et limite les risques de compromission (ex. : typosquatting, paquets malveillants).

Performances et sécurité

  • Le module uuid prend désormais en charge les versions 6, 7 et 8, et bénéficie de meilleures performances lors de la génération aléatoire.
  • subprocess utilise maintenant posix_spawn() dans plus de cas, réduisant le temps de démarrage des processus enfants.
  • Nouvelle fonction sys._is_interned(s) pour vérifier si une chaîne a été « internée » (mise en cache dans la table des symboles).
  • tempfile.mkdtemp() applique par défaut le mode 0o700 sur Windows, restreignant l’accès aux répertoires temporaires pour plus de sécurité.

En conclusion

Depuis mars 2025, Python s’oriente vers une meilleure performance, plus de sécurité, et un confort accru pour les développeurs. Le mode sans GIL et le JIT marquent une rupture importante dans l’architecture du langage, tandis que les efforts sur la lisibilité et l’intégration système confirment sa maturité.

La version stable de Python 3.14 est attendue fin 2025 – et elle pourrait bien représenter un tournant historique pour la communauté Python.

Sources

https://github.com/python/cpython/pull/113315

https://github.com/python/cpython/issues/106144

https://bugs.python.org/issue10188

https://peps.python.org/pep-0761

https://peps.python.org/pep-0741

https://peps.python.org/pep-0649

https://peps.python.org/pep-0744

https://peps.python.org/pep-0703

https://docs.python.org/3.13/whatsnew/3.13.html#library

https://peps.python.org/pep-0673

https://docs.python.org/3.13/whatsnew/3.13.html#improved-interactive-mode

Un commentaire

Répondre à Luc P.Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *