Chez Oâclock, nous mettons un point dâhonneur Ă toujours ĂȘtre au courant de ce qui se fait de mieux dans la tech, mais surtout de ce qui sera lâavenir dans les mĂ©tiers de la tech. Nous pensons que Rust, entre autres, est lâun des futurs piliers de la programmation. Câest pour cela que nous avons lancĂ© notre toute premiĂšre formation Rust et qu’on vous partage notre tuto pour installer Rust sur Windows, MacOS ou Linux.
Mais câest quoi Rust ?
Rust est un langage de programmation dit de âbas niveauâ avec un typage fort. Comme lâindique Rust-lang.org, Rust est âun langage qui offre Ă tous le pouvoir de construire des logiciels fiables et efficacesâ.
Il est Ă©galement connu pour ĂȘtre un langage de programmation trĂšs productif, grĂące Ă ses diffĂ©rents outils quâil met Ă disposition pour ĂȘtre le plus efficace possible et ça, mĂȘme pendant son apprentissage.
Nous abordons ici, lâinstallation de Rust, mais Ă©galement de ces fameux outils satellites.
Table des matiĂšres
Rustup, une installation pour les unir tous
Rustup est tout simplement un logiciel qui vous permet non seulement dâinstaller Rust, mais Ă©galement de le maintenir Ă jour, dâailleurs, il est utile pour Rust, mais aussi pour dâautres outils. On en reparlera plus tard.
Que vous soyez sur Linux, MacOS ou Windows, vous serez tous logĂ© Ă la mĂȘme enseigne pour installer Rust et ses outils : Rustup ! Rendez-vous sur la page et vous trouverez la mĂ©thode pour lâinstaller.
Si vous ĂȘtes sur Linux ou MacOS, ce sera une ligne de commande dans votre terminal :
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Si vous ĂȘtes sur Windows (quelle drĂŽle d’idĂ©e ;-)), vous trouverez un exĂ©cutable « .exe » qui fera la mĂȘme chose que cette ligne de commande – c’est-Ă -dire tĂ©lĂ©charger et installer Rustup, Rust et dâautres outils dont Cargo, ce dernier est un outil multi-fonctions, câest un gestionnaire de paquet, au travers de sa CLI, il lance le compilateur, les tests unitaires, la documentation locale, etc. Et il permet aussi de crĂ©er de nouveaux projets.
Et nous allons donc commencer par ça.
Â
Mon premier projet Rust
Je prĂ©cise ici, peu importe votre OS, Ă partir de maintenant, câest pareil pour tout le monde. Il est temps de sây mettre, dans votre terminal, vous allez donc Ă©crire ceci :
$ cargo new first_project
Cargo va crĂ©er votre projet dans un nouveau dossier âfirst_projectâ, dĂ©jĂ versionnĂ© en plus. Vous allez pouvoir entrer dedans et constater lâarchitecture.
first_project/
|-- Cargo.toml
`-- src/
|-- main.rs
Expliquons chaque élément en détail :
-
- first_project/ : ce rĂ©pertoire contient tous les fichiers et sous-rĂ©pertoires associĂ©s Ă votre projet, qui s’appelle « first_project« .
-
- Cargo.toml : ce fichier est le manifeste du projet. Il décrit les métadonnées du projet (nom, version, auteur) ainsi que ses dépendances. Le manifeste permet également à Cargo de construire, tester, et gérer les dépendances de votre projet Rust. Le manifeste permet également à Cargo de construire, tester, et gérer les dépendances de votre projet Rust, et est une base essentielle pour bien structurer un projet Rust.
-
- src/ : ce répertoire contient le code source de votre application. Par convention, les fichiers source sont stockés dans ce répertoire.
-
- main.rs : ce fichier est l’entrĂ©e principale de votre programme. Il doit contenir une fonction
fn main()
. Cette fonction sera exĂ©cutĂ©e lorsqu’on lancera votre application via la commandecargo run
.
- main.rs : ce fichier est l’entrĂ©e principale de votre programme. Il doit contenir une fonction
-
- src/ : ce répertoire contient le code source de votre application. Par convention, les fichiers source sont stockés dans ce répertoire.
-
- first_project/ : ce rĂ©pertoire contient tous les fichiers et sous-rĂ©pertoires associĂ©s Ă votre projet, qui s’appelle « first_project« .
Ainsi, lorsque vous créez un nouveau projet avec cargo new
, il inclura ces trois composants principaux par défaut. Vous pouvez commencer à écrire du code Rust dans le fichier src/main.rs
, puis utiliser des commandes comme cargo build
ou cargo run
pour compiler et exécuter votre application.
Jetons rapidement un Ćil dans le fichier main.rs
:
fn main() {
println!("Hello, world!");
}
Dans cet exemple simple, la fonction main
 ne fait qu’afficher un message sur la sortie standard grĂące Ă la macro println!
. Lorsque vous exécuterez votre application, vous verrez apparaßtre le texte « Hello, world! » dans votre terminal.
Â
Build & Run
Nous allons tout de suite compiler notre projet. Dans le terminal, placez-vous dans le dossier âfirst_projectâ et lancez la commande cargo build
. Voici Ă quoi ressemble votre terminal Ă lâissue de cette commande :
Compiling first_project v0.1.0 (/home/andre/oclock/rust/first_project)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.11s
Aucun problĂšme constatĂ© sur notre projet, nous pouvons donc lancer notre nouveau programme Ă lâaide de la commande cargo run
. Et voir notre fameux âHello, world!â.Â
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/first_project`
Hello, world!
VoilĂ , vous avez les bases de la crĂ©ation et l’exĂ©cution dâun nouveau projet en Rust.
Â
Pourquoi est-ce un compilateur âBienveillantâ ?
Avant de parler des outils, je voulais vous montrer pourquoi on dit que le compilateur de Rust est bienveillant. Jusquâici, vous nâavez vu quâun projet fonctionnel qui ne nĂ©cessite pas dâoptimisation.
Amusons-nous un peu en créant une faute dans notre script main.rs
 nous allons ajouter aprÚs le println!()
 ceci :
let test = âtestâ
On sauvegarde et on lance dans notre terminal cargo build
 :Â
Compiling first_project v0.1.0 (/home/user/oclock/rust/first_project)
error: expected `;`, found `}`
--> src/main.rs:7:22
|
7 | let test = "test"
| ^ help: add `;` here
8 | }
| - unexpected token
Ici, on constate Ă quel point lâerreur est trĂšs âverbeuseâ, tout est expliquĂ© clairement, non seulement le message dâerreur âclassiqueâ error: expected ;, found }
 avec la ligne, mais aussi un aperçu du code en lui-mĂȘme avec une phrase explicite.
Â
Si on corrige son erreur en ajoutant le point-virgule Ă la fin de notre ligne et que lâon relance cargo build
, voici ce quâil nous retourne :
warning: unused variable: `test`
--> src/main.rs:7:9
|
7 | let test = "test"
| ^^^^ help: if this is intentional, prefix it with an underscore: `_test`
|
= note: `#[warn(unused_variables)]` on by default
Dans ce cas, ce nâest plus une erreur, mais bien un âwarningâ, il nous indique que la variable âtestâ nâest pas utilisĂ©, et que si câest intentionnel de notre part, il est de bon usage de prĂ©fixĂ© par un tiret bas â_â.
Nous pouvons donc suivre le conseil du compilateur et relancer un cargo build
.
Compiling first_project v0.1.0 (/home/andre/oclock/rust/first_project)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.10s
Et on constate que tout fonctionne parfaitement. Vous pouvez voir Ă quel point ce compilateur est trĂšs bien structurĂ© pour vous permettre de tout de suite comprendre votre erreur et surtout d’Ă©crire du code dĂ©jĂ trĂšs propre.
Vous ĂȘtes maintenant prĂȘt Ă vous lancer dans Rust ! ThĂ©oriquement, rien ne vous empĂȘche de commencer tout de suite Ă apprendre les concepts de ce langage. Mais je vais vous parler dâune derniĂšre chose, que jâaurais aimĂ© connaĂźtre avant de dĂ©marrer et qui va vous faire gagner beaucoup de temps.
Pourquoi choisir Rust Analyzer quand on choisit d’installer Rust sur Windows, macOS ou Linux ?
Vous lâavez vu dans la prĂ©cĂ©dente section, le compilateur est trĂšs bienveillant, mais câest le passage entre le code et le terminal pour tester ce que lâon Ă©crit qui est un peu âlourdâ et je le comprends trĂšs bien.
Câest pour cela que nous allons installer âRust Analyzerâ, un outil qui va faire les mĂȘmes vĂ©rifications quâun cargo build
, mais en direct dans votre IDE et aussi faire de lâauto-complĂ©tion, vous proposer des amĂ©liorations de code, etc.
Vous pouvez consulter une nouvelle fois rust-lang.org vous rendre sur la page afin de trouver comment installer Rust Analyzer sur votre IDE prĂ©fĂ©rĂ©. Dans notre cas, nous allons lâinstaller sur VSCode Ă lâaide dâune extension officielle.
Une fois installĂ© si on refait les mĂȘmes erreurs dans notre code :
fn main() {
println!("Hello, world!");
let test = âtestâ
}
Voici Ă quoi va ressembler notre IDE :Â
On peut voir lâerreur soulignĂ©e en rouge et le warning en jaune. Et si on passe la souris dessus voici un exemple de ce qui apparaĂźt :
Et tout ceci apparaĂźt sur notre IDE dĂšs que lâon sauvegarde, donc beaucoup plus rapide.
Vous aurez peut-ĂȘtre constatĂ© autre chose, entre le nom de notre variable test et le signe Ă©gale il y a un : &str
 qui sâaffiche en gris, je nâai absolument rien ajoutĂ©, câest bien une suggestion de typage de la part de Rust Analyzer. Un simple double-clic permet de lâappliquer.
Voici donc à quoi ressemble notre ligne une fois que tout est corrigé.
Â
Cas pratique et dépendances
Amusons-nous un petit peu, avec un cas pratique et lâinstallation dâune dĂ©pendance. Vous allez vous rendre sur le site https://crates.io . Câest un site qui rĂ©pertorie toutes les dĂ©pendances de Rust. Nous allons installer rand ( https://crates.io/crates/rand ) Ă lâaide de la commande cargo add rand
.
Une fois installé, rendez-vous dans votre fichier main.rs
 afin dâajouter du code, je ne rentre pas dans les dĂ©tails ici, mais en Ă©crivant le code nâhĂ©sitez pas Ă sauvegarder votre code afin de voir les diffĂ©rents messages de Rust Analyzer.
use rand::prelude::*;
fn main() {
let x = random();
println!(âHello, world!â);
println!(âRandom number : {x}â);
}
Si vous avez recopié le code ci-dessus, vous allez voir apparaßtre une erreur sur let x
.
Si vous cliquez sur la ligne âClick for full compiler diagnosticâ voici ce que vous affichera Rust Analyzer :
error[E0283]: type annotations needed
--> src/main.rs:4:9
|
4 | let x = random();
| ^ -------- type must be known at this point
|
= note: cannot satisfy `Standard: Distribution<_>`
note: required by a bound in `rand::random`
--> /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rand-0.8.5/src/lib.rs:184:17
|
183 | pub fn random() -> T
| ------ required by a bound in this function
184 | where Standard: Distribution {
| ^^^^^^^^^^^^^^^ required by this bound in `random`
help: consider giving `x` an explicit type
|
4 | let x: /* Type */ = random();
| ++++++++++++
Une version plus complĂšte du message dâerreur avec mĂȘme un exemple de comment rĂ©soudre le problĂšme :Â
help: consider giving `x` an explicit type
|
4 | let x: /* Type */ = random();
| ++++++++++++
Le but ici nâest pas de « debug » cette erreur, donc simplement si on lit la documentation de rand on va trouver quel type est attendu et il suffit de corriger notre ligne comme ceci :
let x: u8 = random();
Et voilĂ , vous pouvez maintenant faire un cargo runÂ
pour voir le rĂ©sultat :Â
Compiling libc v0.2.155
Compiling cfg-if v1.0.0
Compiling ppv-lite86 v0.2.17
Compiling getrandom v0.2.15
Compiling rand_core v0.6.4
Compiling rand_chacha v0.3.1
Compiling rand v0.8.5
Compiling first_project v0.1.0 (/home/andre/oclock/rust/first_project)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.83s
Running `target/debug/first_project`
Hello, world!
Random number : -49
On remarque que la nouvelle dépendance rand ainsi que ses propres dépendances sont compilées avec notre programme. Si vous relancez cargo run
, il nâaura pas besoin de les recompiler vu quâelles sont dĂ©jĂ compilĂ©es, et il vous affichera directement le rĂ©sultat :Â
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/first_project`
Hello, world!
Random number : -21
Et voilĂ !
Au-delĂ des premiers pas : optimisez votre parcours d’apprentissage Rust
Rust a cette mauvaise rĂ©putation dâĂȘtre difficile et long Ă apprendre, et mĂȘme si elle nâest pas vraiment juste (câest un long dĂ©bat), elle est sans doute impactĂ©e par un mauvais dĂ©part pour de nombreux dĂ©veloppeurs. Utiliser au mieux Cargo & Rust Analyzer nâest quâun premier pas vers des conditions optimales pour dĂ©couvrir et travailler sur Rust. Il reste encore plein de choses dont je nâai pas encore parlĂ© comme par exemple RustFMT ou Clippy. Mais ce sera pour un autre jour. Nâoubliez pas de jeter un Ćil Ă notre formation Rust.