Rust als universeller Kleber: Integration mit Python, C und anderen Sprachen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Rust als universeller Kleber: Warum die Integration mit anderen Sprachen eine Superkraft ist

\n\n

Haben Sie jemals davon geträumt, ein leistungsstarkes Modul in Rust zu schreiben, aber wollten nicht das gesamte Projekt in Python umschreiben? Oder müssen Sie vielleicht sichere Speicherverwaltung zu einer alten C-Bibliothek hinzufügen? Willkommen in der Welt der Integration von Rust mit anderen Sprachen. Hier agiert Rust nicht nur als eigenständige Sprache, sondern als mächtiger "Kleber", der Ökosysteme verbindet.

\n\n

Auf pythonlib.ru sprechen wir oft über Python, aber heute machen wir eine spannende Wendung. Rust ist nicht nur Geschwindigkeit und Sicherheit, sondern auch unglaubliche Flexibilität. Es kann mit Python integriert werden über PyO3, C-Funktionen über FFI aufrufen und sogar in WebAssembly für den Browser kompilieren. In diesem Artikel analysieren wir drei Hauptszenarien, zeigen echten Code und geben praktische Tipps. Los geht's!

\n\n

Warum Rust mit anderen Sprachen integrieren?

\n\n

Stellen Sie sich vor: Sie haben ein riesiges Python-Projekt, das aufgrund von Schleifen langsam ist. Sie können den kritischen Abschnitt in Rust umschreiben, eine Geschwindigkeitssteigerung um das 10- bis 100-fache erzielen und den restlichen Code unberührt lassen. Oder Sie arbeiten mit einer Legacy-C-Bibliothek und möchten diese in eine sichere Rust-Schnittstelle einbetten. Rust ist dafür ideal dank des Foreign Function Interface (FFI).

\n\n

Die Hauptgründe für die Integration:

\n
    \n
  • Leistung — Rust ist bei rechenintensiven Aufgaben schneller als Python und JavaScript.
  • \n
  • Sicherheit — Rust schützt vor Speicherlecks und Datenrennen, was für C/C++ kritisch ist.
  • \n
  • Ökosystem — Sie erhalten Zugriff auf Rust-Bibliotheken, ohne die Muttersprache verlassen zu müssen.
  • \n
  • WebAssembly — Rust-Code läuft im Browser mit nahezu nativer Geschwindigkeit.
  • \n
\n\n

Integration von Rust mit Python über PyO3

\n\n

PyO3 ist die beliebteste Methode, um Rust und Python zu verbinden. Sie schreiben Funktionen in Rust, kompilieren sie in ein natives Modul (.so oder .pyd) und importieren es wie ein normales Python-Modul. Klingt magisch? In der Praxis ist es einfach.

\n\n

Installation und Einrichtung

\n

Installieren Sie zunächst maturin — ein Tool zum Erstellen von Rust-Erweiterungen für Python:

\n
pip install maturin
\n

Erstellen Sie ein neues Projekt:

\n
maturin init --bindings pyo3
\n

Dies erstellt eine Struktur mit der Datei Cargo.toml und lib.rs.

\n\n

Beispiel: Beschleunigung von Berechnungen

\n

Angenommen, wir müssen schnell Fibonacci-Zahlen berechnen. In Python kann das langsam sein, in Rust blitzschnell. Hier ist der Code in 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

Modul bauen:

\n
maturin develop
\n

Jetzt in Python:

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

Vergleichen Sie die Geschwindigkeit mit reinem Python — der Unterschied wird um ein Vielfaches sein! Dies ist ein ideales Beispiel für die Integration von Rust mit Python zur Optimierung.

\n\n

Übergabe komplexer Daten

\n

PyO3 unterstützt nicht nur Zahlen, sondern auch Listen, Wörterbücher und sogar numpy-Arrays. Zum Beispiel können Sie eine Liste übergeben und in Rust verarbeiten:

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

In Python:

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

Dies eröffnet enorme Möglichkeiten für die Integration von Rust mit Python in Data Science und Webentwicklung.

\n\n

Rust und C: klassisches FFI

\n\n

Rust wurde als Ersatz für C/C++ entwickelt, daher ist Rust FFI seine natürliche Stärke.

Blogs

Buchempfehlungen