Lors du récent Sommet sur les technologies à code source ouvert (Open Source Technology Summit - OSTS) , ingénieur principal chez Intel, a expliqué que son entreprise s'intéresse à ce que Rust atteigne prochainement un «parité» avec le langage C, qui reste dominant dans le domaine du développement système et basse niveau. intitulée «Intel et Rust : l'avenir de la programmation système», il a également parlé de l'histoire de la programmation système, de la manière dont C est devenu le langage de programmation système «par défaut», des avantages que Rust offre par rapport à C et de la manière dont il pourrait complètement remplacer C dans ce domaine de la programmation à l'avenir.

La programmation système concerne le développement et la gestion de logiciels qui servent de plateforme pour la création d'applications applicatives, facilitant leur interaction avec le processeur, la mémoire vive, les dispositifs d'entrée/sortie et le matériel réseau. Le logiciel système crée une abstraction spéciale sous forme d'interfaces qui aident à construire des logiciels applicatifs sans entrer dans les détails du fonctionnement matériel.
Triplett définit lui-même la programmation système comme «tout ce qui n'est pas une application». Cela inclut des éléments tels que les BIOS, les micrologiciels, les bootloaders et les noyaux de systèmes d'exploitation, divers types de code embarqué de bas niveau, ainsi que les implémentations de machines virtuelles. Fait intéressant, Triplett pense qu'un navigateur web est également un logiciel système, car il a depuis longtemps évolué au-delà d'un simple «programme», devenant une véritable «plateforme pour sites web et applications web».
Dans le passé, la plupart des logiciels systèmes, y compris les BIOS, les bootloaders et les micrologiciels, étaient écrits en langage d'assemblage. Dans les années 1960, des expérimentations ont commencé pour fournir un support matériel aux langages de haut niveau, ce qui a conduit à la création de langages tels que PL/S, BLISS, BCPL et ALGOL 68.
Puis, dans les années 1970, Dennis Ritchie a créé le langage de programmation C pour le système d'exploitation Unix. Développé à partir du langage de programmation B, qui n'avait même pas de support pour le typage, C était rempli de fonctionnalités puissantes de haut niveau, particulièrement adaptées pour écrire des systèmes d'exploitation et des pilotes. Plusieurs composants d'UNIX, y compris son noyau, ont finalement été réécrits en C. Par la suite, de nombreux autres programmes système, y compris la base de données Oracle, la majeure partie du code source de Windows et le système d'exploitation Linux, ont également été écrits en C.
C a reçu un immense soutien dans ce domaine. Mais qu'est-ce qui a vraiment poussé les développeurs à y passer ? Triplett estime que pour motiver les développeurs à passer d'un langage de programmation à un autre, le nouveau langage doit avant tout offrir de nouvelles fonctionnalités sans perdre les anciennes capacités.
Tout d'abord, le langage doit proposer des « fonctionnalités nouvelles assez impressionnantes ». « Il ne peut pas être légèrement meilleur. Il doit être nettement meilleur pour justifier les efforts et le temps des ingénieurs nécessaires à la transition », explique-t-il. Comparé au langage assembleur, C avait beaucoup à offrir. Il supportait dans une certaine mesure un typage sûr, offrait une meilleure portabilité et performance avec des constructions de haut niveau, et générait dans l'ensemble un code beaucoup plus lisible.
Ensuite, le langage doit garantir le support des anciennes fonctionnalités, ce qui signifie que dans l'histoire de la transition vers C, les développeurs devaient être convaincus qu'il était au moins aussi fonctionnel que le langage assembleur. Triplett précise : « Un nouveau langage ne peut pas être simplement meilleur, il doit également être au moins égal. » En plus d'être plus rapide et de supporter tous les types de données que l'assembleur pouvait utiliser, C avait également ce que Triplett a qualifié de « trou de secours », c'est-à-dire qu'il supportait des insertions de code en langage assembleur.

Triplet considère que C devient actuellement ce qu'était le langage assembleur il y a de nombreuses années. «C est le nouvel Assembleur», déclare-t-il. Maintenant, les développeurs recherchent un nouveau langage de haut niveau qui non seulement résoudra les problèmes accumulés de C, impossibles à corriger, mais proposera également de nouvelles possibilités impressionnantes. Ce langage doit être suffisamment convaincant pour inciter les développeurs à l'adopter, il doit être sécurisé, offrir une gestion automatique de la mémoire et bien plus encore.
«Tout langage qui souhaite être meilleur que C doit offrir bien plus qu'une simple protection contre les dépassements de tampon s'il veut réellement devenir une alternative convaincante. Les développeurs s'intéressent à la convivialité et à la performance, à l'écriture de code qui nécessite peu d'explications et qui accomplit plus de travail avec moins de lignes. Il est également nécessaire de résoudre les problèmes de sécurité. La facilité d'utilisation et la performance sont indissociablement liées. Moins vous devez écrire de code pour accomplir quelque chose, moins vous avez de chances de faire des erreurs liées à la sécurité ou à d'autres aspects», explique Triplet.
Comparaison entre Rust et C
Dès 2006, Graydon Hoare, un employé de Mozilla, a commencé à écrire Rust comme projet personnel. En 2009, Mozilla a commencé à sponsoriser le développement de Rust pour ses propres besoins et a également élargi l'équipe pour faire progresser le langage.
Une des raisons pour lesquelles Mozilla s'est intéressée à un nouveau langage est que Firefox a été écrit en plus de 4 millions de lignes de code C++ et avait de nombreuses vulnérabilités critiques. Rust a été conçu en tenant compte des exigences de sécurité et de parallélisme, ce qui en fait un choix idéal pour réécrire de nombreux composants de Firefox dans le cadre du projet Quantum visant à une refonte complète de l'architecture du navigateur. Mozilla utilise également Rust pour développer Servo, le moteur de rendu HTML qui remplacera à l'avenir l'actuel moteur de rendu de Firefox. De nombreuses autres entreprises ont commencé à utiliser Rust pour leurs projets, y compris Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu et bien d'autres.
Rust résout l'un des problèmes les plus importants du langage C. Il propose une gestion automatique de la mémoire, ce qui permet aux développeurs de ne pas avoir à allouer puis à libérer manuellement de la mémoire pour chaque objet dans l'application. Ce qui distingue Rust des autres langages modernes, c'est qu'il n'a pas de ramasse-miettes qui supprime automatiquement de la mémoire les objets inutilisés, ni d'environnement d'exécution nécessaire à son fonctionnement, comme le Java Runtime Environment pour Java. Au lieu de cela, Rust dispose de concepts de propriété, d'emprunt, de références et de durée de vie. « En Rust, il existe un système de déclaration des appels d'objet qui permet d'indiquer si son propriétaire l'utilise ou s'il s'agit simplement d'un emprunt. Si vous empruntez simplement un objet, le compilateur veillera à ce que l'original reste en place tant que vous y faites référence. De plus, Rust veillera à ce que l'objet soit supprimé de la mémoire dès qu'il n'est plus utilisé, en insérant l'appel approprié dans le code au moment de la compilation sans frais supplémentaires », explique Triplett.
L'absence de son propre environnement d'exécution peut également être considérée comme un avantage pour Rust. Triplett estime que les langages qui s'exécutent avec cet environnement difficilement utilisable comme outil de programmation système. Comme il l'explique : « Vous devez initialiser cet environnement d'exécution avant de pouvoir appeler tout code, vous devez utiliser cet environnement d'exécution pour appeler des fonctions, et l'environnement d'exécution lui-même peut exécuter du code supplémentaire dans votre dos à des moments inattendus ».
Rust vise également à garantir une programmation parallèle sécurisée. Les mêmes fonctionnalités qui le rendent sûr pour la mémoire suivent des éléments tels que le fait de savoir à quel fil appartient quel objet et quels objets peuvent être transférés entre les fils et lesquels nécessitent un verrouillage.
Toutes ces fonctionnalités rendent Rust suffisamment convaincant pour que les développeurs choisissent d'en faire un nouvel outil de programmation système. Cependant, en matière de calculs parallèles, Rust accuse encore un léger retard par rapport à C.
Triplet prévoit de créer un groupe de travail spécial qui s'occupera de l'implémentation dans Rust des fonctionnalités nécessaires pour qu'il puisse entièrement rivaliser, surpasser et remplacer C dans le domaine de la programmation système. Dans , dédié à sa présentation, il a déclaré que « le groupe FFI / C Parity est en train de se former et n'a pas encore commencé à travailler », pour l'instant il est prêt à répondre à toutes les questions et dans le futur, il publiera des plans de développement de Rust dans le cadre de son initiative pour tous les intéressés.
On peut supposer que dans un premier temps, le groupe FFI / C Parity se concentrera sur l'amélioration du support de la multithreading dans Rust, l'introduction du support BFLOAT16, un format de représentation des nombres à virgule flottante qui est apparu dans les nouveaux processeurs Intel Xeon Scalable, ainsi que la stabilisation des insertions de code en assembleur.
Source : 3dnews.ru
