Son nom Rust fait penser à la rouille, à la corrosion, à quelque chose qui s’abîme. Et pourtant, ce langage de programmation est tout l’inverse.
D’après une étude Stack Overflow en 2024, Rust est le langage de programmation le plus admiré avec un score de 83%, contre 58% pour JavaScript ou encore PHP à 43%. Ce nombre n’est pas anodin, puisqu’il atteint cette position tous les ans depuis 2016…
Comment expliquer cette admiration ? Pour cela, il faut d’abord comprendre son positionnement par rapport aux autres langages.
Historique et usages
Rust a été pensé dès 2006 par un employé de Mozilla Research, puis officiellement parrainé par cette même entreprise plus tard, en 2010 lors de l’annonce du projet Servo. Seulement 1 an plus tard, alors que Rust est développé à l’aide d’un compilateur écrit dans un autre langage, les développeurs ont réussi à réécrire le compilateur de Rust en Rust. Depuis, il est donc capable de compiler son propre code source : c’est ce qu’on appelle le bootstrapping. C’est une date clé qui témoigne de son autosuffisance.
Contrairement à ce qu’on pourrait penser, le nom Rust ne vient pas de la rouille mais du champignon qui pousse sur des surfaces difficiles. C’est une métaphore de la robustesse du langage.
Rust a une communauté open-source très active. Cette communauté fait évoluer le langage et le fait également vivre à travers d’autre projets, notamment le projet Rust for Linux qui consiste à remplacer le langage du noyau Linux par Rust, historiquement écrit en C et en assembleur. Ce changement s’explique en partie par le vieillissement des mainteneurs actuels et la difficulté à recruter une nouvelle génération de contributeurs. Depuis 2022, Linus Torvalds, créateur de Linux, a donné son feu vert à cette évolution. Une première intégration de Rust est apparue dans la version 6.4 du noyau en 2023. À noter que Rust est principalement utilisé pour le développement de nouveaux pilotes, tandis que le C reste le langage central du noyau.
Plus généralement, son utilisation est surtout pour des systèmes d’exploitation et les système de bases de données. Par exemple, Mozilla utilise Rust dans son moteur de rendu Servo qui visait à remplacer Grecko, Dropbox l’utilise pour la synchronisation des fichiers, Cloudflare pour la sécurité réseaux. Même Discord a migré une partie de son infrastructure vers Rust.
Performance
C’est le maître mot de ce langage grâce à son système de gestion de mémoire qui s’éloigne des garbage collector qu’on retrouve dans les langages come C++ ou Go.
Ce système repose sur une combinaison de ownership (propriété) et borrowing (emprunt).
Ce système d’emprunt permet notamment d’accéder à une variable sans en prendre la propriété. Cela permet d’éviter des problèmes classiques de gestion de mémoire, comme les fuites. Une référence immuable (&T
) permet de consulter une valeur sans la dupliquer, tandis qu’une référence mutable (&mut T
) permet de la modifier. Le compilateur veille à ce qu’il n’existe jamais plus d’une seule référence mutable à un instant donné, ou plusieurs références immuables, mais jamais les deux en même temps. Ce fonctionnement assure une mémoire sûre, sans recourir à un garbage collector — un système souvent utilisé dans d’autres langages pour libérer automatiquement la mémoire.
Compilation native
Sa force se trouve aussi dans sa compilation native.
Pour comparer avec un autre langage que nous utilisons beaucoup : JavaScript, et ses compères Typescript ou JSX, ces derniers doivent être compilés afin d’être interprétés par le navigateur qui ne comprend que le JavaScript. Mais dans ce cas, il s’agira plutôt d’une transpilation bien que la confusion entre les deux est facile. Concernant le JavaScript pur, il peut également être lui-même transpilé, par exemple grâce à Babel qui permet de convertir du JavaScript moderne (ES6) vers une version plus ancienne et donc garantir la compatibilité avec tous les navigateurs. Enfin, JavaScript peut être minifié afin d’en réduire sa taille finale en éliminant tous les caractères « facultatifs » tels que les espaces ou les retours à la ligne. Son rôle peut aussi être de sécurité puisque le code devient moins lisible et est donc moins facilement décryptable par un tiers.
Pour Rust, ce n’est pas pareil. C’est comme le C, C++ ou encore le Go, qui ont tous une compilation native qui vise à distribuer des binaires. Ces binaires peuvent être exécutés directement sans interprétation ni machine virtuelle, de façon autonome. En gros, ça marche, tout de suite et sans aucune dépendance.
En plus d’assurer des performances et une distribution éclair, la compilation permet d’avoir un retour immédiat sur le code et faire office de debug.
Difficile à adopter
Bien qu’apprécié de la communauté, le langage n’est pas facile à prendre en main. Il a une courbe d’apprentissage lente à cause de sa syntaxe stricte et son écosystème récent.
Par exemple, voilà comment écrire le fameux programme Hello World en Rust :
fn main() {
let mut message = String::from("Hello");
message.push_str(", world!");
println!("{}", message);
}
Cet aspect renforce son côté robuste : s’il peut sembler exigeant au premier abord, c’est justement parce qu’il pousse à écrire du code fiable, avec un compilateur qui ne pardonne rien.
S’il est surtout prometteur dans le développement bas-niveau, son écosystème est en pleine maturation et s’étend bien au-delà du back-end.
En agence, Rust n’est pas (encore) un réflexe, mais il pourrait être envisagé pour des API performantes, des outils CLI maison ou des microservices critiques. Son adoption demande certes un investissement initial, mais le gain en fiabilité et en performance en fait un pari d’avenir.