Programmation Réactive MIZERA Frédéric ZUCCHINI Gilles CIABRINI Damien WOELFFLE Thierry
TER Programmation Réactive PLAN Contraintes et objectifs Choix d’implémentation Le langage réactif Le Réactif dans le jeu Conclusion sur les essais réalisés TER Programmation Réactive
Contraintes et objectifs Nécessité du jeu : faire évoluer des objets en concurrence entités du jeu autonomes synchronisation précise partie visuelle pas trop complexe Choix d’un billard en 3D TER Programmation Réactive
Déroulement d’une phase de jeu Boule blanche frappée... Pour toutes les boules : Fin du tour quand il n’y a plus de mouvement. Mouvement Collisions : - boules - trous - murs Inertie Rendu Tant que la boule n’est pas tombée TER Programmation Réactive
Choix d’implémentation Programmation par “thread” pas assez précise : ordonnancement des tâches imprévisible manque d’équité entre les différents threads implémentation fastidieuse Programmation réactive apporte une solution … TER Programmation Réactive
La programmation réactive Propriétés : fait évoluer des entités en concurrence n’utilise pas de thread gestion intégrée de la synchronisation (instant) communication par événements (diffusion instantanée) Domaine d’application : contraintes de synchronisation “forte” TER Programmation Réactive
La programmation réactive Junior : implémentation du modèle réactif en Java développé par F.Boussinot (Mimosa - INRIA) initialement conçu pour les jeux Senior, moteur réactif utilisé pour le jeu : version Scheme, inspirée de Junior développé par J.Demaria (INRIA) pour Bigloo TER Programmation Réactive
TER Programmation Réactive Besoins annexes Connexions développées pour Bigloo : SDL OpenGL Moteur 3D complémentaire : API Scheme en modèle « objet » optique de programmation de plus haut-niveau TER Programmation Réactive
TER Programmation Réactive Le langage réactif La machine réactive : instancier une machine (define ma-machine (machine&)) ajouter des instructions (add& ma-machine instr . L) faire « réagir » la machine (react& ma-machine) Deux grandes classes d ’instructions : contrôle de l’exécution des instructions communication / synchronisation entre les « tâches » TER Programmation Réactive
Contrôle de l’exécution Mise en séquence (seq& (atom& (print "s1")) (atom& (print "s2"))) Résultat : s1 s2 Mise en parallèle (par& (atom& (print "s1")) (atom& (print "s2"))) Résultat : s1 s2 s2 s1 ou TER Programmation Réactive
TER Programmation Réactive Synchronisation Exemple avec deux tâches : (par& (loop& (atom& (print "gen")) (generate& ‘event) (stop&)) (scan& ‘event (print "catched")))) Communication par événements non valués TER Programmation Réactive
TER Programmation Réactive Le Réactif dans le jeu Durée de vie d’un comportement (until& ‘fire-ball-ok (loop& (scan& ‘return-pressed (launch-whiteball o) (generate-in-machine& ‘fire-ball-ok)))) Ajout dynamique d’instructions TER Programmation Réactive
TER Programmation Réactive Le Réactif dans le jeu Formes Scheme réactives : funcall&, apply& Utilisation avancée des événements : valués locaux (define (render o) (loop& (generate& ‘refresh o) (stop&))) (define (refresh) (loop& (scan& ‘refresh (render-obj3d (the-value&))))) TER Programmation Réactive
Exemple non trivial : la boule (define (ball-behavior o) (local& 'fallen (until& 'fallen (par& (funcall& move o) (funcall& collision o) (funcall& inertia o) (funcall& render o) (funcall& fall o)) (atom& (print "killed"))))) (define (fall o) (loop& (if& (is-fallen o) (generate& 'fallen)) (stop&))) Evénement local Durée de vie du comportement Mise en parallèle de lambdas réactives TER Programmation Réactive
TER Programmation Réactive Utilité du projet Couche « multimédia » rajoutée à Bigloo : SDL, OpenGL, moteur 3D réutilisables Utilisation avancée de Senior : Billard entièrement réalisé en réactif Sémantique de Senior modifiée : (funcall& render obj) copie profonde de obj supprimée TER Programmation Réactive
TER Programmation Réactive Avis personnels Avantages : apprentissage assez rapide réel bénéfice de la couche Scheme faibles ressources machine nécessaires postage d’événements “instantané” sémantiques de certaines instructions Inconvénients : manque de souplesse de certaines instructions manque d’orthogonalité dans la communication avec la machine TER Programmation Réactive
TER Programmation Réactive Conclusion Réponse aux besoins de tests Le billard a permit de valider l’API Senior Senior pratique à l’usage : comportement de la boule 10 lignes comportement du jeu entier 700 lignes TER Programmation Réactive
TER Programmation Réactive Conclusion Programmation réactive puissante par rapport aux threads : 100 boules sur le billard mécanismes de synchronisation automatique bénéfices énormes pour de plus gros jeux TER Programmation Réactive