Upload
halle
View
41
Download
1
Embed Size (px)
DESCRIPTION
Orchestration d’activités Web avec HipHop. Gérard Berry Chaire Algorithmes, machines et langages. Collège de France Cours 7, 28 mai 2013. Que veut dire orchestrer?. Avoir une vision logique unifiée des événements à traiter événements d’IHM chez le client - PowerPoint PPT Presentation
Citation preview
Orchestration d’activités Web avec HipHop
Gérard Berry
Chaire Algorithmes, machines et langages
Collège de France
Cours 7, 28 mai 2013
G. Berry, Collège de France 21/05/2013 2
3G. Berry, Collège de France 21/05/2013
G. Berry, Collège de France
• Avoir une vision logique unifiée des événements à traiter– événements d’IHM chez le client – événements provenant de services– événements provenant d’objets sur le Web– événements temporels– événements engendrés par Hop
• Définir comment réagir au cours du temps à ces événements, en fonction de la mémoire des événements passés
• Eviter tous les problèmes de synchronisation de threads / event-listeners grâce à l’hypothèse synchrone
21/05/2013 4
Que veut dire orchestrer?
Exactement l’objectif d’Esterel, mais en plus ambitieux :intégration dans Hop, récursivité, dynamicité, client / serveur, etc.
G. Berry, Collège de France 21/05/2013 5
Méthode classique, Javascript / HOP
(add-event-listener! ev (lambda (e) ...))
ev (lambda (e) ...)).........
ev
risque d’interférence:listener dans listenersi listener compliqué
seulementsi idle
G. Berry, Collège de France
ev1 (lambda (x) ...))ev2 (lambda (x) ...))
21/05/2013 6
L’approche synchrone
ev1
1515
code réactif
ev2
réaction décidée !
machine réactive
séquence, parallélisme, communication, préemptionsynchrone, en temps conceptuellement nul
G. Berry, Collège de France
• ReactiveC, F. Boussinot : intégration dans C– successeurs : Junior (Java), SugarCubes, FunLoft, etc.
21/05/2013 7
Précurseurs*
• Reactive ML, L. Mandel : intégration dans CAML– signaux comme valeurs de première classe– récursivité, dynamicité, etc.
• Timed CCP, V. Saraswat : – Intégration dans la programmation par contraintes parallèles– contrôle beaucoup plus implicite*plus exactement : plagiats par anticipation
• Esterel, Lustre, Signal– intégration dans l’environnement non précisée
• Machines d’exécution Esterel (C. André, D. Gaffé)
G. Berry, Collège de France
• Status de présence / absence, unique à chaque instant(now& s) ;; expression Hop(pre& s)
21/05/2013 8
Evénements HipHop
(class HipHopEvent ...) ;; similaire aux événements Esterel v7
• valeur de type quelconque, unique à chaque instant(val& s) ;; expression Hop(preval& s)
• fonction de combinaison des valeurs émises simultanément(class CountEvent::HipHopEvent (status (default #f)) (init (default 0)) (op (default +)))
G. Berry, Collège de France 21/05/2013 9
HipHop Noyau : constructeurs d’ASTstmt :
(nothing&) 0
(emit& event hop*) ! s(v)
(atom& hop)
(pause&) 1
(if& hop stmt stmt) s ? p, q
(seq& stmt+) p ; q
(loop& stmt+) p*
(par& stmt+) p | q
(suspend& event stmt+) s p (trap& trap-ident stmt+) { p }
(exit& trap-ident) k, k 0
(local& (local-sig+) stmt+) s \ p
G. Berry, Collège de France 21/05/2013 10
HipHop dérivé – définitions fonctionnelles
(halt&)
(sustain& event hop)
(await& [ :immediate bool ] delay stmt*)
(abort& [ :immediate bool ] delay stmt+)
(until& [ :immediate bool ] delay stmt+) ;; weak abort
(loop-each& delay stmt+)
(every& [ :immediate bool ] delay stmt+)
(define (sustain& event . hop-list) (loop& (emit& (cons event hop-list) (pause&)))
construit en HOPl’AST de sustain&
11G. Berry, Collège de France 21/05/2013
(define (repeat& N::int stmt) ;; declare a fresh private Hop counter (let ((count::int N)) ;; install a mark to exit after N steps (trap& end ;; reset the local counter (atom& (set! count 0)) ;; loop forever (loop& ;; execute the user stmt stmt ;; decrement the Hop counter (atom& (set! count (+fx count 1))) (if& (= count 0) ;; the end, escape from the loop (exit& end))))))
Vraie fonction,pas macro !
G. Berry, Collège de France 21/05/2013 12
ABRO paramétrique en HipHop
;; Hop function(define (ABRO& A B R O) (loop-each& (now& R) (par& (await& (now& A)) (await& (now& B))) (emit& O)))
// Esterel modulemodule ABRO : input A, B, R; output O;
loop { await A || await B }; emit O; each Rend module
Emettre O dès que A et B sont arrivésRéinitialiser le comportement à chaque R
G. Berry, Collège de France 21/05/2013 13
Variante de ABRO
A partir du premier R, émettre O dès que A et B sont arrivésarrêter tout si A et B en même temps
(define (ABRObis& A B R O) (trap& Done (every& (now& R) (par& (await& (now& A)) (await& (now& B))) (emit& O) (if& (and (now& A) (now& B)) (exit& Done)))))
G. Berry, Collège de France 21/05/2013 14
Modularité héritée de Hop
(let ((s (instantiate::HipHopEvent))) (par& (emitter& s) (receiver& s)))
(define (emitter& s) ... (emit& s) ...)
(define (receiver& s) ... (await& s) ...)
s
G. Berry, Collège de France 21/05/2013 15
Instructions calculées
(define (await-last-of-list& . sig-list) (par& (map await& sig-list)))
(await-last-of-list& A B C)
(par& (await& A) (await& B) (await& C))
Définition dynamique de comportementsgenpar&, dyngenpar& : calculer l’instruction
dynamiquement au moment même de la réaction
G. Berry, Collège de France 21/05/2013 17
Machines d’exécution
• But : gère les événements d’entrée et de sortie• But : déclenche la réaction sur appel externe
(define M (instantiate::HipHopMachine (program P&)))
A
B :: int
MP& : code HipHop
A B val& B
X
Y :: intX Y val& Y
G. Berry, Collège de France 21/05/2013 18
Machines d’exécution – entrées
(hiphop-input! M A)...(hiphop-input! M B 1515)...(hiphop-react!)
(hiphop-input-and-react! M A)
(hiphop-input-and-react! M B 1515)
A
B :: int
X
Y :: int
MP& : code HipHop
A B val& BX Y val& Y
Appel de fonction hiphop-input!dans le code principal ou dans un event-handler
G. Berry, Collège de France 21/05/2013 19
Machines d’exécution - entrées
• Stratégies de gestion des entrées entre deux réactions
A ARRÊT DEMANDÉ : un seul appui suffit à tourner le bit...B Toc : on compte les Toc Toc Toc Toc (hiphop-input! M Toc 3)
A
B :: int
X
Y :: int
MP& : code HipHop
A B val& BX Y val& Y
G. Berry, Collège de France 21/05/2013 20
Machines d’exécution
• Définition d’un event-listener pour chaque sortie appelé par M si le signal est émis
A
B :: int
X
Y :: int
MP& : code HipHop
A B val& BX Y val& Y
(hiphop-add-event-listener! M X (lambda () (action) ))
(hiphop-add-event-listener! M Y (lambda (V) (action V) ))
21G. Berry, Collège de France 21/05/2013
Retour à Manuel Serrano