Shadow
Shadow
Rust 2 –
Blog > 04 décembre 2024 - TECH

Quand choisir Rust, et pour quel projet ? Découvre notre tutorial

Shadow
C’est une nouvelle manière d’envisager le code : avec Rust, les langages à bas niveau font leur révolution. 
S’appuyant sur des syntaxes venues de langages plus expressifs sans perdre en performance, Rust se retrouve dans 
des projets de plus en plus nombreux. Pourquoi le choisir ? Peut-il concurrencer le C++ ? Réponse dans ce tutorial
sur Rust, un langage d’un nouveau genre.

C’est au sein de la fondation Mozilla qu’a germé l’idée de créer un nouveau langage de programmation à la fin des années 2000. Devant certaines limites du moteur de rendu web maison, Gecko, le concept de Rust a émergé. Graydon Hoare en est l’auteur : c’est notamment par comparaison avec certaines caractéristiques du C et du C++ qu’il a conçu ce langage, en s’inspirant d’idées vues dans des langages des années 1970-1980.

Depuis lors, Rust a pris son envol, en devenant en 2015 un langage stable doté de son propre écosystème, et a quitté le giron de Mozilla pour devenir l’objet d’une fondation à part entière, où s’investissent notamment des organisations comme Huawei, Microsoft, Google ou AWS. Et ces entreprises, mais aussi Meta ou Apple, ont intégré Rust à leurs développements avancés. Ce qui vaut pour les géants de la tech vaut aussi pour les développeurs indépendants ou pour les PME. Sur Stack Overflow et sur nombre de plateformes d’échanges autour du code, Rust est privilégié par les ingénieurs et les développeurs, parmi l’ensemble des langages émergents.

La nature même de Rust, qui reste un langage système multiparadigme, permet de le comparer avec un autre langage de bas niveau, le C, et avec sa version la plus utilisée actuellement, le C++. Est-ce que Rust peut rendre plus de services que le vénérable langage d’UNIX et son dérivé moderne ? Réponse en cinq étapes !

TUTORIAL

étape 1 : On choisit Rust pour la sécurité de la mémoire

La création de Rust ne s’est pas faite à partir d’une feuille blanche : pour son créateur, puis les nombreuses personnes qui se sont greffées au projet, les problèmes des langages de programmation les plus utilisés ont servi de moteurs pour « inventer » un concurrent plus souple. La « fuite de mémoire », partiellement corrigible avec des pointeurs intelligents dans C++, est ainsi largement évitée avec un programme compilé en Rust. Cela grâce au système « Ownership »/ « Propriété », qui veut qu’un seul « propriétaire » corresponde à une seule valeur.

Le management de la mémoire dans Rust s’effectue en effet de manière souple et automatisée : un certain nombre de « règles d’emprunt » (qui permettent de faire varier la propriété d’une valeur) garantissent la sécurité du projet. Si le compilateur détecte qu’une fonction ou qu’un appel de code empêche le respect de ses règles, la compilation ne s’effectue pas. Par rapport au système des smart pointers en C++, ou aux collecteurs installés dans certaines bibliothèques d’autres langages, cette approche de « Propriété » en Rust sécurise le développement d’applications critiques grâce à la vérification statique à la compilation des différents éléments du code. La bonne compréhension de ce système et son application conditionnent bien entendu la mise en chantier d’un projet en Rust. Bien employé, ce système représente un gain d’efficacité remarquable, et se double de la possibilité d’affiner très spécifiquement la gestion de la mémoire du programme.

étape 2 : On choisit Rust pour la gestion de la concurrence

Au principe « Ownership », Rust ajoute d’autres fonctions sécurité comme ARC. Ce compteur de référence thread-safe évite « nativement » les fuites de mémoire et les data races en imposant des règles strictes à la compilation. Par comparaison avec C++, Rust autorise donc une syntaxe cohérente, évitant l’emploi de deux ou trois pointeurs intelligents à coder en manuel. Cette intégration naturelle se prolonge avec des primitives additionnelles pour communiquer entre les threads : « channels », en synchrone/asynchrone, ou encore Mutex (comme dans les autres langages de programmation). Celles-ci s’implantent de manière souple en fonction des besoins du développeur, notamment sur des systèmes nécessitant une concurrence forte, comme une application réseau ou un système embarqué. Un firmware pour un capteur IoT ou un serveur http asynchrone fournissent de bons exemples d’applications pratiques de cette gestion de la concurrence.

étape 3 : On maintient ses performances en Rust

De manière très générale, la comparaison entre C++ et Rust pointe une plus grande proximité du premier avec la machine, quand le second paraît davantage axé sur le haut niveau. Pour autant, dans les benchmarks de rapidité d’exécution de code ou d’applis entières, Rust maintient un très bon niveau de performance : cela est en partie dû à une compilation optimisée des abstractions. Le principe des « Zero Cost Abstractions » (soit l’usage de fonctions expressives et efficaces) qui apparaît souvent dans les avantages du Rust montre en effet d’excellents résultats par rapport à des codes à bas niveau rédigés manuellement. Avec une syntaxe réputée plus simple que le C++, Rust peut donc offrir des performances équivalentes, en fonction des projets.

étape 4 : On bénéficie d’un écosystème en plein boom

Disons-le tout net : l’ancienneté et la documentation du C++ le font naviguer un cran au-dessus des langages plus récents. La communauté, les bibliothèques externes et l’ensemble des codes open source disponibles en C++, sans compter des évolutions de standards assez rapides, contribuent à ce que le langage reste pour longtemps encore l’un des plus employés au monde.

Cependant, de nombreux développeurs testent depuis le début des années 2020 les possibilités de Rust et en augmentent les possibilités à mesure de leurs recherches et de leurs trouvailles. Ils peuvent s’appuyer sur un écosystème complet, avec de nombreux outils, en particulier Cargo, chargé de l’installation des dépendances, de la gestion des paquets et la construction des bibliothèques.

étape 5 : On bénéficie d’un écosystème en plein boom

L’interopérabilité de Rust amène certains projets, codés au départ en C ou en C++, à être complétés ou réécrits dans ce nouveau langage. Ceci pour améliorer la sécurité des composants, réorienter le projet, ou tout simplement mettre à jour le code avec une syntaxe plus cohérente, d’autant plus que certaines fonctions C peuvent être importées dans Rust.

Pour les drivers, les firmwares, les logiciels embarqués, les applications système, les programmes nécessitant un excellent niveau de sécurité contre les erreurs mémoire, Rust est aujourd’hui un choix à considérer. Les outils internes, les applis à cycle court ou les apps web sont moins adaptés, en revanche, à la syntaxe du langage, pour l’instant.

À l’heure où Rust est au cœur d’une distribution Linux expérimentale, où Windows intègre de plus en plus des lignes de code de ce langage, les ingénieurs et les développeurs gagnent à connaître toujours davantage les spécificités de cette technologie d’avenir.

 

Chez agap2IT, nous accompagnons nos clients dans l’exploration des technologies émergentes comme Rust. Grâce à notre direction Applicative, nous participons à des projets ambitieux exploitant ses capacités en sécurité et performance.

Rejoins-nous !