previous up next contents
Précédent : Actions de recherche Remonter : Actions de recherche Suivant : Un nouveau modèle

Programmation distribuée d'ordre supérieur

 

Participants : Damien Doligez, Cédric Fournet, Georges Gonthier,Florent Guillaume, Jean-Jacques Lévy, Luc Maranget, Didier Rémy (projet CRISTAL )

Mots clefs : parallélisme, parallélisme asynchrone, pi-calcul, langage fonctionnel, programmation répartie, tolérance aux fautes, agents mobiles, concurrence, ramasse-miettes

Ce travail a été principalement mené au cours d'un séminaire hebdomadaire tenu de novembre 1994 à l'été 1995. Ce groupe de travail a défini un nouveau langage de programmation de haut niveau dédié à la programmation distribuée et mobile. Ses membres ont été les chercheurs du projet et d'autres participants plus ponctuels comme B. Pierce (Cambridge), R. Amadio (INRIA-Sophia) et D. Turner (Edimbourg).

Le point de départ était de constater que, depuis quelques années, on assiste à l'explosion d'applications distribuées à très grande échelle dans de nombreux domaines, notamment autour du Web. Pourtant, la plupart des langages disponibles intègrent mal les primitives donnant accès à la distribution. En particulier, la programmation des agents mobiles et de la résistance aux pannes locales est particulièrement ardue, et requiert l'utilisation d'appels-système complexes.

Une belle théorie des processus mobiles, le -calcul, a été introduite par R. Milner en 1990. Elle suggère qu'un traitement formel du calcul distribué permettrait de clarifier les problèmes pratiques rencontrés. Jusqu'à présent, seuls les langages Facile et Pict correspondent peu ou prou au -calcul. Facile est distribué, mais n'intègre pas complètement communication et fonctionalité. Pict, lui, n'est pas distribué, mais présente une parfaite intégration entre communication et appels de fonctions. Notre objectif était de trouver un langage implémentable pour la programmation distribuée d'ordre supérieur. Il en a résulté la formalisation d'une machine dite ``chimique réflexive'', qui fournit une version d'ordre supérieur à la machine chimique de G. Berry et G. Boudol, et la définition d'un calcul appelé le ``join-calculus''. (cf section 3.2)

Ce modèle très simple nous a permis d'identifier les primitives essentielles pour la distribution d'ordre fonctionnel élevé, d'étudier leur mise en oeuvre effective, et de définir précisément leur comportement en présence de migrations et de pannes.

Notre langage a une portée lexicale globale des identificateurs, avec extrusion de portées, comme dans le -calcul. Sa primitive essentielle est l'envoi de messages asynchrones. Par définition, il contient un sous-ensemble fonctionnel (à la ML). Dans ce cadre très simple, nous proposons un modèle distribué avec:

Nos premières applications mettent en oeuvre des protocoles qui illustrent la distribution dynamique du calcul : des programmes-clients créent des agents mobiles qui permettent de déplacer des requêtes complexes vers les machines des programmes-serveurs, et de les y exécuter localement sans encombrer inutilement le réseau ni craindre la perte de messages. A l'aide de quelques détections de pannes, le protocole garantit sous des conditions minimales que chaque requête est finalement prise en compte, même en présence de clients et de serveurs défectueux. Enfin, la programmation d'ordre supérieur permet de séparer cette bibliothèque d'agents du contenu des clients, des agents et des serveurs.

Afin de valider cette approche expérimentalement, une implémentation physiquement distribuée du langage est en cours. Sa réalisation soulève de nombreux problèmes d'algorithmique distribuée -- comme par exemple celui du glaneur de cellules -- et bien sûr de sécurité. Dans ces deux domaines, nous pensons pouvoir tirer parti de la définition précise de notre sémantique distribuée asynchrone pour proposer des solutions originales.


previous up next contents
Précédent : Actions de recherche Remonter : Actions de recherche Suivant : Un nouveau modèle