Installation locale

L’étape qui suit est optionnelle, vous n’en avez pas besoin pour suivre la partie “langage” de ce cours.

Mais pour la partie “utilisation”, ou même avant si vous trouvez ça plus confortable, vous devrez tôt ou tard installer un environnement de développement Rust sur votre machine.

Il y a plusieurs façons de procéder, par exemple vous pouvez le faire via le gestionnaire de paquets d’une distribution Linux. Cependant, pour avoir accès aux dernières versions du compilateur, je vous recommande d’utiliser le mécanisme officiel de distribution du projet Rust : rustup.

Vous trouverez des instructions adaptées à votre système d’exploitation sur le site du langage. Notez qu’on y trouve aussi des instructions pour configurer différents éditeurs de code.

Une fois l’environnement de développement installé et activé, vous pouvez utiliser cargo, le gestionnaire de configuration de Rust, pour créer un nouveau projet :

cargo new mon-projet-test

Dans le squelette de projet que cette commande va créer, vous trouverez un dossier src pour le code source, au sein duquel le fichier src/main.rs contient un “Hello world” prêt à être remplacé par votre nouvelle idée.

Une fois que vous avez écrit un peu de code et voulez le compiler, vous avez plusieurs options pour contrôler le compromis entre temps de compilation et performances d’exécution :

  • Avec cargo check, vous vérifiez que le code n’a pas d’erreur de typage sans construire de binaire, ce qui est le plus rapide. La plupart des éditeurs de code peuvent être configurés pour exécuter cette commande automatiquement chaque fois qu’un fichier est enregistré, et afficher les erreurs de compilation éventuelles au niveau du code source concerné.
  • Avec cargo run, vous construisez un binaire sans optimisations et avec des vérifications de déboguage (ex : absence de débordement des entiers) puis vous l’exécutez. C’est un peu plus lent, mais évidemment plus riche en enseignements.
  • Avec cargo run --release, vous construisez un binaire avec optimisations et sans vérifications de déboguage. La compilation prendre plus de temps, mais le binaire produit s’exécutera beaucoup plus rapidement.
    • Si vous voulez optimiser à fond pour votre CPU, au prix de perdre la portabilité des binaires générés entre CPUs, vous devez le demander explicitement comme en C++. Il y a différentes manières de faire, la plus simple est via une variable d’environnement :
      export RUSTFLAGS='-C target-cpu=native'
      # Pris en compte pour tous les cargo run suivants dans ce shell
      

Il y a bien sûr un mécanisme de cache, donc si vous lancez ces commandes plusieurs fois de suite, les dernières exécutions de cargo seront plus rapides que les premières.

On peut faire plusieurs autres choses intéressantes avec cargo (lancer des tests unitaires, générer la documentation de référence, publier des bibliothèques…), mais ces premières commandes suffiront pour la partie “langage” de ce cours.

Enfin, si vous appréciez les fonctionnalités de type IDE (ajout automatique des imports, autocomplétion, aller à la définition d’une fonction, renommage dans tout le code…), sachez que la plupart des éditeurs de code modernes sont compatibles avec l’extension rust-analyzer. Si vous avez déjà eu de mauvaises expériences des fonctionnalités IDE en C++, ne laissez pas ça vous dissuader : dans l’ensemble, rust-analyzer est beaucoup plus facile à installer et fiable à l’utilisation que l’intégration IDE moyenne pour C++.