Thèse en cours

Formalisation de la sémantique d'emprunt en Rust

FR  |  
EN
Auteur / Autrice : Alban Reynaud michez
Direction : David MonniauxSylvain Boulme
Type : Projet de thèse
Discipline(s) : Informatique
Date : Inscription en doctorat le 01/09/2022
Etablissement(s) : Université Grenoble Alpes
Ecole(s) doctorale(s) : École doctorale mathématiques, sciences et technologies de l'information, informatique (Grenoble ; 199.-....)
Partenaire(s) de recherche : Laboratoire : VERIMAG
Equipe de recherche : Preuves et Analyses de Code pour la Sûreté et la Sécurité

Résumé

FR  |  
EN

Rust est un langage de programmation système récent. Il est accès sur les performances et la sureté. Notamment, il permet de gérer la mémoire avec un grand contrôle tout en évitant la plupart des erreurs de mémoire grâce à son système de type. Ce système repose sur les notions de propriété (ownership) et d'emprunt (borrowing). La mémoire est souvent accédée au travers de références respectant des règles d'emprunts. Enfin, le respect de ces règles est vérifié à la compilation par une composante du compilateur nommée « borrow checker ». L'algorithme actuel de borrow checker est nommé « non-lexical lifetimes » (NLL). Le projet RustBelt démontre notamment qu'un fragment safe du langage vérifié avec NLL s'exécute sans erreurs. Cependant NLL possède des limitations et il est prévu qu'il soit remplacé par un algorithme nommé « Polonius ». Mais pour aucune de ces algotrithme il n'existe une spécification de ce qu'est censé faire le borrow checker, se limitant principalement à une description des algorithmes. Mon projet est de proposer un cadre formel pour le borrow checker. Cela consiste en la proposition d'un modèle du langage safe, inspiré d'une représentation intermédiaire appelée la MIR. Des garanties de sureté sont ajouté au niveau opérationnel à l'aide du modèle « Stacked Borrows ». Le borrow checker est défini comme une interprétation abstraite de ce modèle. Cela donne un lien clair entre la sémantique opérationnel et le résultat de l'analyse. Enfin, cela faciliterait les améliorations du borrow checker (par exemple : le two-phase borrow checking). Il suffirait pour cela de modifier la sémantique opérationelle ou le domaine abstrait.