Logo

Initiation à Rust

par Stéphane Mourey - PixyBlue

Raccourcis

Le formateur

  • Développeur web autodidacte, administrateur réseau, auteur pour Linux Magazine, formateur, freelance.
  • PixyBlue, nom commercial pour mon activité freelance.

Contenu de la formation

  • reprend pour l'essentiel le contenu de mon HS
  • pratique avant tout, centrée sur des TP

Plan de la formation

  1. Généralités
  2. Les Tests
  3. Écrire une librairie
  4. Élaborer une interface en ligne de commande
  5. Construire une interface web

Le dépôt GitHub

Les TP sont structurés à partir d'un unique dépôt GitHub et, les différentes étapes donnent lieu à des tags.

Histoire de Rust

Graydon Hoare

  • Ingénieur canadien,
  • A travaillé pour Red Hat, Mozilla, Apple, and Stellar,
  • Créateur de Rust en 2006, comme projet personnel,
  • Il abandonne le leadership de Rust en 2013, suite à un burnout.

Sources et liens

Mozilla

  • 2009: Graydon Hoare expose son projet à un petit groupe de personnes chez Mozilla. Il est décidé de lui confier une équipe pour mener à bien son développement en vue de réécrire le noyau de Firefox à long terme (projet Servo),
  • 2012: première version publique,
  • 2015: version 1.0,

Fondation Rust

  • 2020: suite à la pandémie, Mozilla restructure son personnel, le projet Servo est abandonné,
  • 2021: lancement de la Fondation Rust par Amazon Web Services, Google, Huawei, Microsoft, et Mozilla.
  • 2022: premier noyau Linux (6.1) utilisant du code Rust.

Particularités

  • Bas niveau, compilé
  • Memory safety et Borrow checker
  • Modes sécurisé et non sécurié (safe and unsafe mode)
  • Immutabilité des variables par défaut
  • Typage statique avec inférence
  • Généricité à l'aide de traits
  • Méta-programmation à l'aide de macros
  • Pointeurs intelligents
  • Filtrage par motif

Intialisation d'un projet

$ cargo init --lib ; tree -a
    Creating library package
note: see more `Cargo.toml` keys and their definitions at[...]
.
├── Cargo.toml
├── .git
[...]
├── .gitignore
└── src
    └── lib.rs

11 directories, 21 files

Cargo.toml

Fichier de configuration au format TOML

$ cat Cargo.toml
[package]
name = "test5"
version = "0.1.0"
edition = "2021"

[dependencies]

main.rs

fn main() {
    println!("Hello, world!");
}

lib.rs

$ cat src/lib.rs
pub fn add(left: u64, right: u64) -> u64 {
    left + right
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_works() {
        let result = add(2, 2);
        assert_eq!(result, 4);
    }
}

Les Tests

Lien

TP 1

ou bien

https://github.com/taophp/formation-rust/tree/<tp>/00-start/README.md

<tp> est à remplacer par l'identifiant de votre TP, à savoir :

  • txt ou
  • calc.

ou bien encore

git clone https://github.com/taophp/formation-rust/
cd formation-rust
git tag <tp>/00-start
cat README.md

<tp> est à remplacer par l'identifiant de votre TP, à savoir :

  • txt ou
  • calc.

Librairie

Lien

TP 2

ou bien

https://github.com/taophp/formation-rust/tree/<tp>/02-lib/README.md

ou bien

git tag <tp>/02-lib
cat README.md

Interface en ligne de commande

Lien

TP 3

ou bien

https://github.com/taophp/formation-rust/tree/<tp>/03-cli/README.md

ou bien

git tag <tp>/03-cli
cat README.md

Interface web

Lien

TP 4

ou bien

https://github.com/taophp/formation-rust/tree/<tp>/04-web/README.md

ou bien

git tag <tp>/04-web
cat README.md

ou bien

https://github.com/taophp/formation-rust/tree/<tp>/01-tests/README.md

ou bien

git tag <tp>/01-tests
cat README.md

Biblio/Webographie

Mon hors-série

D'autres articles de votre serviteur

À paraître

  • Rocket : construisez une API REST en Rust
  • Gérez des accès sécurisés avec Rocket et plus encore...

Bon, il y a quand même d'autres lectures qui valent le coup...

Documentations et ressources officielles

Autres ressources

Généralités:

Et un livre:

  • Programmer avec Rust, de Jim Blandy et Jason Orendorff, Éditeur First Interactive, collection O'Reilly, ISBN: 978-2412046593.

Des listes de librairies sélectionnées:

Crédits

Ce slideshow a été conçu à l'aide de Marp.