"Rust est l'avenir de la programmation système, C est le nouvel assembleur" - un discours de l'un des principaux ingénieurs d'Intel

Lors du récent Open Source Technology Summi (OSTS) Josh Triplett, ingénieur senior chez Intel, a déclaré que son entreprise souhaitait que Rust atteigne la « parité » avec le langage C qui domine encore les systèmes et le développement de bas niveau dans un avenir proche. Dans son discours Sous le titre « 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 fonctionnalités de Rust qui lui confèrent un avantage sur C et de la façon dont il pourrait complètement remplacer C dans ce domaine de programmation.

"Rust est l'avenir de la programmation système, C est le nouvel assembleur" - un discours de l'un des principaux ingénieurs d'Intel

La programmation système est le développement et la gestion de logiciels qui servent de plate-forme de création d'applications, garantissant que ces dernières interagissent avec le processeur, la RAM, les périphériques d'entrée/sortie et les équipements réseau. Le logiciel système crée une abstraction spéciale sous la forme d'interfaces qui aident à créer des logiciels d'application sans entrer dans les détails du fonctionnement du matériel lui-même.

Triplett lui-même définit la programmation système comme « tout ce qui n'est pas une application ». Il comprend des éléments tels que le BIOS, le micrologiciel, les chargeurs de démarrage et les noyaux du système d'exploitation, divers types de code de bas niveau intégré et les implémentations de machines virtuelles. Il est intéressant de noter que Triplett estime qu'un navigateur Web est également un logiciel système, car le navigateur est depuis longtemps devenu plus qu'un « simple programme », devenant une « plate-forme autonome pour les sites Web et les applications Web ».

Dans le passé, la plupart des programmes système, y compris le BIOS, les chargeurs de démarrage et le micrologiciel, étaient écrits en langage assembleur. Dans les années 1960, des expériences ont commencé pour fournir un support matériel pour les langages de haut niveau, conduisant à 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. Créé dans le langage de programmation B, qui n'avait même pas de support de frappe, C était doté de puissantes fonctions de haut niveau qui étaient les mieux adaptées à l'écriture de systèmes d'exploitation et de 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, notamment la base de données Oracle, une grande partie du code source de Windows et le système d'exploitation Linux, ont également été écrits en C.

C a reçu un soutien considérable dans ce sens. Mais qu’est-ce qui a poussé les développeurs à s’y tourner ? Triplett estime que pour motiver les développeurs à passer d'un langage de programmation à un autre, ces derniers doivent d'abord fournir de nouvelles fonctionnalités sans perdre les anciennes.

Premièrement, le langage doit offrir de nouvelles fonctionnalités « raisonnablement impressionnantes ». « Il ne pourrait pas être mieux. Il doit être bien meilleur pour justifier les efforts et le temps d'ingénierie nécessaires pour effectuer la transition », explique-t-il. Comparé au langage assembleur, le C avait beaucoup de choses à offrir. Il prenait en charge un comportement quelque peu sécurisé, offrait une meilleure portabilité et de meilleures performances avec des constructions de haut niveau et générait globalement un code beaucoup plus lisible.

Deuxièmement, le langage doit prendre en charge les anciennes fonctionnalités, ce qui signifie que dans l'histoire de la transition vers C, les développeurs devaient s'assurer qu'il n'était pas moins fonctionnel que le langage assembleur. Triplett explique : « Une nouvelle langue ne peut pas seulement être meilleure, elle doit aussi être aussi bonne. » En plus d'être plus rapide et de prendre en charge tout type de données que le langage assembleur pouvait utiliser, le C possédait également ce que Triplett appelait une « trappe de secours », à savoir qu'il prenait en charge l'insertion de code en langage assembleur en lui-même.

"Rust est l'avenir de la programmation système, C est le nouvel assembleur" - un discours de l'un des principaux ingénieurs d'Intel

Triplett pense que C est désormais en train de devenir ce qu'était le langage assembleur il y a de nombreuses années. « C est le nouvel assembleur », déclare-t-il. Les développeurs recherchent désormais un nouveau langage de haut niveau qui non seulement résoudra les problèmes accumulés en C et qui ne peuvent plus être résolus, mais offrira également de nouvelles fonctionnalités intéressantes. Un tel langage doit être suffisamment convaincant pour inciter les développeurs à l'utiliser, doit être sécurisé, fournir une gestion automatique de la mémoire, et bien plus encore.

« Tout langage qui veut être meilleur que le C doit offrir bien plus qu’une simple protection contre les débordements de tampon s’il veut vraiment être une alternative convaincante. Les développeurs s'intéressent à la convivialité et aux performances, écrivant un code explicite et effectuant plus de travail en moins de lignes. Les problèmes de sécurité doivent également être résolus. Facilité d’utilisation et performances vont de pair. Moins vous devez écrire de code pour réaliser quelque chose, moins vous avez de risques de commettre des erreurs, liées ou non à la sécurité », explique Triplett.

Comparaison de Rust et C

En 2006, Graydon Hoare, un employé de Mozilla, a commencé à écrire Rust dans le cadre d'un projet personnel. Et en 2009, Mozilla a commencé à parrainer le développement de Rust pour ses propres besoins et a également élargi l'équipe pour développer davantage le langage.

L'une des raisons pour lesquelles Mozilla était intéressé par le nouveau langage est que Firefox était écrit avec plus de 4 millions de lignes de code C++ et présentait de nombreuses vulnérabilités critiques. Rust a été conçu dans un souci de sécurité et de concurrence, ce qui en fait un choix idéal pour réécrire de nombreux composants de Firefox dans le cadre du projet Quantum visant à repenser complètement l'architecture du navigateur. Mozilla utilise également Rust pour développer Servo, un moteur de rendu HTML qui remplacera à terme le moteur de rendu actuel de Firefox. De nombreuses autres entreprises ont commencé à utiliser Rust pour leurs projets, notamment 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 offre une gestion automatique de la mémoire afin que les développeurs n'aient pas à l'allouer manuellement puis à la libérer pour chaque objet de l'application. Ce qui différencie Rust des autres langages modernes, c'est qu'il ne dispose pas d'un garbage collector qui supprime automatiquement les objets inutilisés de la mémoire, ni de l'environnement d'exécution requis pour le faire fonctionner, comme le Java Runtime Environment pour Java. Au lieu de cela, Rust a les concepts de propriété, d'emprunt, de références et de durée de vie. «Rust dispose d'un système de déclaration des appels à un objet pour indiquer si son propriétaire l'utilise ou simplement l'emprunte. Si vous empruntez simplement un objet, le compilateur en gardera une trace et veillera à ce que l'original reste en place tant que vous le référencez. Rust veillera également à ce que l'objet soit supprimé de la mémoire dès que son utilisation est terminée, en insérant un appel correspondant dans le code au moment de la compilation sans délai supplémentaire », explique Triplett.

L’absence d’un runtime natif peut également être considérée comme une caractéristique positive de Rust. Triplett estime que les langages sur lesquels il fonctionne sont difficiles à utiliser comme outils de programmation système. Comme il l'explique : "Vous devez initialiser ce runtime avant de pouvoir appeler un code, vous devez utiliser ce runtime pour appeler des fonctions, et le runtime lui-même peut exécuter du code supplémentaire dans votre dos à des moments inattendus."

Rust s'efforce également de fournir une programmation parallèle sécurisée. Les mêmes fonctionnalités qui garantissent la sécurité de la mémoire gardent une trace de choses telles que quel thread possède quel objet et quels objets peuvent être transmis entre les threads et lesquels nécessitent un verrou.

Toutes ces fonctionnalités rendent Rust suffisamment convaincant pour que les développeurs le choisissent comme nouvel outil de programmation système. Cependant, en termes de calcul parallèle, Rust est encore un peu en retard sur C.

Triplett a l'intention de créer un groupe de travail spécial qui se concentrera sur l'introduction des fonctionnalités nécessaires dans Rust afin qu'il puisse pleinement égaler, surpasser et remplacer le C dans le domaine de la programmation système. DANS fil de discussion sur Reddit, dédié à son discours, il a déclaré que « le groupe Parité FFI/C est en cours de création et n'a pas encore commencé ses travaux », pour l'instant il est prêt à répondre à toutes les questions, et à l'avenir il publiera certainement les plans immédiats pour le développement de Rust dans le cadre de son initiative auprès de toutes les parties intéressées.

On peut supposer que le groupe FFI/C Parity se concentrera tout d'abord sur l'amélioration du support multithread dans Rust, en introduisant le support de BFLOAT16, un format à virgule flottante apparu dans les nouveaux processeurs Intel Xeon Scalable, ainsi qu'en stabilisant l'assemblage. insertions de codes.



Source: 3dnews.ru

Ajouter un commentaire