Accueil / TECHNOLOGIES / Rust, un langage ultra-rapide signé Mozilla
Rapide, sûr ou facile à écrire. Pendant longtemps, l’état de l’art du développement se limitait à deux de ces critères sur trois. Les langages sûrs et faciles à écrire, comme Python, ont tendance à être lents. Quant à ceux qui privilégent la performance, comme C ou C++, ils sont difficiles à manier et exigent de bien les maîtriser pour éviter que de petites erreurs n'entraînent de grandes conséquences. Le langage Rust, créé par Graydon Hoare et maintenant chapeauté par Mozilla Research, essaie de combiner ces trois aspects en étant rapide, sûr et raisonnablement facile à programmer. Du côté de Google, Go a des ambitions similaires, mais Rust cherche à faire aussi peu de concessions que possible sur le volet des performances. Il est aussi destiné à être utilisé largement plutôt que relégué au rang de curiosité ou cantonné au fin fond du classement Tiobe (pour l'instant, Rust y figure entre la 51e et 100e place). Les raisons ne manquent pas pour créer un langage au sein duquel les aspects de sécurité ont autant d’importante que la vitesse et la puissance de développement. Surtout lorsque l’on considère qu’il existe un nombre impressionnant de logiciels – dont certains pilotent des infrastructures critiques – qui ont été bâtis avec des langages sur lesquels la sécurité ne figurait pas au premier rang des préoccupations. Rust a démarré comme un projet de recherche Mozilla en partie destiné à remettre en œuvre certaines composantes clés de Firefox. Il fallait que le navigateur web puisse mieux exploiter les processeurs multicoeurs et, par nécessité, son utilisation doit être sûre. Mais ces exigences ne sont-elles pas requises par tout logiciel et c’est pourquoi Rust a évolué, passant d’un projet lié au navigateur à un projet de langage à part entière. Du côté de la rapidité, le code Rust est compilé en code machine à travers différentes plateformes. Les fichiers binaires sont autonomes. Ils fonctionnent sans runtime et le code généré est conçu pour s’exécuter aussi bien que du code écrit en C ou C++. Du côté de la sécurité : Rust ne compilera pas les programmes qui cherchent à faire un usage non sécurisée de la mémoire. La plupart des erreurs mémoire sont découvertes lorsqu’un programme s’exécute. Or, la syntaxe de Rust et ses métaphores de langage font en sorte que les problèmes de mémoire couramment rencontrés dans d’autres langages n’entrent jamais en production. Le compilateur les repère et contraint de les corriger avant tout fonctionnement du programme. Ownership : une métaphore pour gérer strictement la mémoire Rust contrôle la gestion de la mémoire à travers des règles strictes. Le système qui le gère est représenté dans la syntaxe du langage par une métaphore dénommée ownership (propriété). Toute valeur donnée peut être « owned » (détenue) par une seule variable à la fois. La façon dont cette propriété est transférée entre les objets est strictement gouvernée par le compilateur de façon à ce qu’il n’y ait aucune mauvaise surprise avec le runtime sous la forme d’erreurs d’allocation de mémoire. Cette approche signifie également qu’il n’y a pas de récupération de mémoire (garbage collector) comme avec des langages comme Go ou C#. Et ça participe aussi à la performance. Chaque bit de mémoire dans un programme Rust est suivi et libéré automatiquement à travers la méthaphore de la propriété. Il est possible de suspendre partiellement ces sécurités lorsque l’on a besoin de manipuler la mémoire directement, par exemple pour déréférencer un pointeur comme en C/C++. Mais cela ne peut justement se faire que « partiellement » parce que les opérations de sécurité en mémoire de Rust ne peuvent jamais être entièrement désactivées. Et pour les cas les plus courants, il n’est pas nécessaire de le faire. Le logiciel est donc plus sûr par défaut. Enfin, sur la facilité d’utilisation, aucune des fonctionnalités de sécurité et d’intégrité de Rust n’alourdit si elles ne sont pas utilisées. C’est pourquoi les développeurs qui l’utilisent et la communauté qui le suit ont essayé de rendre le langage aussi utile que possible et agréable à prendre en main pour ceux qui l’abordent pour la première fois. AdTech Ad Conçu pour être cross-platform Tout ce qui est nécessaire pour produire des binaires Rust est fourni dans le même package. Les compilateurs externes, comme GCC, sont uniquement requis pour compiler des composants externes à l’écosystème Rust (comme une bibliothèque C compilée depuis sa source). Les utilisateurs de Windows sont également les bienvenus. La chaîne d’outils de Rust leur conviendra tout autant que sur Linux et MacOS. En plus de tout cela, on dispose avec Rust du support d’autres plateformes (en dehors des trois OS précédemment cités). Il est possible de produire des binaires pour d’autres plateformes que celle sur laquelle on travaille, avec quelques efforts supplémentaires. Les fonctionnalités natives de Rust peuvent se comparer favorablement à celles d’un langage comme C++. L’un des objectifs est d’ailleurs d’encourager les développeurs C et C++ à utiliser Rust plutôt que leurs outils habituels lorsque c’est possible. Mais pour cela, il faut à ces derniers une bibliothèque standard décente car ils voudront pouvoir utiliser des containers, des collections, des itérateurs, manipuler des chaînes de caractères, gérer des processus, etc. Rust fait tout cela. Il est conçu pour être cross-platform et sa bibliothèque standard ne contient que des éléments qui peuvent être portés de façon fiable entre les plateformes. Les fonctions spécifiques comme epoll de Linux doivent être supportées à travers des bibliothèques tierces comme libc, mio ou tokio. Du côté de ces dernières justement –appelées « crates » - les développeurs ont l’embarras du choix. Cargo, le référentiel officiel qui les répertorie en recèle près 10 000. Une bonne partie d’entre elles sont des API pour se connecter aux frameworks et bibliothèques les plus couramment utilisés ce qui permet à Rust d’être utilisé comme un langage viable avec ces frameworks. Un bémol toutefois, la communauté ne rend pas encore compte de façon détaillée du fonctionnement de chacune et ne fournit pas de notation pour l’instant. Si l’on en vient aux environnements de développement intégrés, on sait que la plupart des développeurs aiment choisir celui qui leur convient. C’est pourquoi Rust a récemment lancé le Rust Language Server qui fournit un feedback du compilateur dans des IDE comme Visual Studio Code de Microsoft. Encore jeune malgré tout Malgré toutes ses qualités, Rust présente aussi des inconvénients qui déplaisant tout autant à ses fans (quui se baptisent entre eux rustaceans) qu’à ceux qui le découvrent. Le langage est encore jeune. Sa version 1.0 ne remonte qu’à 2015 et il y a encore pas mal de choses à ajuster comme les opérations asynchrones, par exemple, qui ne sont pas bien représentées dans la syntaxe. Par ailleurs, il est tout de même difficile d’appréhender des méthaphores (ownership, borrowing notamment) lorsqu’on les découvre. Et d’autres choses encore. L’équipe de Rust en est consciente et sa feuille de route en tient compte. Sa communauté compte plus de 2 000 contributeurs différents. Elle va par exemple faciliter la façon dont on peut travailler avec C et C++ et réfléchit notamment à la possibilité d’étendre des projets comme bindgen qui génère automatiquement des liens Rust vers du code C. Quoi qu’il en soit, le langage atteint son objectif de fournir un langage sûr et pratique mieux que bien d’autres langages et d’une façon qui vient compléter la façon dont les développeurs travaillent déjà.

Rust, un langage ultra-rapide signé Mozilla

Mozilla fait la promotion de son langage Rust qui cherche à combiner rapidité d’exécution, sécurité et facilité d’utilisation. Malgré sa jeunesse – la version 1.0 ne date que de 2015 – le projet est séduisant et son référentiel de bibliothèques tierces, Cargo, est déjà bien fourni. Et l’équipe qui le développe étudie comment mieux travailler avec C et C++.

Rapide, sûr ou facile à écrire. Pendant longtemps, l’état de l’art du développement se limitait à deux de ces critères sur trois. Les langages sûrs et faciles à écrire, comme Python, ont tendance à être lents. Quant à ceux qui privilégent la performance, comme C ou C++, ils sont difficiles à manier et exigent de bien les maîtriser pour éviter que de petites erreurs n’entraînent de grandes conséquences. Le langage Rust, créé par Graydon Hoare et maintenant chapeauté par Mozilla Research, essaie de combiner ces trois aspects en étant rapide, sûr et raisonnablement facile à programmer. Du côté de Google, Go a des ambitions similaires, mais Rust cherche à faire aussi peu de concessions que possible sur le volet des performances. Il est aussi destiné à être utilisé largement plutôt que relégué au rang de curiosité ou cantonné au fin fond du classement Tiobe (pour l’instant, Rust y figure entre la 51e et 100e place). Les raisons ne manquent pas pour créer un langage au sein duquel les aspects de sécurité ont autant d’importante que la vitesse et la puissance de développement. Surtout lorsque l’on considère qu’il existe un nombre impressionnant de logiciels – dont certains pilotent des infrastructures critiques – qui ont été bâtis avec des langages sur lesquels la sécurité ne figurait pas au premier rang des préoccupations.

Rust a démarré comme un projet de recherche Mozilla en partie destiné à remettre en œuvre certaines composantes clés de Firefox. Il fallait que le navigateur web puisse mieux exploiter les processeurs multicoeurs et, par nécessité, son utilisation doit être sûre. Mais ces exigences ne sont-elles pas requises par tout logiciel et c’est pourquoi Rust a évolué, passant d’un projet lié au navigateur à un projet de langage à part entière. Du côté de la rapidité, le code Rust est compilé en code machine à travers différentes plateformes. Les fichiers binaires sont autonomes. Ils fonctionnent sans runtime et le code généré est conçu pour s’exécuter aussi bien que du code écrit en C ou C++. Du côté de la sécurité : Rust ne compilera pas les programmes qui cherchent à faire un usage non sécurisée de la mémoire. La plupart des erreurs mémoire sont découvertes lorsqu’un programme s’exécute. Or, la syntaxe de Rust et ses métaphores de langage font en sorte que les problèmes de mémoire couramment rencontrés dans d’autres langages n’entrent jamais en production. Le compilateur les repère et contraint de les corriger avant tout fonctionnement du programme.

Ownership : une métaphore pour gérer strictement la mémoire

Rust contrôle la gestion de la mémoire à travers des règles strictes. Le système qui le gère est représenté dans la syntaxe du langage par une métaphore dénommée ownership (propriété). Toute valeur donnée peut être « owned » (détenue) par une seule variable à la fois. La façon dont cette propriété est transférée entre les objets est strictement gouvernée par le compilateur de façon à ce qu’il n’y ait aucune mauvaise surprise avec le runtime sous la forme d’erreurs d’allocation de mémoire. Cette approche signifie également qu’il n’y a pas de récupération de mémoire (garbage collector) comme avec des langages comme Go ou C#. Et ça participe aussi à la performance. Chaque bit de mémoire dans un programme Rust est suivi et libéré automatiquement à travers la méthaphore de la propriété.

Il est possible de suspendre partiellement ces sécurités lorsque l’on a besoin de manipuler la mémoire directement, par exemple pour déréférencer un pointeur comme en C/C++. Mais cela ne peut justement se faire que « partiellement » parce que les opérations de sécurité en mémoire de Rust ne peuvent jamais être entièrement désactivées. Et pour les cas les plus courants, il n’est pas nécessaire de le faire. Le logiciel est donc plus sûr par défaut. Enfin, sur la facilité d’utilisation, aucune des fonctionnalités de sécurité et d’intégrité de Rust n’alourdit si elles ne sont pas utilisées. C’est pourquoi les développeurs qui l’utilisent et la communauté qui le suit ont essayé de rendre le langage aussi utile que possible et agréable à prendre en main pour ceux qui l’abordent pour la première fois.

AdTech Ad

Conçu pour être cross-platform

Tout ce qui est nécessaire pour produire des binaires Rust est fourni dans le même package. Les compilateurs externes, comme GCC, sont uniquement requis pour compiler des composants externes à l’écosystème Rust (comme une bibliothèque C compilée depuis sa source). Les utilisateurs de Windows sont également les bienvenus. La chaîne d’outils de Rust leur conviendra tout autant que sur Linux et MacOS. En plus de tout cela, on dispose avec Rust du support d’autres plateformes (en dehors des trois OS précédemment cités). Il est possible de produire des binaires pour d’autres plateformes que celle sur laquelle on travaille, avec quelques efforts supplémentaires. Les fonctionnalités natives de Rust peuvent se comparer favorablement à celles d’un langage comme C++.  L’un des objectifs est d’ailleurs d’encourager les développeurs C et C++ à utiliser Rust plutôt que leurs outils habituels lorsque c’est possible. Mais pour cela, il faut à ces derniers une bibliothèque standard décente car ils voudront pouvoir utiliser des containers, des collections, des itérateurs, manipuler des chaînes de caractères, gérer des processus, etc. Rust fait tout cela. Il est conçu pour être cross-platform et sa bibliothèque standard ne contient que des éléments qui peuvent être portés de façon fiable entre les plateformes.

Les fonctions spécifiques comme epoll de Linux doivent être supportées à travers des bibliothèques tierces comme libc, mio ou tokio. Du côté de ces dernières justement –appelées « crates » – les développeurs ont l’embarras du choix. Cargo, le référentiel officiel qui les répertorie en recèle près 10 000. Une bonne partie d’entre elles sont des API pour se connecter aux frameworks et bibliothèques les plus couramment utilisés ce qui permet à Rust d’être utilisé comme un langage viable avec ces frameworks. Un bémol toutefois, la communauté ne rend pas encore compte de façon détaillée du fonctionnement de chacune et ne fournit pas de notation pour l’instant. Si l’on en vient aux environnements de développement intégrés, on sait que la plupart des développeurs aiment choisir celui qui leur convient. C’est pourquoi Rust a récemment lancé le Rust Language Server qui fournit un feedback du compilateur dans des IDE comme Visual Studio Code de Microsoft.

Encore jeune malgré tout

Malgré toutes ses qualités, Rust présente aussi des inconvénients qui déplaisant tout autant à ses fans (quui se baptisent entre eux rustaceans) qu’à ceux qui le découvrent. Le langage est encore jeune. Sa version 1.0 ne remonte qu’à 2015 et il y a encore pas mal de choses à ajuster comme les opérations asynchrones, par exemple, qui ne sont pas bien représentées dans la syntaxe. Par ailleurs, il est tout de même difficile d’appréhender des méthaphores (ownership, borrowing notamment) lorsqu’on les découvre. Et d’autres choses encore. L’équipe de Rust en est consciente et sa feuille de route en tient compte. Sa communauté compte plus de 2 000 contributeurs différents. Elle va par exemple faciliter la façon dont on peut travailler avec C et C++ et réfléchit notamment à la possibilité d’étendre des projets comme bindgen qui génère automatiquement des liens Rust vers du code C. Quoi qu’il en soit, le langage atteint son objectif de fournir un langage sûr et pratique mieux que bien d’autres langages et d’une façon qui vient compléter la façon dont les développeurs travaillent déjà.

 

À voir aussi

QUIZZ : SAUREZ-VOUS RETROUVER TOUS LES FILMS DISNEY JUSTE À PARTIR D’UN DÉCOR ?

Disney émerveille petits et grands depuis plusieurs générations. Aujourd’hui le studio aux grandes oreilles compte des …

POUR UTILISER YOUTUBE MUSIC, ÉVITEZ DE CRÉER VOTRE COMPTE AVEC VOTRE IPHONE !

Youtube a lancé lundi son tout nouveau service premium dédié à la musique. Avec Youtube Music, …