Rust, meilleur ami de Python

La force d’une complémentarité

Julien Lenormand

Introduction

Qui suis-je ?

Julien Lenormand

Ingénieur informatique chez Kaizen Solutions

Pythonista depuis ~2009

Rust-croyant depuis fin 2020, mais non-pratiquant

Rust s’infiltre dans l’écosystème

  • faire de la crypto, c’est compliqué
    • faire de la crypto en C, c’est compliqué
    • faire de la crypto en Rust, c’est plus simple ☺️
  • Python, c’est compliqué
    • Pip, c’est compliqué
    • le packaging en Python, c’est compliqué
    • le publishing à destination de systèmes/Python/pip hétérogènes, c’est compliqué
    • le pinning de version, c’est compliqué
  • suivre SemVer, c’est compliqué
    • ne pas suivre SemVer, c’est compliqué
  • la programmation, c’est compliqué
    • lire les releases notes, c’est compliqué
    • lire les mailing lists, c’est compliqué

Plus simplement

  • Why does cryptography require Rust?
    • we’ve chosen to rewrite non-cryptographic operations (such as ASN.1 parsing) in a high performance memory safe language: Rust

  • cryptography >= 3.4 : un compilateur Rust en version >=1.65.0 est devenu requis
  • en Python il y a les sdist et les bdist (wheels)
  • les vieilles versions de Pip ne savaient pas récupérer les wheels pré-compilées

Autres exemples, moins dramatiques

Mieux que les pandas, les ours polaires !

  • Pandas est la référence pour les dataframes en Python
  • mais des limitations au niveau de l’API, et de la performance
  • Polars vient lui voler la vedette
  • exploiter la performance et le multithreading fearless de Rust
  • How Rust 🦀 is supercharging Python from the ground up
  • et d’autres outils de DataScience :
    • Daft
    • Apache Arrow, DataFusion, Data DBs, Data Engines …

Des cageots de fromage ?

  • comment mettre du Rust dans du Python ?
  • Rust crate != Python package
  • Maturin :
    • build + publication de crates
    • pour utilisation :
      • dans des packages Python via pyo3
      • en C-FFI depuis Python via ctypes
      • par des bindings pour Python via UniFFI
  • résultats : du Rust par-ci par-là !
  • et si besoin de mettre du Python dans du Rust ?

Rayons astronomiques rugueux

  • Cargo c’est super bien
  • “standing on the shoulders of giants”
  • problème : “l’état de l’écosystème Python pour la gestion de projet est navrante”*
  • solution : “cargo for python”
    • Ruff + uv
    • “plié le game”
  • “les gens sont + motivés à travailler contre de l’argent que gratuitement”
  • les gens bons sont meilleurs que les gens mauvais
  • Astral
  • le futur ?
    • build
    • mypy
    • mème pertinent pour exprimer la béatitude (enfin !)

Code style

  • besoin de types
  • besoin d’immutabilité (par défaut)
  • (souvent) pas besoin d’héritage (not SOLID)
  • solution = C++/Rust/Java/Scala/…

Capture et philosophie

  • python tooling not in python anymore ?
  • glue

ROTI

Questions

?

Julien Lenormand

Dev / DevOps / Craft / Talk

LinkedIn/julien-lenormand