Hello world

Analysons maintenant le “Hello world” de Rust :

fn main() {
  println!("Hello world");  // Modifiez-moi !
}

On voit d’abord qu’une déclaration de fonction commence par l’abbréviation fn. Comme Python, Rust suit la règle de Stroustrup : les abbréviations sont acceptées pour des actions très fréquentes, comme la déclaration de fonctions.

Plusieurs choix syntaxiques sont communs avec C++ :

  • Comme en C++, la fonction principale s’appelle main(). Mais en Rust, elle n’est pas obligée de retourner int, plusieurs types sont acceptés grâce à une conversion vers int.
  • Les blocs sont délimités par des accolades ouvrantes { et fermantes }, ce qui est un bon compromis entre concision et évitement des bugs d’indentation.
  • Les instructions sont terminées par un point virgule, ce qui permet de placer ses sauts de ligne où l’on veut quand on clarifie une expression complexe.
  • Les commentaires utilisent les syntaxes // et /* */. Contrairement à la version C++, il est possible d’imbriquer le second type de commentaire indéfiniment.

Et pour terminer, on voit que pour écrire du texte sur stdout, terminé par une fin de ligne, on utilise println!(). Le point d’exclamation à la fin de l’appel nous renseigne sur le fait que println n’est pas une fonction, mais une macro. Cela lui permet d’accepter en entrée un mini-langage spécifique avec des fonctionnalités comme les arguments nommés et l’interpolation de variables :

#![allow(unused)]
fn main() {
// Argument positionnel
println!("Bonjour, {} !", "Dave");

// Argument nommé
println!("Mon nom est {nom}.", nom = "Personne");

// Interpolation de variable
let reponse = 42;
println!("La réponse est {reponse}, mais quelle est la question ?");
}