Historique de Rust

Ce guide est actuellement en cours de rédaction : si quelque chose vous semble mal expliqué ou peu clair, n'hésitez pas à me faire un retour sur github ou par mail

Une nouvelle feuille sera publiée chaque semaine : si vous souhaitez être averti·e des nouveaux contenus, abonnez-vous par mail ou suivez-moi sur twitter

Rust est un language crée par Mozilla Research. Une partie de leur travail consiste à travailler sur un navigateur internet nouvelle génération : c'est le le projet Servo

Une partie de la question posée par Servo est : si on écrit aujourd'hui le coeur d'un nouveau navigateur en prenant en compte les expériences passées, en quel language faut-il le faire ?

A l'heure actuelle, les principaux navigateurs sont constitués de plusieurs millions de lignes de code en C++. Le choix du language C++ est lié à une nécessité de pouvoir contrôler ce qu'il se passe au bas-niveau pour maîtriser les performances de rendu du navigateur. C++ offre notamment un grand contrôle de la gestion de la mémoire.

La contrepartie de cette flexibilité, c'est qu'une mauvaise manipulation des développeur·e·s peut vite mener à une erreur mémoire pour l'application : libération d'une mémoire déjà libérée, pointeur qui pointe vers une valeur qui n'est plus la bonne (dangling pointers), fuites de mémoires (memory leaks), "data races" ...

Le développeur peut faire des efforts et preuve de discipline pour respecter un ensemble de règles pour éviter au maximum ces erreurs, mais en C++, rien ne me permet de garantir dans le langage lui-même que le code final ne contient aucune de ces erreurs, ni au moment de la compilation, ni après.

Il s'agissait pour le projet Servo de trouver un langage qui offrait le même niveau de contrôle et performance que le C++ tout en offrant de solide garanties concernant la sûreté de la mémoire pour s'assurer que toutes ces erreurs mémoire deviennent impossibles. C'est ce que Rust nomme la sûreté de la mémoire.

Les personnes en charges du projet ont estimé que la plupart des autres languages disponibles offraient :

  • Un grand contrôle du bas-niveau mais peu ou pas de garanties de sûreté de la mémoire
  • Des garanties solides de la sûreté mémoire mais peu ou pas de contrôle du bas-niveau.

Rust est né du besoin de satisfaire ces deux conditions à la fois : un grand contrôle de la mémoire tout en garantissant la sûreté de la mémoire. Ainsi une des promesses fondamentales de Rust par rapport à C++, c'est que si le code compile sans erreur, c'est qu'il n'y aura pas d'erreur mémoire au moment de l'éxécution du programme.

Servo, encore en version expérimentale, est aujourd'hui codé en Rust