previous up next top index
Précédent : Environnements de programmation Remonter : Environnements de programmation Suivant : Transformations de programmes Sisal


Parallélisation de programmes à objets

Participants : Isabelle Attali, Denis Caromel (projet Sloop), Sidi Ould Ehmety, Sylvain Lippi

Mots-clés : sémantique, programmation à objets, héritage, parallélisme, TLA

Nous étudions, à travers les langages Eiffel et Eiffel//, comment paralléliser des programmes à objets. Nous avons tout d'abord décrit la sémantique dynamique d'Eiffel en sémantique naturelle. La contribution majeure de cette sémantique repose sur la définition formelle de l'héritage et de la liaison dynamique en présence de renommage et redéfinition [2].

Nous avons ensuite modifié la sémantique d'Eiffel pour obtenir la sémantique d'Eiffel// (Eiffel parallèle). Les deux langages partagent la même syntaxe, seules leurs sémantiques diffèrent : les instances de classes héritant d'une classe prédéfinie « Process » deviennent des objets actifs (processus) et tout appel de routine sur un processus devient systématiquement un appel asynchrone.

La sémantique opérationnelle d'Eiffel// est décrite en termes de systèmes de transitions dont les états représentent les configurations globales du système. L'exécution d'un programme est modélisée par une séquence de configurations reliées par des transitions à partir d'une configuration initiale donnée. La sémantique d'un programme est donnée par le système de transitions représentant toutes ses exécutions possibles.

Cette sémantique a été définie dans le cadre de Centaur, et un environnement interactif pour le langage Eiffel// a ainsi pu être produit. Celui-ci permet actuellement la visualisation graphique des systèmes d'acteurs générés par Eiffel// [5], notamment on peut visualiser les références entre les différents objets (actifs et passifs), les valeurs des attributs, les requêtes en attente de service, l'activité de chaque objet, l'exécution concurrente des objets, et enfin l'attente par nécessité.

Il faut noter que cet environnement de visualisation est complètement adapté à la version séquentielle du langage, puisque la sémantique d'Eiffel// inclut celle d'Eiffel.

L'existence d'une spécification formelle pour Eiffel et Eiffel// permet d'étudier la parallélisation de programmes Eiffel et la preuve de leur correction. Les techniques classiques de vérification basées sur les systèmes de transition se heurtent à un problème d'explosion combinatoire ; il est donc nécessaire de considérer des méthodes de vérification d'ordre partiel, avec l'assurance que cet ordre partiel est compatible avec l'ensemble des exécutions possibles.

Enfin, nous avons exploré d'autres modélisations pour le langage Eiffel// afin de montrer l'équivalence de programmes séquentiels et parallèles ; en particulier, nous avons étudié comment modéliser des programmes Eiffel// en TLA+ [13]. La modélisation de l'arbre binaire de recherche est relativement compliquée car de bas niveau. Il a été possible de prouver l'équivalence entre la version séquentielle et la version parallèle de l'arbre binaire de recherche. La méthodologie employée repose sur la définition d'invariants (typage, contrôle des données, structures de données, requêtes) et sur une structuration fine des propriétés d'invariance (environ 150 cas différents à traiter). Il reste à généraliser la traduction à l'ensemble du langage Eiffel// au lieu d'un exemple particulier.



previous up next top index Précédent : Environnements de programmation Suivant : Transformations de programmes Sisal Remonter : Environnements de programmation