CPython : introduire le support de Rust, des arguments et des difficultés
jeu, 20/11/2025 - 09:21
L'idée d'introduire Rust dans CPython n'est pas récente. Les premiers échanges remontent à 2023. Une proposition récente de 2 développeurs du coeur de CPython relance le débat. Il serait alors possible d'écrire des modules en Rust. La sécurité mémoire est un des critères ainsi qu'un meilleur niveau de sécurité et réduire les codes unsafe. Pour appuyer cette proposition, les développeurs évoquent des mouvements similaires sur le noyau Linux (le débat est toujours très vif), Android, Firefox, etc. Et, plus de 25 % des modules d'extension utilisent déjà du code Rust.
Autre argument : si CPython supporte nativement Rust, cela pourrait inciter de nouvelles développeurs à développer des modules. Et Rust possède un bon écosystème et d'un solide gestionnaire de paquets, Cargo.
Pour les auteurs de la proposition, CPython souffre de bugs et de crashs ainsi que des problèmes d'accès mémoire et que des opérations unsafe restent nécessaires dans l'architecture actuelle.
L'intégration de Rust se ferait progressivement :
- ajout de Rust dans Modules/ qui contient les extensions C de la libstandard Python. Ces modules Rust seraient optionnels à la compilation
- intégration nécessaire d'interfaces de fonctions étrangères (FFI) pour décrire les API disponibles dans le nouveau langage et définir un crate cpython-sys
- utilisation de bindgen pour automatiser la génération des liaisons FFI Rust
- au final, Rust serait disponible sur toutes les plateformes supportées par CPython. Ce support devra être du niveau tier 2 minimum (pour le support des binaires sur les plateformes cibles)
La proposition évolue et des éléments ont déjà été rayés ou modifiés. Par exemple, il était proposé que Rust soit requis à partir de Python 3.17. Pour le moment, aucune roadmap n'a été réellement définie ou approuvée. La proposition devra être approuvé avant de lancer réellement l'intégration.
Proposition : https://discuss.python.org/t/pre-pep-rust-for-cpython/104906
