Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parDorothée Calvez Modifié depuis plus de 10 années
1
Orchestration d’activités Web avec HipHop
Gérard Berry Chaire Algorithmes, machines et langages Collège de France Cours 7, 28 mai 2013
2
G. Berry, Collège de France
21/05/2013
3
G. Berry, Collège de France
21/05/2013
4
Que veut dire orchestrer?
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 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) ...)) seulement si idle ev risque d’interférence: listener dans listener si listener compliqué ev (lambda (e) ...)) ... G. Berry, Collège de France 21/05/2013
6
L’approche synchrone machine réactive ev1 ev1 (lambda (x) ...))
1515 réaction décidée ! code réactif séquence, parallélisme, communication, préemption synchrone, en temps conceptuellement nul G. Berry, Collège de France 21/05/2013
7
Précurseurs* Esterel, Lustre, Signal
intégration dans l’environnement non précisée Machines d’exécution Esterel (C. André, D. Gaffé) ReactiveC, F. Boussinot : intégration dans C successeurs : Junior (Java), SugarCubes, FunLoft, etc. 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 G. Berry, Collège de France 21/05/2013
8
Evénements HipHop (class HipHopEvent ...) ;; similaire aux événements Esterel v7 Status de présence / absence, unique à chaque instant (now& s) ;; expression Hop (pre& s) 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’AST
stmt : (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 HOP l’AST de sustain& G. Berry, Collège de France 21/05/2013
11
Vraie fonction, pas macro ! (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
Emettre O dès que A et B sont arrivés Réinitialiser le comportement à chaque R // Esterel module module ABRO : input A, B, R; output O; loop { await A || await B }; emit O; each R end module ;; Hop function (define (ABRO& A B R O) (loop-each& (now& R) (par& (await& (now& A)) (await& (now& B))) (emit& O))) 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és arrê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 comportements genpar&, dyngenpar& : calculer l’instruction dynamiquement au moment même de la réaction G. Berry, Collège de France 21/05/2013
16
Macro-définition de dyngenpar&
(define-macro (dyngenpar& bindings :when condition . body) (let ((genpar-id (gensym))) `(let ((genpar (lambda () (genpar& ,bindings (par& :id ,genpar-id (every& ,condition (hiphop-append-child! (current-machine) ,genpar-id (genpar)) (pause&)))))) 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 A B :: int M P& : code HipHop B val& B X Y :: int Y val& Y (define M (instantiate::HipHopMachine (program P&))) G. Berry, Collège de France 21/05/2013
18
Machines d’exécution – entrées
Appel de fonction hiphop-input! dans le code principal ou dans un event-handler A B :: int X Y :: int M P& : code HipHop B val& B Y val& Y (hiphop-input! M A) ... (hiphop-input! M B 1515) (hiphop-react!) (hiphop-input-and-react! M A) (hiphop-input-and-react! M B 1515) 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 B :: int X Y :: int M P& : code HipHop B val& B Y val& Y 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) 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 M P& : code HipHop B val& B Y val& Y (hiphop-add-event-listener! M X (lambda () (action) )) (hiphop-add-event-listener! M Y (lambda (V) (action V) )) G. Berry, Collège de France 21/05/2013
21
Retour à Manuel Serrano
G. Berry, Collège de France 21/05/2013
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.