---
title: Cours de programmation séquentielle
subtitle: Introduction générale
author: Orestis Malaspinas
<!-- date: 25 avril 2018 -->
sansfont: Sans Serif
<!-- header-includes:
	<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css" >
  	<link rel="stylesheet" href="reveal.js/css/theme/simple.css" id="theme">
  	<link rel="stylesheet" href="css/console.css" id="theme">
  	<script src="jquery/dist/jquery.min.js"></script> -->
<!-- include-after:
	<script src="js/playRust.js"></script>
	<script src="js/remote-code.js"></script>
	<script src="js/remote-diagrams.js"></script>
	<script src="js/em-artiste.js"></script> -->
pdfMaxPagesPerSlide: 
	1
<!-- slide-numbers: true -->
---

# Quelques références


<!-- <pre><code data-source="codes/control/1.rs" data-trim="hljs rust" class="lang-rust"></code></pre> -->

## The Book (nouveau testament)

![<https://doc.rust-lang.org/book/second-edition/index.html>](figs/RustProgrammingLanguage_cover_0.png){height=40%}

## 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

- Reddit débutants: <https://www.reddit.com/r/learnrust/>
- Reddit: <https://www.reddit.com/r/rust/>
- Le forum des utilisateurs: <https://users.rust-lang.org/>
- IRC rust beginners: <https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-beginners>

## 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.

![](figs/love.png){height=70%}

## Une mascotte super mignonne

![Ferris](figs/ferris.svg){height=50%}

# 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. <!-- TODO UPDATE -->

## Plus d'informations

- En vidéo: <https://www.youtube.com/watch?v=79PSagCD_AY>
- En slides: <https://github.com/steveklabnik/history-of-rust>

# Développement de Rust

## Nouvelles fonctionalités

- Le développement est fait via des "Request for Comments" (RFC)
	* <https://github.com/rust-lang/rfcs>
- 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/en-US/friends.html>

# 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`{.lang-rust}).
- Un guide pour bien vivre dangereusement <https://doc.rust-lang.org/nomicon/>.

