Programmer en langage Rust : présentation de ce langage de programmation moderne
Même s’il existe déjà de très nombreux langages de programmation – tels que C++, Pascal et Java –, les programmeurs n’ont de cesse d’en développer. Ils recherchent tous davantage de simplicité, de sécurité ou de rapidité. Le langage de programmation Rust poursuit ces trois objectifs et rencontre donc un franc succès. Selon un sondage auprès des utilisateurs de la platerforme de développeurs Stack Overflow, en 2019, Rust était le langage de programmation le plus apprécié.
Qu’est-ce que Rust ?
Le langage de programmation Rust a été créé en 2010 dans l’entreprise Mozilla. Dans un premier temps, ce langage fut développé à titre de passe-temps par l’un des développeurs de l’entreprise avant d’être utilisé pour développer un nouveau moteur de navigateur pour Firefox. Le projet est aujourd’hui en open source et est porté par une communauté active même s’il est toujours financé par Mozilla.
Ce langage de programmation se situe entre des langages de bas niveau comme C et des langages très abstraits comme Java. Dans les faits, Rust est un langage destiné à la programmation de systèmes. Les langages de ce type permettent de réaliser des systèmes d’exploitation ou des applications étroitement liés à Windows, Linux ou macOS. Cependant, on utilise également Rust à un niveau nettement plus restreint pour programmer des applications Web.
Particularités de Rust
Par rapport à d’autres langages de programmation, le principal avantage de Rust réside dans sa sécurité qui est notamment obtenue grâce un traitement particulier des erreurs. Si une erreur survient lors de la compilation et ne peut être corrigée, la célèbre macro « panic! » se déclenche. Elle permet d’arrêter le programme et fournit un message d’erreur, afin d’éviter tout dommage.
Par ailleurs, la gestion de la mémoire est considérée comme particulièrement sûre. En effet, Rust présente l’avantage de réussir à obtenir une « memory safety » sans « garbage collector ». Dans de nombreux langages de programmation, la mémoire a pendant des années été une faille appréciée par les hackers. Une mémoire pleine entraîne une erreur dans le système qui peut être exploitée par les hackers. Pour éviter cela, un « garbage collector » permet de supprimer les objets non utilisés dans la mémoire. Toutefois, celui-ci ralentit également l’exécution du code. Le compilateur de Rust rend obsolète un tel « garbage collector ». Il vérifie dès la compilation si une erreur est susceptible de survenir dans la mémoire sans pour autant impacter la performance. Rust est un langage destiné à la programmation de systèmes à l’instar de C/C++ et fournit la même rapidité lors de l’exécution. Cette dernière est d’une part liée à l’absence de « garbage collector ». D’autre part, les « zero cost abstractions » permettent une vitesse élevée pendant les temps de fonctionnement. Ce terme signifie que l’on peut programmer de façon abstraite sans avoir à compromettre la performance pour obtenir ce confort.
De ce fait, Rust est un mélange entre des langages de programmation haut niveau et bas niveau. De façon similaire à C/C++, Rust est très proche du matériel – offrant ainsi une vitesse élevée –, mais permet une programmation relativement facile à l’instar des langages haut niveau.
Enfin, novices comme programmeurs expérimentés pourront rapidement prendre leurs marques dans Rust. Dans son utilisation, ce langage se démarque peu de ses alternatives les plus connues. Toutefois, la qualité de conception des messages d’erreur constitue un avantage considérable. Alors que d’autres langages de programmation ne renvoient que des erreurs cryptiques, Rust fournit des informations utiles et pertinentes sur la façon de corriger l’erreur.
Rust est l’un des langages de programmation très largement supportés par WebAssembly. Par conséquent, Rust est également utilisé pour développer des applications rapides pour le Web.
La syntaxe de Rust à travers un exemple
De prime abord, la syntaxe de Rust ressemble fortement à celle de C ou C++, qui sont d’autres langages de programmation de système. Comme c’est souvent le cas pour de tels langages, Rust a également recours à des fonctions, des boucles, des requêtes, des constantes et des variables. À l’instar de langages plus anciens, l’utilisation des parenthèses peut différer d’un cas à l’autre, mais le principe reste identique. Naturellement, Rust a également des particularités :
- Les nouvelles fonctions sont définies avec la commande « fn ».
- Ce langage fonctionne avec des macros caractérisées par un point d’exclamation à la fin du terme.
- Les variables peuvent être définies avec « let » ; pour pouvoir modifier les indications, il convient d’autoriser ces changements de façon explicite avec « mut ».
- Par ailleurs, Rust a une vision particulière de l’ownership.
Dans la syntaxe Rust, on entend par « ownership » le lien entre une variable et sa valeur. Sa particularité réside dans le fait qu’une valeur donnée peut uniquement appartenir à une seule variable. Une fois la valeur transmise, la variable n’est plus adressable :
fn main() {
let hello = String::from("Hello, world!");
let hello1 = hello;
println!("{}", hello);
}
Ce code ne peut pas fonctionner tel quel : le contenu de « hello » a été transmis à « hello1 » et ne peut donc pas être appelé dans la macro. À la place, il est nécessaire d’intégrer la nouvelle variable dans la dernière commande ce qui permet d’obtenir le résultat recherché.
fn main() {
let hello = String::from("Hello, world!");
let hello1 = hello;
println!("{}", hello1);
}
Rust offre davantage de sécurité et de performance ainsi qu’une utilisation simplifiée. Ce langage de programmation ne sort pas complètement des sentiers battus et s’appuie sur ce que l’on connaît par exemple du C/C++ tout en offrant également de nouvelles fonctionnalités intéressantes. En effet, apprendre ce langage n’a rien de complexe, en particulier lorsque l’on connaît déjà d’autres langages de programmation.
Si vous souhaitez l’essayer, vous trouverez les bases dans notre tutoriel sur Rust.