diff --git a/presentation/intro.md b/presentation/intro.md index 7c264cb76c500c4ce75229dfee223359655e9bb5..ae7cd1f56d7a2fa8effb89ec4dbdba60dd145d26 100644 --- a/presentation/intro.md +++ b/presentation/intro.md @@ -360,37 +360,22 @@ fn main() { 1. On peut avoir autant de références **immutables** qu'on le shoutaire sur des données. 2. On ne peut avoir **une seule** référence mutable sur des données. +# `Unsafe` Rust -<!-- - `vector` et `string` sont alignés en mémoire. -- références "light". -- destruction déterministe. --> +## Toute règle est faite pour être contournée -<!-- ## Généralités +- Dans des cas particuliers, on doit pouvoir manipuler la mémoire de façon "dangereuse". +- Avec de grands privilèges viennent de grandes responsabilités: on doit pouvoir localiser **facilement** ces endroits dangereux. +- En bon Rust ils doivent être rares (4% du code de `rustc`). +- Exemple : `raw pointer` -- Fortement typé. -- Pas d'accès mémoire illégal. -- La désallocation est automatique. -- Les fuites de mémoires sont TRÈS difficiles à 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é - -- Abstractions à coût nul (langage moderne **ET** efficace). -- 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. -- 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`{.lang-rust}). -- Un guide pour bien vivre dangereusement <https://doc.rust-lang.org/nomicon/>. --> +# And many more +- Error handling: `Option`, `Result`. +- Tests. +- Benchmarks (`nightly only`). +- *Hygienic* macros!. +- Cargo. +- `crates.io`