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