Précédent : Logiciels Remonter : Projet CRISTAL, Programmation typée, modularité
Suivant : Actions industrielles
Participants : Didier Rémy , Jérôme Vouillon
L'étude du langage Objective ML ayant servi de base solide a l'extension du langage Caml avec des objets, maintenant connu sous le nom de OCaml, a été approfondie dans [2]. La couche à objets d'OCaml est l'une des plus attrayantes parmi les langages fortement typés, en dépit de la contrainte imposée par la synthèse des types.
Toutefois, la synthèse des types impose certaines limitations. C'est le cas en particulier dans les classes paramétriques, où les méthodes polymorphes sont parfois nécessaires (ces méthodes seraient des fonctions polymorphes dans un style fonctionnel), mais ne sont pas permises. Cette restriction est imposée par la volonté de préserver la synthèse de types. Différentes solutions ont été proposées pour ajouter du polymorphisme de première classe à ML, mais aucune n'est satisfaisante dans le cas qui nous intéresse. En effet, cela nécessiterait une information de type beaucoup trop lourde et contraignante, et rendrait la définition et l'utilisation des méthodes polymorphes illisibles. En collaboration avec Jacques Garrigue (Univ. de Kyoto), Didier Rémy a étendu le système de type de ML avec des types d'ordre supérieur qui sont introduits explicitement mais peuvent être éliminés implicitement [4]. Cela permet d'ajouter des méthodes polymorphes à Objective Caml d'une façon simple et très naturelle.
Didier Rémy a aussi travaillé sur le typage des objets dans un contexte explicitement typé. Il a montré comment l'enrichissement de la structure des types permettait de typer correctement l'opération d'extension sur les objets en présence de sous-typage (à la fois en largeur et en profondeur), alors que cela était auparavant considéré comme incorrect. L'enrichissement des types des objets permet également d'introduire des méthodes virtuelles directement au niveau des objets. On obtient alors un calcul dans lequel les objets et les classes sont unifiés. Les objets sont simplement des classes dans lesquelles une partie de l'information de type a été oubliée. Une version préliminaire de ces travaux a été présentée au workshop Types and Theorems in Proofs (TTP) à Kyoto [25] et une version plus récente sera présentée à la conférence European Symposium On Programming (ESOP) à Barcelonne [12].
Jérôme Vouillon a approfondi ses travaux sur le langage Objective ML [2], qui sont les fondements de la partie objets de Objective Caml.
Jérôme Vouillon a en particulier étudié les relations entre classes et modules. Objective Caml offre ces deux constructions, qui visent toutes deux à structurer le code et à augmenter sa réutilisabilité. Il était donc important de bien comprendre comment elles interagissent. Certaines constructions sur les classes correspondent directement à des constructions sur les modules (héritage, variables d'instance). D'autres opérations sur les classes peuvent simplement être ajoutées aux modules, par exemple on peut autoriser les méthodes dans les structures et créer des objets à partir d'une structure. Il est cependant nécessaire d'étendre le système de modules de façon à pouvoir abstraire une structure par rapport à une valeur de première classe. Cette opération est intéressante car elle possède des applications en dehors du domaine des objets. Enfin, les styles de programmation à objets ou modulaire restent malheureusement dissociés: une bibliothèque écrite dans un style fonctoriel ne peut pas directement être utilisée comme si elle avait été écrite dans un style à objets.
Un article décrivant le résultat de ce travail a été soumis au groupe de travail FOOL 5 qui doit avoir lieu en janvier 98.
Participants : Didier Rémy , François Pottier
François Pottier s'est intéressé à la synthèse de types pour un langage fonctionnel avec sous-typage. Le système de typage utilisé est, grosso modo, une extension de celui de ML par des ensembles de contraintes de sous-typage. Le sous-typage est une des bases théoriques possibles pour les langages à objets.
Les principaux résultats de cette thèse concernent la mise au point d'une représentation adaptée des ensembles de contraintes, ainsi que de plusieurs algorithmes de simplification de contraintes efficaces, qui rendent la synthèse de types utilisable dans un système de taille réelle. En effet, en l'absence de simplification, les types inférés seraient de très grande taille, provoquant une perte d'efficacité et de lisibilité. Les algorithmes obtenus sont maintenant au point et coopèrent de façon satisfaisante. Une implémentation efficace en Objective Caml a été réalisée. Ce prototype est capable (moyennant passage par un traducteur) de traiter la quasi-totalité du langage Caml-Light.
François Pottier a largement entamé la rédaction de sa thèse, qu'il devrait soutenir durant le premier semestre 1998.
Participants : Michel Mauny , Émilie Sayag
Émilie Sayag a rédigé et soutenu sa thèse [1]. Elle consiste en la définition d'un cadre théorique à la reconstruction dynamique de types. Pour cela, Émilie Sayag a fait l'étude complète d'un nouveau système de types intersections, appelé «types intersections simples». Cette étude montre que ce système de types possède les propriétés les plus importantes des systèmes de types intersections classiques: caractérisation des termes normalisables et normalisables en tête, correction par rapport à un modèle de termes, existence d'un type principal pour les lambda-termes normalisables. De plus, il permet grâce à un semi-algorithme de synthèse de types, basé sur une réécriture des types, de simuler la normalisation d'un lambda-terme au niveau des types.
Par ailleurs, les résultats sur l'existence d'un type principal pour les termes normalisables ont été publiés dans les actes de la conférence LIRA'97 [7]
Participants : Jun Furuse , Pierre Weis
Un début d'implémentation d'un compilateur pour le polymorphisme extensionnel a été écrit par Jun Furuse à partir du compilateur d'Objective Caml. Il reste à étudier un moyen fiable de représenter les types à l'exécution ainsi que leur filtrage. L'étape suivante est d'étudier un moyen de définir des fonctions génériques extensibles, car l'extensibilité est un trait important de la puissance des fonctions génériques. Cependant l'extensibilité pose de nombreux problèmes de sémantique et de compilation. Pour implémenter de façon simple les fonctions génériques extensibles, il faudra sans doute modifier le formalisme, au besoin en le simplifiant pour le particulariser à ce trait essentiel.
Pierre Weis a étudié un mécanisme simple de surcharge d'opérateurs pour le langage Caml, dans lequel les identificateurs surchargés sont définis par un schéma polymorphe et une instance «par défaut», qui sert de position de repli lorsque le contexte d'utilisation de l'identificateur ne permet pas d'identifier une instance unique. Dans ce système, les identificateurs surchargés (ainsi que leurs instances) sont monomorphes. Cette solution simple, compatible avec le langage existant, permet de surcharger les opérateurs arithmétiques, ce qui est l'utilisation classique de la surcharge.
Participants : Valérie Ménissier-Morain
En collaboration avec Catherine Dubois (LaMI, université d'Évry Val d'Essonne), Valérie Ménissier-Morain s'est intéressée à la preuve formelle d'un typeur pour un noyau du langage ML (lambda-calcul étendu): le système de types utilisés est proche de celui de Damas-Milner et met en oeuvre le polymorphisme paramétrique (à la ML). Plus précisément, il s'agissait de prouver que le type inféré par le typeur du langage est correct et est bien le type principal [21,22]. L'algorithme de typage a été décrit de la façon la plus proche possible des implémentations fonctionnelles existantes, ce qui constitue une des originalités de ces travaux car un style prédicatif est plus naturel dans un système d'aide à la démonstration comme le système Coq. Tout au long de ce travail, nous avons attaché une importance toute particulière à la méthodologie et à la réutilisabilité d'une telle automatisation. Cette preuve est nécessaire pour pouvoir espérer certifier complètement un compilateur ML ultérieurement.
Participants : Michel Mauny , Christian Rinderknecht
Dans sa quatrième année de doctorat, Christian Rinderknecht a terminé la formalisation en sémantique naturelle du langage de spécification de protocoles de télécommunications ASN.1 (X.680). Celle-ci inclut une formalisation d'un codage des valeurs (proche des Canonical Encoding Rules) ainsi que d'un contrôle sémantique des types (un contrôle des types des valeurs codées). À partir de ce travail il a prouvé, entre autre, la correction du typage statique, c'est-à-dire que le contrôle statique des types implique que le codage n'engendre que des valeurs sémantiquement correctes («le codage préserve les types»).
La rédaction de sa thèse a été pratiquement achevée, et celle-ci pourrait servir de base au modèle sémantique d'ASN.1 dont l'ISO a besoin. Se basant essentiellement sur ce travail, Michel Mauny et Christian Rinderknecht ont rédigé un texte [24] dans lequel ils donnent une position de principe (position paper) pour fonder le modèle sémantique d'ASN.1.
Participants : Xavier Leroy , François Rouaix
Xavier Leroy et François Rouaix ont travaillé sur une formalisation des propriétés de sécurité que l'on peut garantir en supposant seulement que les applets sont bien typées. Ce travail a formellement justifié les techniques mises en oeuvre par François Rouaix dans le navigateur MMM, telles que l'encapsulation procédurale, l'abstraction de type, et l'insertion de vérifications à l'exécution, en caractérisant précisément leurs implications en termes de sécurité.
Ces résultats, présentés dans [5], constituent une des premières formalisations des propriétés de sécurité des applets, et ouvrent la voie vers des techniques formelles pour développer et valider des environnements d'exécution sûrs pour des applets dans un langage fortement typé.
Participants : Xavier Leroy , François Pessaux
Depuis mars 1996, François Pessaux réalise son travail de thèse, sous la direction de Christian Queinnec et de Xavier Leroy. Ce travail, parainné par le Centre National d'Etudes des Télécommunications, doit à terme aboutir à la réalisation d'un analyseur statique de programmes écrits en Objective Caml, permettant la détection des exceptions levées et non rattrapées pouvant mettre fin à l'exécution de ces programmes.
François Pessaux a étudié trois approches de l'analyse des exceptions:
Participants : Damien Doligez , Xavier Leroy , Jérôme
Vouillon
Objective Caml est notre implémentation la plus récente du
langage Caml. Elle ajoute au langage Caml de base un système
complet d'objets et de classes, mettant Caml au niveau des
meilleurs langages orientés-objets existants; un calcul de
modules puissant, mais néanmoins compatible avec la compilation
séparée; et un compilateur produisant du code assembleur de
hautes performances pour la plupart des processeurs du marché
(Pentium, Alpha, PowerPC, Sparc, Mips, HPPA).
Suite à son introduction en 1996, Objective Caml avait connu une phase de développement intense, en particulier sur le système d'objets. Cette année, nous nous sommes attachés à stabiliser le système et à enrichir son environnement de développement, afin d'en faire un système fiable et répondant aux attentes de nos utilisateurs.
Jérôme Vouillon a poursuivi le développement du système d'objets, ajoutant notamment les méthodes privées et révisant entièrement le mécanisme de synthèse de types pour les objets.
Xavier Leroy a adapté à Objective Caml le débogueur source du système Caml Light, réalisé plusieurs portages d'Objective Caml, et assuré la maintenance de l'ensemble du système. En réponse aux demandes des utilisateurs, il a également retravaillé les bibliothèques de parallélisme (threads) et amélioré l'interopérabilité entre Caml et C.
Damien Doligez (projet PARA), a introduit les pointeurs faibles dans le modèle mémoire d'OCaml et a réalisé un compacteur dont le rôle est d'éviter la trop grande fragmentation de la mémoire durant les exécutions de programmes permanents ou à durée d'exécution très longue. Damien Doligez réalise et maintient le portage Macintosh d'OCaml.
Participant : François Rouaix
François Rouaix maintient la bibliothèque CamlTk, qui permet
d'écrire des interface homme-machine en Caml. A noter cette année
l'adaptation de CamlTk au compilateur natif de Objective Caml, et
le portage sous Windows.
Participant : Daniel de Rauglaudre
Daniel de Rauglaudre a amélioré Camlp4, un pré-processeur pour
Objective Caml. De nombreuses modifications ont été apportées
pour l'installation et l'utilisation du système, les interfaces
des modules, le comportement des grammaires. Quelques changements
ont également été faits pour Camlp4 dans le compilateur Objective
Caml. Daniel de Rauglaudre a aussi développé et amélioré quelques
outils écrits en Objective Caml, dont un éditeur de ligne
(Ledit). Ces développements sont distribués par FTP.
Daniel de Rauglaudre a repris, en collaboration avec le projet Coq, la partie analyse syntaxique du système Coq, en utilisant Camlp4. Il en résulte une meilleure compréhension de cette partie de Coq, une accélération de l'analyse syntaxique (7 fois plus rapide), et une amélioration de son interface. La nouvelle version distribuée de Coq utilise maintenant Camlp4.
Participant : Pierre Weis
Pierre Weis a étudié la génération de programmes d'entrées-sorties à partir des définitions de types d'Objective Caml. Cette étude devrait déboucher sur l'écriture d'un générateur de programmes gestionnaires de bases de données simples, de taille inférieure au mega-octet, cependant fort utiles pour des problèmes de gestion qui ne requièrent pas une technologie lourde (base de données personnelles d'un utilisateur, d'une petite organisation). La gestion de ces bases de données sera faite par une interface HTML.
Participant : Pierre Weis
Pierre Weis a complété le portage de l'arithmétique rationnelle
de Caml V3.1 vers Caml-Light, en particulier sur les machines 64
bits. La version 0.74 de Caml-Light a été rendue publique en
décembre 1997.
Participant : François Rouaix
Il s'agit d'un projet commun avec l'équipe ATOLL, dont la vocation est l'étude de certaines propriétés du Web :
ainsi que l'expérimentation d'outils élémentaires pour la correction de liens défaillants. A plus long terme, ce projet doit servir à expérimenter des techniques linguistiques développées dans le projet ATOLL.
La principale difficulté des programmes d'exploration intensive du Web est due à la taille des données manipulées: en partant d'une estimation de 100 millions de pages Web (HTML seulement), si on veut parcourir l'ensemble du Web dans un temps raisonnable il faut collecter les documents à un rythme d'environ 1 million par jour. Si de surcroît on ne veut pas saturer les serveurs, par exemple en espaçant les requêtes, il faut faire en sorte de parcourir simultanément plusieurs centaines de serveurs. Naturellement, le programme doit être robuste, tolérant aux pannes de réseau, et pouvoir tourner plusieurs semaines de suite. Les seuls «robots» de ce type existant actuellement sont tous commerciaux, et leur conception relève du secret industriel.
Une première étape de ce projet a été réalisée cette année : l' aspirateur, un «robot» d'exploration du WWW, a été implanté (en Objective Caml) et testé sur le domaine .fr au printemps. En 5 à 6 semaines, l'aspirateur a parcouru plus de 3 000 000 d'URLs réparties sur plus de 7000 sites, en utilisant une simple station de travail. Cette expérience a montré que Caml était tout à fait adapté à ce type de programmation, à la fois concurrente et multi-processus. De plus, l'architecture très modulaire de l'aspirateur nous permet d'envisager de connecter très facilement différents backend afin de poursuivre les expériences prévues.
Participant : Xavier Leroy , François Rouaix
Le navigateur MMM, réalisé par François Rouaix, comprend les applets écrites en Caml, c'est-à-dire qu'il donne la possibilité de charger avec les pages Web des programmes écrits en Caml qui vont s'exécuter dans le navigateur. Ce mécanisme pose un évident problème de sécurité puisqu'un utilisateur va exécuter sur sa propre machine et à son insu des programmes dont il ne sait rien. Comme dans les approches similaires basées sur un langage typé (p.ex. Java), il était reconnu informellement que le typage, combiné avec des techniques particulières de vérification de droits d'accès, permettait de garantir qu'une certaine politique de sécurité était respectée (par exemple la restriction de l'accès aux fichiers de la machine). Aucune justification théorique de cette intuition n'avait été donnée jusqu'ici.
Le travail effectué par Xavier Leroy et François Rouaix dans
le cadre de l'action VIP du GIE Dyade sur les liens entre typage
et sécurité (cf. section ) a formellement justifié cette
approche.
Participants : Jun Furuse , François Rouaix
Cette année, le travail réalisé par François Rouaix sur MMM a consisté à mettre à jour la machine d'affichage HTML, qui est capable maintenant de traiter HTML 3.2 ainsi que les frames. Nous avons également amélioré la robustesse du butineur pour afficher au mieux les documents HTML mal formés, augmenté la vitesse de traitement des documents, et rendu l'interface homme machine plus confortable. Pour pallier les problèmes légaux que pose l'utilisation des signatures cryptographiques requises pour garantir la sécurité des applets Caml, il est maintenant possible de transférer les applets sous forme source, et de les compiler au vol.
Jun Furuse a implémenté l'internationalisation de MMM. Malheureusement, il n'y a pas encore de version internationalisée de Tk, c'est pourquoi MMM ne peut traiter que les langages occidentaux et le japonais.
Par ailleurs, nous avons terminé l'implantion de Calves, un plug-in pour Netscape Navigator qui permet de visualiser dans Netscape les applets écrites en Objective Caml.
Le relais V6 est actuellement en test chez plusieurs utilisateurs: les services actuels (notamment le cache et l'indexation au vol) ont été largement mis à l'épreuve. Les besoins exprimés par ces utilisateurs vont nous permettre d'améliorer ces services en ciblant des configurations particulières: utilisation en mode non-connecté (ordinateurs portables), organisation des informations d'un utilisateur ou partage pour un groupe d'utilisateurs.
Participants : Daniel de Rauglaudre, Pierre Weis
Pierre Weis a écrit en Caml Light un système de gestion
électronique des demandes de laissez-passer de l'Inria
Rocquencourt. L'écriture de ce programme a permis de mettre en
évidence la bonne adéquation de Caml à ce genre d'applications,
dans un contexte a priori peu favorable au langage.
Daniel de Rauglaudre a développé et maintenu Wserver, un module de bibliothèque permettant de construire des petits services Web produisant des pages HTML.
Daniel de Rauglaudre a développé un logiciel de généalogie, GeneWeb, écrit en OCaml, utilisant Camlp4 et Wserver. Ce logiciel se présente comme un service Web, donc consultable par un navigateur. Il est spécialisé dans les calculs de parenté et de consanguinité: les algorithmes sont dûs à Didier Rémy. GeneWeb peut gérer en même temps plusieurs bases de données généalogiques, gère les conflits d'accès, et est multilingue. Le logiciel traite également les problèmes de confidentialité et de modifications des données, par mot de passe. Il peut aussi importer et exporter des données d'autres logiciels, par le format GEDCOM (standard en généalogie). GeneWeb est un prototype, accessible sur le Web, mais le programme n'est pas encore distribué.
Participants : Erwan David , Xavier Leroy , Michel Mauny ,
Bernard Serpette
Dans le cadre d'une collaboration avec le GIE Dyade et Bull CP8 (Transac), Xavier Leroy, Michel Mauny et Bernard Serpette (action AR) ont apporté leur expertise en matière de machines abstraites et de compilation au projet JavaCard. Le projet JavaCard consiste à définir une architecture de programmation standard pour cartes à puces, basé sur un sous-ensemble du langage Java et de la machine abstraite JVM, afin de permettre l'écriture d'applications fonctionnant sur toutes les cartes JavaCard, sans être liées à un fabricant et un modèle particulier de carte. La définition de cette architecture logicielle commune s'effectue au sein du forum JavaCard, qui regroupe les principaux fabricants de cartes, ainsi que JavaSoft et de grandes institutions bancaires.
Le projet JavaCard lance des défis techniques majeurs: la très faible puissance de calcul et la petite taille mémoire disponibles sur la carte rendent impossible l'utilisation d'une machine abstraite JVM classique, et nécessitent le développement de techniques adaptées pour l'interprétation et le chargement du code. Xavier Leroy a réalisé une étude de faisabilité de la JavaCard, en s'appuyant sur l'expertise en matière de machines abstraites et de compilation acquise sur Caml. Cette étude a fourni à Bull CP8 des arguments pour influer sur le processus de normalisation qui se déroulait en parallèle au sein du forum JavaCard.
Erwan David, embauché comme Ingénieur-Expert fin 1997, reprend ce travail, en se penchant sur diverses optimisations des interprètes embarqués. L'objectif, à terme, est de compléter la chaîne de réalisations et de chargement de programmes embarqués sur cartes à puce.
Participant : Valérie Ménissier-Morain
Valérie Ménissier-Morain a occupé jusqu'au 1er septembre 1997 un poste d'ingénieur-expert du projet Cristal, financé par le GIE Dyade. Il s'agissait de certifier des protocoles cryptographiques, c'est-à-dire de garantir l'intégrité et la confidentialité de données transmises par des moyens de communications non sûrs tels que le réseau Internet en utilisant ces protocoles. L'action VIP du GIE Dyade utilise le système Coq pour réaliser une certification formelle de ces propriétés. Valérie Ménissier-Morain a apporté sa connaissance du système Coq pour améliorer et automatiser davantage cette certification [20] en développant une réflexion méthodologique sur le développement de preuves en Coq [17].
Participants : Robert Harley , Michel Mauny
Robert Harley a continué son travail de thèse en développant des outils efficaces pour l'arithmétique des grands entiers et polynômes. En particulier il a apporté des améliorations algorithmiques et des optimisations d'implémentation au prototype de son nouvel algorithme de primalité. Sur une station Alpha à 500 MHz, la démonstration pour un nombre premier de 500, 1000 ou 1500 chiffres prend respectivement trente minutes, seize heures ou quatre jours.
De plus, il a appliqué ces outils au calcul d'un logarithme discret dans un groupe fini de points sur une courbe elliptique. La taille du groupe étant un nombre premier de 79 bits, il s'agit donc du plus grand problème de ce type résolu à ce jour. Robert Harley a fait fonctionner son algorithme sur une quinzaine de stations Alpha (d'une puissance totale de calcul équivalente à 6 stations cadencées à 500Mhz) pendant 2 semaines. La plupart de ces machines étaient sur le site de Rocquencourt, les autres étant au California Institute of Technology et aux Fermi Laboratories (FNAL). Robert Harley a été aidé dans cette tâche par Wayne Baisley (FNAL). Ils ont ainsi été les premiers à répondre au challenge posé par la compagnie Certicom début novembre 1997.
Il a également commencé une implémentation en OCaml de son algorithme de primalité et cherché à démontrer de façon constructive certaines des propriétés de corps de nombres qui servent à montrer sa correction.
Participants : Xavier Leroy , Fabrice Le Fessant
Objective Caml a servi de base à trois expériences de programmation parallèle et distribuée:
Participant : Didier Rémy
Didier Rémy a également travaillé sur le calcul Join, en collaboration avec les membres du projet PARA. En particulier, les travaux sur le typage du calcul Join ont été présentés à différents séminaires ainsi qu'à la conférence européenne CONCUR en Pologne [3]
Participant : Christian Queinnec
Christian Queinnec, en collaboration avec Luc Moreau de l'université de Southampton, a défini et étudié la notion de programmation énergétique. Ce concept permet de contrôler finement l'évaluation parallèle ou répartie d'expressions par le biais de l'énergie qu'elles consomment pour leur accomplissement [18,8]. Par exemple, un calcul dont les premiers résultats ne sont guère satisfaisants peut être suspendu, son énergie restante est alors redirigée vers des calculs plus prometteurs. Récemment, les deux auteurs ont mis sur pied une notion d'énergie multiforme permettant de contrôler non seulement le temps de calcul mais d'autres aspects comme, par exemple, la consommation de mémoire, le nombre de machines impliquées, le nombre de fichiers ouverts etc.
Participant : Christian Queinnec
Christian Queinnec a poursuivi l'implantation d'un système de mémoire partagée répartie, DMEROON. Ce système procure une bibliothèque de fonctions permettant de décrire des structures de données (pouvant contenir des pointeurs), de les manipuler et de les échanger au dessus d'Internet. Des capacités de description de ces structures en HTML sont intégrées au prototype qui peut jouer le rôle d'un serveur HTTP d'objets. L'implantation est réflexive et s'auto-décrit. La bibliothèque a été conçue pour être multilingue (C et Bigloo pour l'instant) et multi-usagers. Ce système n'est pas encore diffusé mais a servi de plate-forme d'expérimentation pour l'élaboration d'un nouveau mécanisme d'encodage/décodage de données [11] ainsi que pour une étude de fonctions génériques réparties [10] permettant d'ajouter dynamiquement de nouveaux traitements à des objets existants.