Rust in Python: Der Rückweg ist teurer als das Parsen

Libraries Run Rust Inside Python (With PyO3)

Rust in Python: Der Rückweg ist teurer als das Parsen

Pydantic v2 und andere Bibliotheken setzen auf PyO3, um Rust-Code in Python nutzbar zu machen. Der Artikel zeigt anhand eines JSON-Parsers, wie das funktioniert: ein Rust-Modul schreiben, mit PyO3-Makros annotieren, per maturin kompilieren und importieren. Der entscheidende Punkt: Die Konvertierung der Rust-Datenstruktur in Python-Objekte kann bei großen Dokumenten mehr Zeit kosten als das eigentliche Parsen. Wer portiert, sollte die Grenzschicht profilieren, nicht nur den Algorithmus.

Getting Rust to run fast is the easy half. What you build on the way out, the trip from Rust values to Python objects, is the half that decides whether the port was worth it.
  1. simonw

    Ich war etwas nervös wegen dieses Trends, als er anfing, Fahrt aufzunehmen, weil mir Pyodide am Herzen liegt (Python, das via WebAssembly läuft) und Bibliotheken, die PyO3 verwenden, möglicherweise nicht in Pyodide funktionieren.

    Glücklicherweise hat sich das inzwischen größtenteils gelöst – man kann jetzt WASM-Builds von Rust- oder C-Erweiterungen kompilieren und auf PyPI veröffentlichen, und Pyodide kann sie dann nutzen.

    Hier ist zum Beispiel der WASM-Build des Rust-enthaltenden Pydantic-core-Pakets: https://pypi.org/project/pydantic_core/#pydantic_core-2.49.0...

  2. the__alchemist

    Das ist ein netter Partytrick! Ich nutze es, um eine einfache Installation von Software zu ermöglichen, die in Rust geschrieben ist, aber hauptsächlich von Python-Nutzern verwendet wird. (z. B. Biologie-Tools) Sie können `pip install <name>` ausführen, da manche Leute dies dem Herunterladen von ausführbaren Dateien/Installern vorziehen. Bonus: Maturin/PyO3 kann automatisch "manylinux"-Binärdateien bauen, was bei der Linux-ABI-Diaspora hilft.

  3. skeledrew

    Aber funktioniert es überall, wo Python funktioniert? Mein Hauptproblem mit diesem Rust-Vorstoß war schon immer die Kompatibilität. Python kann an unglaublich vielen Orten eingebettet und ausgeführt werden. Wie sieht die Geschichte aus, wenn Bibliotheken, auf die ich mich möglicherweise verlassen möchte, tatsächlich in Rust implementiert sind und mein Zielsystem die Toolchain nicht handhaben kann oder es kein Build-Target gibt?

  4. roywiggins

    > greifen Sie zu, eine Rust-Erweiterung erledigt die Arbeit

    ai; dr, sorry

  5. startup_zombie_

    Wie viel des bestehenden PyPI-Ökosystems könnte realistischerweise auf diese Weise funktionieren, ohne dass Paketautoren etwas speziell für WASM tun?

Mehr von diesem Tag

2026-09-13