Refonte de DynaMoW

Dans l'équipe Specfun

Maxence Guesdon — INRIA Saclay-Île-de-France

jeudi 24 mars 2016 — INRIA Saclay-Île-de-France - Séminaire SED

Plan

Qu'est-ce que DynaMoW ?

Limites et problèmes

Dépendance envers Camlp4 dont l'avenir est incertain.

Utilisation de Apache et FastCgi

Faibles possibilités pour les paramètres saisis par l'utilisateur: pas de listes, ...

Démo

Application de test.

Nouvelle architecture

L'application passe son temps principalement à attendre lors d'opérations d'entrée/sortie:

➩ contexte typique d'utilisation de la bibliothèque Lwt.

Nouvelle architecture (2)

Objectif: une application = un exécutable embarquant un serveur web et gérant des bassins de sessions des CAS.

Déroulement de la gestion d'une requête:

Autres changements: Remplacement de Camlp4

Remplacement de Camlp4 par un préprocesseur basé sur un lexeur (développé avec Sedlex) qui transforme des <foo<...>> en nœuds d'extension [%dmw.foo ...].

Développement d'un processeur ppx pour remplacer ces nœuds d'extension par du code généré. Exemple:

 <int< $(x) + $(y) >> 

est transformé par le préprocesseur en

[%dmw.int " "[%dmw.mlsymb x]" + "[%dmw.mlsymb y]" "]

puis le processeur ppx remplace les nœuds d'extension par du code généré:

CAS__.eval_int
    (String.concat ""
       [" "; snd (CAS__.cas_ref x); " + "; snd (CAS__.cas_ref y); " "])

Ici un appel au CAS demandant une évaluation d'une expression pour retourner un entier. L'expression envoyée au CAS contient les références à des symboles du CAS précédemment calculés dans la même session.

Autres changements: Compteurs dynamiques

Dans le précédent DynaMoW: attente que toutes les sous-sections d'une section soient disponibles pour afficher et numéroter.

Maintenant, numérotation et renumérotation dynamique en fonction des suppressions et insertions dans le document. Gestion de la numérotation et des références aux équations, théorèmes, ... Envoi au navigateur client d'ordres de remplacement dans le DOM quand un compteur change de valeur.

Algorithme: chaînage entre les instances d'un compteur; le chaînage contient aussi des nœuds d'interface autour des "trous". Le document calculé dans le trou utilise ces interfaces pour insérer des instances de compteurs entre les nœuds interface d'entrée et de sortie ➩ toutes les instances restent chaînées et l'insertion d'une nouvelle instance provoque l'incrémentation des instances suivantes du même compteur et les ordres de mise à jour associées.

En cours / à faire

Merci

Questions ?

Credits

Slideshow scripts from Dave Raggett