---
title: Cours de programmation séquentielle
subtitle: Installation
author: Orestis Malaspinas
sansfont: Sans Serif
---

# La chaîne de compilation

<https://www.rust-lang.org/en-US/install.html>

## Rustup

- Outil pour configurer et manager la chaîne de compilation de Rust.

	<https://www.rustup.rs>

- Installation de la chaîne de compilation (toolchain):

	<pre><code data-trim="hljs sh">
	curl https://sh.rustup.rs -sSf | sh
	</code></pre>

- Quelques commandes importantes

	<pre><code data-trim="hljs sh">
$ rustup install stable # installation de la chaîne stable
$ rustup default stable # chaîne par défaut
$ rustup self uninstall # désinstallation
$ rustup install nightly # installation de la chaîne en développement
$ rustup update # mise à jour de la chaîne de compilation
	</code></pre>

## Contenu de la chaîne de compilation

- `rustc`{.sh}: compilateur et éditeur de lien
- `cargo`{.sh}: outil pour la compilation et gestion de dépendances
- `rustdoc`{.sh}: documentation
- `rust-(lldb|gdb)`{.sh}: débugger
- `libcore`{.sh}/`libstd`{.sh}

## `rustc`{.rust}

- `rustc`{.rust} est écrit en Rust (en grande partie).
- Pour terster l'installation 
	<pre><code data-trim="hljs sh">
rustc --help
	</code></pre>

## Mon premier `Hello World!`{.rust}

- Dans un fichier `hello_world.rs`{.bash}.

	<pre><code data-trim="hljs rust" class="lang-rust">
fn main() { // présent dans tout programme Rust
    println!("Hello, World!"); // macro d'affichage
}
	</code></pre>

- Pour compiler, éditer les liens et exécuter

	<pre><code data-trim="hljs sh">
$ rustc hello_world.rs
$ ./hello_world
Hello, World!
	</code></pre>

## Cargo

- La documentation [Cargo Manifest docs](http://doc.crates.io/manifest.html).
- Cargo est l'outil de compilation et gestion de dépendances de Rust. 
- Indépendant de la version de `rustc`{.sh}.
- Permet l'installation d'outils (peut se faire avec rustup également)

	<pre><code data-trim="hljs sh">
$ cargo install clippy # conseil de "beauté du code"
$ cargo install rustfmt # formattage automatique du code
	</code></pre>


## Exemple d'utilisation

<pre><code data-trim="hljs sh">
$ cargo new hello_world --bin # création projet
$ cd hello_world
$ cargo build # cargo check
   Compiling hello_world v0.1.0 (file:///home/malaspor/hello_world)
    Finished dev [unoptimized + debuginfo] target(s) in 1.33s
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.05s
     Running `target/debug/hello_world`
Hello, world!
$ ./target/debug/hello_world
Hello, world!
$ cargo build --release # compilation avec optimisations
   Compiling hello_world v0.1.0 (file:///home/malaspor/Downloads/hello_world)
    Finished release [optimized] target(s) in 0.35s
</code></pre>

:::::::::::::: {.columns}
::: {.column width="50%"}
- Le fichier `Cargo.toml`{.sh}:

<pre><code data-trim="hljs sh">
[package]
name = "hello_world"
version = "0.1.0"
authors = ["Your Name you@example.com"]

[dependencies]
</code></pre>
:::
::: {.column width="50%"}
- Le fichier `Cargo.lock`{.sh}:

<pre><code data-trim="hljs sh">
[[package]]
name = "hello_world"
version = "0.1.0"
</code></pre>
:::
::::::::::::::


