R et Rust : une histoire d’amour naissante

Joseph Barbier - Rencontres R 2026

Pourquoi venir parler de Rust ?


Pourquoi venir parler de Rust ?

  • Open source: Linux, Firefox, uv, Deno, bun, …

  • Industrie

    • Windows
    • AWS
    • Dropbox
    • Cloudflare
    • Discord
    • Datadog

Pourquoi venir parler de Rust ?

  • Pas pour vous dire que c’est mieux que R
  • Pour comprendre les outils qu’on utilise
  • Pour vous donner envie d’essayer

Langage interprété ou compilé ?


D’où ça vient ?

Performance (⚠️⚠️⚠️)


Memory safety

fn main() {
    let s1 = String::from("hello");
    let s2 = s1;

    println!("{}", s1);
    println!("{}", s2);
}


error[E0382]: borrow of moved value: `s1`
 --> /Users/josephbarbier/l/talk/src/rencontresR2026/script.rs:5:20
  |
2 |     let s1 = String::from("hello");
  |         -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
3 |     let s2 = s1;
  |              -- value moved here
4 |
5 |     println!("{}", s1);
  |                    ^^ value borrowed here after move
  |
help: consider cloning the value if the performance cost is acceptable
  |
3 |     let s2 = s1.clone();
  |                ++++++++

Type safety

fn main() {
    let x: i32 = 10;
    let y: &str = "20";

    let result = x + y;
}


error[E0277]: cannot add `&str` to `i32`
 --> /Users/josephbarbier/l/talk/src/rencontresR2026/script2.rs:5:20
  |
5 |     let result = x + y;
  |                    ^ no implementation for `i32 + &str`
  |
  = help: the trait `Add<&str>` is not implemented for `i32`
  = help: the following other types implement trait `Add<Rhs>`:
            `&i32` implements `Add<i32>`
            `&i32` implements `Add`
            `i32` implements `Add<&i32>`
            `i32` implements `Add`



  • “Oui mais en R aussi j’aurai une erreur”

Expérience développeur

Ecosystème Python

  • uv: package/project manager
  • ruff: linter & formatter
  • ty: type checker
  • pyrefly: type checker
  • polars: data manipulation
  • pydantic: data validation
  • monty: interpreter
  • prek: pre-commit hook
  • et plein d’autres!

R ❤️ Rust : ça existe déjà
(et ça marche)

Rust dans l’écosystème R

  • Ark: kernel R (utilisé dans Positron IDE)
  • Air: formatter et serveur de langage
  • Jarl: linter
  • yaml12: YAML parser
  • polars: R interface à polars
  • et plein d’autres !

Projet en développement




q2
Quarto version 2

rv
Gestion des dépendances et paquets R

ggsql
Grammaire des graphiques et SQL

Appeler Rust depuis R : extendr


use extendr_api::prelude::*;

/// @export
#[extendr]
fn hello() -> &'static str {
    "Hello RencontresR 2026 !"
}

extendr_module! {
    mod helloextendr;
    fn hello;
}


devtools::document() # build package
devtools::load_all() # load package

hello()
#> "Hello RencontresR 2026 !"

Est-ce que je dois arrêter R pour faire du Rust ?


  • Rust ne remplace(ra) pas R
  • Rust fonctionne avec R
  • Rust peut remplacer C/C++

Un mot sur l’IA

Merci !

Vous voulez en savoir plus ?