Langages concurrents réflexifs
Etude de l'exemple de CodA et ABCL/R3
Riyadh Baghdadi
Université Pierre et Marie CURIE (UPMC)
[Link]@[Link]
5 novembre 2010
Motivation
Comment la réflexion peut aider la
programmation des systèmes
parallèles ?
Motivation
Comment la réflexion peut aider la
programmation des systèmes
parallèles ?
La réflexion
Outil puissant qui permet
l'adaptabilité des applications
Manipulation du comportement
des objets
Motivation
Comment la réflexion peut aider la
programmation des systèmes
parallèles ?
La réflexion Les systèmes parallèles
Outil puissant qui permet
Difficulté de programmation
l'adaptabilité des applications
Difficulté d'adapter les
Manipulation du comportement applications
des objets
Motivation
Comment la réflexion peut aider la
programmation des systèmes
parallèles ?
La réflexion Les systèmes parallèles
Outil puissant qui permet
Difficulté de programmation
l'adaptabilité des applications
Difficulté d'adapter les
Manipulation du comportement applications
des objets
But
Implémenter des fonctionnalités de systèmes parallèles
À l'aide de la réflexion
avec le minimum de modifications de code
Plan
• Exemple 1 : CodA
– Modèle objet (send, accept … )
– Modèle de communication (appel de méthodes...)
– Exemple d'application de réflexion : proxy
• Exemple 2 : ABCL/R3
– Architecture
– Exemple d'application : réplication
• Avantages et limites des langages concurrents réflexifs
Plan
• Exemple 1 : CodA
– Modèle objet (send, accept … )
– Modèle de communication (appel de méthodes...)
– Exemple d'application de réflexion : proxy
• Exemple 2 : ABCL/R3
– Architecture
– Exemple d'application : réplication
• Avantages et limites des langages concurrents réflexifs
CodA
Langage concurrent réflexif, 1995
Chaque comportement = objet
Modèle objet
• Modèle basé sur la communication par messages:
– 1 appel = 1 message
• Les méta-objets de base :
1 Send
2 Accept
3 Queue
4 Receive
5 Protocol
6 Execution
7 State
Exemple de communication
Exemple de communication
Exemple de communication
Exemple de communication
Exemple de communication
Exemple de communication
Exemple de communication
Exemple de communication
Implémenter un proxy à travers la réflexion
• Proxy = intercepter des appels à un objet
• Comment implémenter un proxy à l'aide de :
– la réflexion
– en se basant sur le modèle objet : send, receive, accept...
Implémenter un proxy à travers la réflexion
• Proxy = intercepter des appels à un objet
• Comment implémenter un proxy à l'aide de :
– la réflexion
– en se basant sur le modèle objet : send, receive, accept...
• Modifier le comportement de Accept dans Proxy :
– Transmission du message reçu à l'objet distant
Implémenter un proxy à travers la réflexion
• Proxy = intercepter des appels à un objet
• Comment implémenter un proxy à l'aide de :
– la réflexion
– en se basant sur le modèle objet : send, receive, accept...
• Modifier le comportement de Accept dans Proxy :
– transmission du message reçu à l'objet distant
Exemple de proxy
Exemple de proxy
Exemple de proxy
Exemple de proxy
Exemple de proxy
Exemple de proxy
Plan
• Exemple 1 : CodA
– Model objet (send, accept … )
– Modèle de communication (appel de méthodes...)
– Exemple d'application de réflexion : proxy
• Exemple 2 : ABCL/R3
– Architecture
– Exemple d'application : réplication
• Avantages et limites des langages concurrents réflexifs
ABCL/R3
• Langage concurrent réflexif, Japan, 80s
• Dérivé du Actor Based Concurrent Language (ABCL)
• Architecture :
– Méta-interpréteurs : interprétation des annotations réflexives
– Méta-objets : déscription du comportement des objets
Exemple d'application
Multiplication des vecteurs V1 et V2
V11
V12
V13
X V21 V22 V23 V24 V25
R = V14
V15
Exemple d'application
Multiplication des vecteurs V1 et V2
V11
V12
V13
X V21 V22 V23 V24 V25
R = V14
V15
Exemple d'application
Multiplication des vecteurs V1 et V2
V11
V12
V13
X V21 V22 V23 V24 V25
R = V14
V15
Exemple d'application
Multiplication des vecteurs V1 et V2
V11
V12
V13
X V21 V22 V23 V24 V25
R = V14
V15
Exemple d'application
Multiplication des vecteurs V1 et V2
V11
V12
V13
X V21 V22 V23 V24 V25
R = V14
V15
Cas distribué
Machine 1 Machine 2
V11 V21
V12 V22
V13 V23
V14 V24
V15 V25
V1 V2
Cas distribué
Machine 1 Machine 2
V11 V21 V21
V12 V22 V22
V13 V23 V23
V14 V24 V24
V15 V25 V25
V1 Copie de V2 V2
Cas distribué
Machine 1 Machine 2
V11 V21 V21
V12 V22 V22
V13 V23 V23
V14 V24 V24
V15 V25 V25
V1 Copie de V2 V2
Comment implémenter ça ?
• Qu'est ce qu'on doit implémenter ?
– Un lock sur V2
– Le mécanisme de réplication
• Comment implémenter ça ?
– Lock : modifier “Accept” de V2 (bloquer les messages reçus)
– Réplication :
• Implémenter une méthode replicate-objet
• Modifier le méta-interpréteur
Modification du méta-interpréteur
• On veut ajouter la primitive “replicate (objet)” au langage
• Fonctionnement de l'interpreteur :
– “eval-entry” : evalue l'expression
– “do-method-call” : envoi un message à l'objet qui doit exécuter
l'appel
– l'objet reçoit le message et exécute la méthode demandée
Plan
• Exemple 1 : CodA
– Model objet (send, accept … )
– Modèle de communication (appel de méthodes...)
– Exemple d'application de réflexion : proxy
• Exemple 2 : ABCL/R3
– Architecture
– Exemple d'application : réplication
• Avantages et limites des langages concurrents réflexifs
Avantages/limites des langages concurrents réflexifs
• Modifier le comportement d'un programme sans modifier le code
• Permettre l'ajout d'une extension de programmation parallèle sans modifier
le compilateur
• Limite : les langages concurrents reflexifs ne sont pas adaptés à certaines
formes de problèmes (parallélisation de boucle)
• Limite : les langages concurrents réflexifs sont moins performants
Résumé
• Etude de deux langages réflexifs concurrents (CodA et ABCL/R3)
– Coda
• Model objet : send, receive, accept, queue...
• Exemple de proxy
– ABCL/R3
• Architecture : méta-interpréteurs, méta-objets
• Exemple : implémentation de multiplication distribuée
• Possibilité d'implémenter des fonctionnalités avancées avec un minimum de
modifications
• Cas idéal : tout est transparent à l'application