Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
  1. Livres et vidéos
  2. Rust
  3. Comment et pourquoi Rust ?
Extrait - Rust Développez des programmes robustes et sécurisés
Extraits du livre
Rust Développez des programmes robustes et sécurisés
5 avis
Revenir à la page d'achat du livre

Comment et pourquoi Rust ?

Introduction

Le présent livre se propose de fournir tout ce qui paraît nécessaire à une montée en compétence sur le langage Rust, suffisante pour envisager des développements avancés dans ce langage. Une fois cela dit, deux grandes questions peuvent d’ores et déjà se poser.

D’une part, on peut se demander comment a été créé le langage Rust, par qui, et dans quelles conditions. Surtout, et dans un deuxième temps, on se demandera pourquoi créer Rust. Quelles sont les limites en programmation, en programmation système en particulier, que le langage Rust se propose de surmonter ?

Commençons par définir le plus naïvement possible le langage Rust tout en répondant aux questions de contexte (où, quand, comment, par qui). Une fois cela fait, il sera temps d’aborder la question la plus intéressante : pourquoi ?

Contexte d’invention et nature du langage Rust

Le langage Rust a été officiellement lancé en 2010 par la branche recherche de la fondation Mozilla. D’emblée, le langage a été placé sous licence libre, avec une importante dimension communautaire en matière d’évolution.

Rust a toutefois d’abord été un projet personnel de Graydon Hoare (employé de la fondation Mozilla) à partir de 2006. En 2010, la fondation perçoit l’intérêt du langage pour ses propres développements de navigateurs web (dont Mozilla est le plus connu). Nous aborderons plus avant dans la section suivante l’intérêt que la fondation Mozilla a vu dans l’émergence de ce nouveau langage.

En 2010, le langage est encore balbutiant. La première version de son compilateur, d’abord écrite avec le langage OCaml, est remplacée par le compilateur rustc en 2011. Le compilateur rustc est toujours le compilateur de référence fin 2021.

Une version alpha du langage est publiée début 2012. La première version stable du langage, la version 1.0 sort, elle, en 2015. Lors de l’écriture de ces lignes, la version courante stable est la 1.56.0 en date du 21 octobre 2021.

Pour catégoriser le langage Rust, à défaut de le définir, nous pouvons indiquer...

Pourquoi le langage Rust ?

1. La question de la gestion de la mémoire

La gestion de la mémoire est au cœur de ce qui constitue l’un des principaux atouts du langage Rust. Mais pour l’expliquer, il nous faut d’abord énoncer quelques rappels quant au fonctionnement de la mémoire d’un ordinateur, d’un point de vue programmation.

a. La pile

La pile (stack en anglais) fonctionne rigoureusement comme une pile d’objets physiques, une pile d’assiettes par exemple. Chaque nouvelle assiette trouve sa place sur la pile. Chaque fois que l’on prend une assiette, c’est la dernière arrivée qui est sur le sommet. Le fonctionnement d’une pile peut se voir comme respectant l’acronyme LIFO (Last In, First Out), littéralement « dernier arrivé, premier sorti ».

Typiquement, lors de l’appel d’une fonction ou d’une méthode de classe (dans un langage-objet), les paramètres de la fonction/méthode sont placés sur la pile jusqu’à la fin de l’appel. Dans ce cas précis, on parle d’un passage de paramètre par valeur.

L’alternative est un passage par référence : dans ce dernier cas, les valeurs des paramètres sont stockées dans le tas à des emplacements pointés par des références. C’est donc en quelque sorte les adresses mémoires des différentes valeurs de paramètres qui sont passées en paramètre.

Précisons au passage que la taille de la pile, sa largeur s’exprime en octets. Ainsi, sur une machine 32 bits, la largeur de la pile est de 32 bits, c’est-à-dire 4 octets. Sur une machine 64 bits, la largeur de la pile est de 8 octets. Cela signifie qu’un élément empilé doit faire 8 octets ou moins. S’il fait plus de 8 octets, il faudrait le découper pour l’ajouter en empilant deux nouveaux éléments.

b. Le tas

Le tas (heap en anglais) est l’autre emplacement important relatif à la mémoire d’un ordinateur : il est utilisé pour effectuer des allocations dynamiques de mémoire. Contrairement à l’allocation sur la pile, qui se réalise de façon automatique, l’allocation...

Conclusion

S’il fallait résumer ce qui précède, on pourrait dire que Rust semble apporter deux grands axes de sécurisation du code dès la compilation. D’une part, l’axe relatif à la gestion de la mémoire ; d’autre part, l’axe relatif au multithreading.

Bien sûr, le langage Rust apporte d’autres façons de voir les choses. Nous allons entrer dans le vif du sujet dès le prochain chapitre, Commençons à utiliser concrètement Rust.