From 66fb4e31ffa8a08390453f088c27eacaf06252c4 Mon Sep 17 00:00:00 2001 From: Orestis Malaspinas <orestis.malaspinas@hesge.ch> Date: Tue, 22 Jan 2019 14:47:10 +0100 Subject: [PATCH] added unsafe --- presentation/intro.md | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/presentation/intro.md b/presentation/intro.md index 7c264cb..ae7cd1f 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` -- GitLab