Cours de programmation séquentielle

Introduction générale

Orestis Malaspinas

Quelques références

The Book (nouveau testament)

https://doc.rust-lang.org/book/second-edition/index.html
https://doc.rust-lang.org/book/second-edition/index.html

The Book (ancien testament)

Contient certaines iformations qui peuvent être pratiques.

https://doc.rust-lang.org/book/first-edition/index.html

La documentation officielle

https://doc.rust-lang.org/

Rust by Example

https://doc.rust-lang.org/rust-by-example/index.html

La communauté Rust

Rust playground

https://play.rust-lang.org/help

Pourquoi Rust?

Un peu d’amour

  • Langage le plus aimé sur stackoverflow en 2016, 2017, et 2018.

Une mascotte super mignonne

Ferris
Ferris

Historique

Une brève histoire du Rust

  • Créé comme projet personnel par Graydon Hoare chez Mozilla en 2006.
  • Financé par Mozilla dès 2010.
  • Rendu public la première fois en 2012 (version 0.4).
  • Orientation vers la programmation système.
  • Première version stable (1.0) en 2015 (3 ans cette année).
  • La très grande majorité des fonctionnalités du langages ont été retirées.
  • Stabilisation de fonctionnalités tous les 6 semaines.
  • Version stable actuelle 1.29.

Plus d’informations

Développement de Rust

Nouvelles fonctionalités

  • Le développement est fait via des “Request for Comments” (RFC)
  • Processus transparent (Pull requests sur github).
  • Grande contribution de la communauté.
  • Mais décision finale du comité directeur.

Méthode de publication

  • Développement dans Nightly.
  • Toutes les 6 semaines la version nightly passe en bêta pour tests.
  • Toutes les 6 semaines les fonctionnalités sont stabilisées.
  • Rétrocompatibilité assurée.
  • Pas de grandes révolutions, mais plutôt des petites améliorations successives.

Projets basés sur Rust

  • Firefox:
    • Servo (moteur parallèle de navigateur en collaboration avec Samsung)
    • Quantum (Moteur du navigateur de Firefox)
  • Gnome (en remplacement du C).
  • Dropbox.
  • Cargo.
  • Tor (en phase de tests).
  • Redox (microkernel).
  • https://www.rust-lang.org/production

Concepts de base

Un compilateur très pointilleux.

Sûreté

  • Fortement typé.
  • Pas d’accès mémoire illégal.
  • La désallocation est automatique.
  • Les fuites de mémoires sont donc TRÈS difficile à faire.

Concurrence

  • Concurrency without fear.
  • Le système de type empêche un accès concurrent à des données.
  • La synchronisation des données doit être explicitement faite.
  • Détection si l’accès asynchrone est sûr à la compilation.
  • Protection contre les accès concurrents.

Rapidité

  • Les conditions de sécurité sont gérées à la compilation (pas de coût à l’exécution).
  • Le compilateur est basé sur la LLVM.
  • Abstractions à coût nul.
  • On paie pour ce qu’on utilise seulement.

On peut contourner les règles

  • Le compilateur a des règles très strictes…
  • … mais il est possible de contourner les règles.
  • Syntaxe spéciale pour autoriser les comportement potentiellement dangereux (unsafe).
  • Un guide pour bien vivre dangereusement https://doc.rust-lang.org/nomicon/.