Thèse soutenue

Méthodes statiques pour la programmation fonctionnelle de simulateurs d'économies
FR  |  
EN
Accès à la thèse
Auteur / Autrice : Antoine Kaszczyc
Direction : Christophe Fouqueré
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance le 18/12/2019
Etablissement(s) : Paris 13
Ecole(s) doctorale(s) : École doctorale Galilée (Villetaneuse, Seine-Saint-Denis)
Partenaire(s) de recherche : Laboratoire : Laboratoire informatique de Paris-Nord (Villetaneuse, Seine-Saint-Denis ; 2001-....)
Jury : Président / Présidente : Daniele Varacca
Examinateurs / Examinatrices : Pierre Boudes, Sylvie Boldo
Rapporteurs / Rapporteuses : Daniele Varacca, Marco Pedicini

Mots clés

FR  |  
EN

Mots clés contrôlés

Mots clés libres

Résumé

FR  |  
EN

La première partie de la thèse a pour sujet les effets de bord dans les programmes fonctionnels, et leur simulation par les monades. Les propositions ont une portée générale : elles peuvent s’appliquer peu importe le thème du programme. Cependant, elles ont été inspirées par un contexte de programmation de simulateur d’économies. Ce type de programme utilise intensément les effets de bord et les répétitions de fonctions. Les propositions de la thèse sont plus pertinentes pour les programmes qui présentent ces caractéristiques.Comme bien d’autres, elles sont pensées dans un objectif d’organisation stricte du programme.Elles ne sont pas adaptées pour réaliser un programme "vite fait bien fait", mais plutôt un programme dans lequel des parties critiques ont été sécurisées et n’ont plus besoin d’attention.Le chapitre 1 introduit la programmation fonctionnelle, et des schémas d’exécution reflétant la consommation mémoire lors de l’exécution. Il introduit les monades, et les transformateurs de monades, en tant que mécanismes permettant d’automatiser la simulation des aspects mutables dans un contexte immutable. Le chapitre 2 aborde la gestion des effets de bord : la simulation d’une variable mutable par la monade State, et l’encadrement de sa valeur par un prédicat. Le chapitre commence par définir précisément cerque signifie le respect du prédicat, notamment par la solution bien connue du type abstrait. Ensuite, nous faisons observer que le prédicat est plus expressif lorsqu’il concerne un type fonctionnel (A ! A) plutôt que simplement A. La monade State fournit un support adéquat pour implanter le prédicat dans le programme, puisqu’elle exprime une variable mutable par des compositions de fonctions. Dans une simulation,la monade State abstraite avec prédicat permet d’exprimer des mécanismes auxiliaires mais ubiquitaires, tels la génération de nombre pseudo-aléatoire, ou la gestion de comptes bancaires. Ce sont deux concepts, la simulation d’effets de bord, et la garantie de prédicat, qui se résolvent par une même structure : la monade State abstraite.Le chapitre 3 concerne un autre aspect de la sécurité du programme : la consommation mémoire. Celle-ci est bornée par les composants physiques de l’ordinateur qui exécute le programme. Si l’exécution du programme nécessite trop d’espace mémoire, elle est simplement arrêtée. Le chapitre présente les deux types d’erreurs mémoire rencontrés en programmation fonctionnelle : Stack_Overflow et Out_Of_Memory. L’erreur Stack_Overflow est causée par les fonctions récursives. Le remède est l’optimisation de l’appel terminal.Cependant il est plus difficilement applicable en présence de monades, qui remplacent l’application standard par l’application bind, sur laquelle le programmeur a moins de contrôle. L’exemple emblématique est la monade State, qui crée des compositions de fonctions dont l’évaluation n’est pas optimisée. De plus,les compositions de fonctions doivent être stockées et risquent de générer une erreur Out_Of_Memory.Le chapitre présente ensuite les solutions existantes, dont la meilleure définit une fonction de récursion spécialisée à chaque monade. Les solutions existantes ne résolvent pas la situation où la récursion n’est pas"contrôlée", c’est à dire où le programmeur fournit seulement la fonction à répéter. Dans ce contexte, les solutions provoquent un risque d’erreur Out_Of_Memory, car elles stockent des opérations en suspension. [....]