Rust comme colle : Intégration avec Python, C et d'autres langages

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Rust comme colle universelle : pourquoi l'intégration avec d'autres langages est un super-pouvoir

\n\n

Avez-vous déjà rêvé d'écrire un module haute performance en Rust sans vouloir réécrire tout votre projet en Python ? Ou peut-être avez-vous besoin d'ajouter une gestion sécurisée de la mémoire à une ancienne bibliothèque C ? Bienvenue dans le monde de l'intégration de Rust avec d'autres langages. Ici, Rust n'agit pas simplement comme un langage autonome, mais comme une "colle" puissante qui relie les écosystèmes.

\n\n

Sur pythonlib.ru, nous parlons souvent de Python, mais aujourd'hui nous faisons un virage intéressant. Rust n'est pas seulement une question de vitesse et de sécurité, mais aussi d'une flexibilité incroyable. Il sait s'intégrer avec Python via PyO3, appeler des fonctions C via FFI, et même se compiler en WebAssembly pour le navigateur. Dans cet article, nous allons analyser trois scénarios principaux, montrer du code réel et donner des conseils pratiques. C'est parti !

\n\n

Pourquoi intégrer Rust avec d'autres langages ?

\n\n

Imaginez : vous avez un énorme projet en Python qui ralentit à cause de boucles. Vous pouvez réécrire la partie critique en Rust, obtenir un gain de vitesse de 10 à 100 fois sans toucher au reste du code. Ou vous travaillez avec une bibliothèque C legacy et souhaitez l'envelopper dans une interface Rust sécurisée. Rust est idéal pour cela grâce à Foreign Function Interface (FFI).

\n\n

Les principales raisons de l'intégration :

\n
    \n
  • Performance — Rust est plus rapide que Python et JavaScript dans les tâches de calcul.
  • \n
  • Sécurité — Rust protège contre les fuites de mémoire et les conditions de concurrence, ce qui est critique pour C/C++.
  • \n
  • Écosystème — vous accédez aux bibliothèques Rust sans quitter votre langage natif.
  • \n
  • WebAssembly — le code Rust fonctionne dans le navigateur à une vitesse quasi native.
  • \n
\n\n

Intégration de Rust avec Python via PyO3

\n\n

PyO3 est la méthode la plus populaire pour lier Rust et Python. Vous écrivez des fonctions en Rust, les compilez en un module natif (.so ou .pyd) et les importez comme un module Python classique. Cela semble magique ? En réalité, c'est simple.

\n\n

Installation et configuration

\n

Pour commencer, installez maturin — l'outil de construction des extensions Rust pour Python :

\n
pip install maturin
\n

Créez un nouveau projet :

\n
maturin init --bindings pyo3
\n

Cela crée une structure avec les fichiers Cargo.toml et lib.rs.

\n\n

Exemple : accélération des calculs

\n

Supposons que nous devions calculer rapidement les nombres de Fibonacci. En Python, cela peut être lent, mais en Rust, c'est fulgurant. Voici le code dans src/lib.rs :

\n
use pyo3::prelude::*;\n\n#[pyfunction]\nfn fibonacci(n: u32) -> u64 {\n    match n {\n        0 => 0,\n        1 => 1,\n        _ => fibonacci(n - 1) + fibonacci(n - 2),\n    }\n}\n\n#[pymodule]\nfn rust_fib(_py: Python, m: &PyModule) -> PyResult<()> {\n    m.add_function(wrap_pyfunction!(fibonacci, m)?)?;\n    Ok(())\n}
\n

Compilons le module :

\n
maturin develop
\n

Maintenant en Python :

\n
import rust_fib\nprint(rust_fib.fibonacci(40))  # 102334155
\n

Comparez la vitesse avec du Python pur — la différence sera de plusieurs dizaines de fois ! C'est un exemple parfait d'intégration de Rust avec Python pour l'optimisation.

\n\n

Transmission de données complexes

\n

PyO3 ne supporte pas seulement les nombres, mais aussi les listes, les dictionnaires et même les tableaux numpy. Par exemple, on peut passer une liste et la traiter en Rust :

\n
#[pyfunction]\nfn sum_list(numbers: Vec<i32>) -> i32 {\n    numbers.iter().sum()\n}
\n

En Python :

\n
print(rust_fib.sum_list([1, 2, 3, 4]))  # 10
\n

Cela ouvre d'énormes possibilités pour l'intégration de Rust avec Python dans la science des données et le développement web.

\n\n

Rust et C : le FFI classique

\n\n

Rust a été créé comme un remplacement de C/C++, donc le FFI Rust est son domaine natif.

Blogs

Book Recommendations