The Lambda Reactor (4).

publicité
The Lambda Reactor
Moteur de jeu fonctionnel réactif
Ordre du jour
1.
2.
3.
4.
5.
Description
Programmation réactive fonctionnelle
Haskell - Elm
Services offerts
Moteur
a.
b.
6.
7.
8.
9.
Fil d’exécution
Méthode de développement
Problèmes!
Apprentissages
Travail Futur
Conclusion
Description
●
Moteur de jeu
○
○
○
●
Réactif
○
○
●
Serveur Haskell
Client Elm
Communication Socket.IO
Sécurité des fils d’exécution
Développement aisé
Fonctionnel
○
○
○
«Si ça compile, ça marche»
Pur
Tests unitaires
Changement majeur : Programmation réactive
●
Abandon du Jalon 3 (Facultatif)
○
○
○
○
○
●
Bots
Explosions
Classes
Brouillard de guerre
Esthétisme
Exploration
Programmation réactive fonctionnelle
●
●
●
Existe depuis 1997
Un moyen de programmer avec des évènements en limitant les effets de bord
Plusieurs implémentations disponible, nous en avons choisi deux:
○
Représentation de Reactive Banana
Évènement: suite infinie représentée par un temps et une valeur (chaque évènement est
immuable)
● Exemple: un message du client, une nouvelle connexion, un tic, …
■ Behavior: représente une valeur continue, variable dans le temps
● Exemple: l'état du jeu, un compteur de nombre de personnes connectées, ...
Représentation de Elm
■ Signal: un mélange des deux, plus simple à utiliser mais moins flexible
■ Chaque signal doit avoir une valeur initiale
■
○
Haskell
●
●
●
Langage fonctionnel créé en 1990 dans le but de faciliter la recherche dans les
langages de programmation
Académique et «open source», donc beaucoup de fonctionnalités avant-gardistes
Pur
○
●
●
Les effets de bord sont contrôlés par le système de types
Évaluation paresseuse par défaut
Commence à être présent dans le marché
○
○
○
Moteur anti-pourriel de Facebook
Description de micro-conducteur chez Bluespec
Et beaucoup plus!
Elm
●
●
●
Conçu en 2012 par Evan Czaplicki
Langage fonctionnel pur inspiré de Haskell
Créé pour rendre le développement Web plus agréable
○
○
●
●
●
●
●
Simplicité
La réactivité est au coeur du langage
Compile en JavaScript, HTML et CSS
Fortement typé et valeurs immuables
Interopérabilité avec JavaScript
Système de gestion des librairies
Utilisé par: Prezi, NoRedInk et d’autres
Services du moteur
●
●
●
●
●
●
●
Chargeur de cartes
Chargeur de lutins (sprite)
Gestion des collisions
Plusieurs outils d’algèbre linéaire
Communication en JSON via Socket.IO
Génération automatique des types en Elm depuis Haskell avec conversion en
JSON
Création d’un module «open source» pour utiliser une bibliothèque réactive
Méthode de développement
●
Construire le graphe d’évènements
○
●
Créer des fonctions évaluées («modifiées») par les évènements
○
●
Ce qui sera reçu du client
Envoyer les informations aux clients
Créer le client qui envoie/réagit au serveur
○
○
Empêche la triche
Peu de travail sur le client, se concentre sur l’affichage
Problèmes rencontrés (Serveur)
●
●
●
●
La bibliothèque de Socket.IO fonctionnait avec des «callbacks» impératif
Code (un peu trop!) parallèle
Création d’une bibliothèque «open source» pour remédier à ces problèmes
Goulots d’étranglements
Problèmes rencontrés (Client)
●
Le langage est encore en développement
○
○
●
Documentation restreinte
Pas toutes les fonctionnalités qu’on voudrait
■ Pas de moyen de générer un canevas à partir d’une image
Gestion des messages rendue difficile par le fureteur
○
Touche Backspace problématique
Apprentissages (Frédéric)
●
●
●
Functional Reactive Programming
Gestion de projet, adaptation
Connaissances approfondies en Haskell.
○
○
Functor, Applicative, Aeson, Lens, Monad, etc
Tests unitaires
Apprentissages (Bruno)
●
●
●
Functional Reactive Programming
Elm
Connaissances approfondies en Haskell
○
○
○
○
Stack (gestionnaire de build pour le langage)
Monad transformer (utilisation de plusieurs monades en même temps)
Free monad (Structure de données permettant de travailler sur l’arbre syntaxique à l’exécution)
Connaissances théoriques du langage
Apprentissages (Philippe)
●
Elm
○
○
●
Functional reactive programming
Programmation Web
■ HTML
■ JavaScript
Gestion du temps
○
○
○
Estimations
Attentes vs. Réalité
Recherche et documentation
Travail futur
1. Mieux séparer le moteur et le jeu
a.
b.
Déjà commencé avec la bibliothèque FRP<->Socket.IO
Service de «GameState» générique
2. Mécanisme de création d’ennemies
a.
b.
3.
Deep Q-Learning
Interface agréable pour employer des stratégies
Plus de services
a.
b.
Explosions
Brouillard de guerre
Conclusion
●
●
Preuve de concept réussie malgré les changements
Exploration
○
Nouvelles connaissances
https://github.com/bruno-cadorette/TheLambdaReactor
Téléchargement