Lors du récent Open Source Technology Summi (OSTS)
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.
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
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