Applications de langage projectionnel : L’avenir de la programmation

| Oscar Rodriguez | Vaclav Pech |

Nous avons appliqué pendant des années la programmation telle qu'elle nous a été enseignée.

Avez-vous déjà remis en cause ces méthodes et vous êtes-vous demandé s'il existe une meilleure façon de faire ? Découvrez dans ce tutoriel, la programmation projectionnelle.

Commentez

- Titre : Applications de langage projectionnel : L’avenir de la programmation

- Auteurs : Oscar Rodriguez, Vaclav Pech

- Parution : 9 avril 2019

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2019 Oscar Rodriguez. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Cas d'utilisateur IVR (Interactive Voice Response)

- III. Génération de code

- IV. Avez-vous besoin d’un MPS ( Meta Programming System ) ?

I - Introduction

À l'origine, la programmation se faisait en binaire absolu et pendant des années il n'y a pas eu d'alternative. Ce n'est que bien plus tard que le programme d'assemblage SOAP (Symbolic Optimal Assembly Program) a été introduit. Pour les développeurs, l'utilisation d'un assembleur était à réserver aux enfants et tout programmeur digne de ce nom refusait de gaspiller des ressources machines pour cela. (The Art Of Doing Science And Engineering)

Les développeurs avaient pourtant une solution de codage plus simple sous les yeux, mais la plupart n’en tenaient pas compte.

C'est dans ce contexte que John Backus et son équipe ont créé le Fortran en 1957. Encore une fois, les personnes concernées doutaient que cette méthode puisse aller au-delà des performances de l'assembleur. Les anciennes générations tenaient à leurs traditions.

Avec du recul, l'impératif de changement de technologie paraît évident, mais ce n'était pas si simple à l'époque. Désormais, de plus en plus de développeurs sont ouverts aux nouvelles technologies, mais il est difficile d'aller à l'encontre des principes de base inculqués dans les formations à la programmation.

Aujourd'hui, nous disposons d'une technologie unique : l’« édition projectionnelle ». Il ne s’agit pas d’une technologie totalement nouvelle, ses origines remontent aux années 70 et Martin Fowler y fait constamment référence depuis 2008. JetBrains MPS est un outil Open Source qui utilise cette technologie pour créer des langages propres au domaine.

Un éditeur projectionnel permet à l'utilisateur de modifier de façon efficace une représentation de code appelée AST (Abstract Syntax Tree). Il émule le comportement d'un éditeur de texte pour les notations de texte, ainsi que celui d'un éditeur de diagramme pour les langages graphiques, d'un éditeur tabulaire pour l'édition de tableaux, etc. L'utilisateur interagit avec le code au moyen d'éléments visuels intuitifs à l'écran.

Pour les approches reposant sur un analyseur, les utilisateurs disposent d'éditeurs de texte pour entrer des séquences de caractères représentant des programmes. Un analyseur recherche ensuite les erreurs de syntaxe dans le programme et crée une arborescence AST (Abstract Syntax Tree) à partir de la séquence de caractères. L'AST reprend l'ensemble des informations sémantiques exprimées par le programme, p. ex. des mots clés, puis les aspects purement syntaxiques sont ensuite validés.

Dans les éditeurs projectionnels, ce processus s'exécute en sens inverse : alors qu'un utilisateur modifie le programme, l'AST est modifié directement. Cela est similaire à un schéma MVC (Model-view-controller) où toute action de modification déclenche un changement de l'AST.

Lors de la modification d'un diagramme UML, par exemple, les utilisateurs ne dessinent pas de pixels sur un fond vierge pour qu'un « analyseur d'image » lise le dessin, l'analyse, puis crée l'AST. Cela limiterait beaucoup trop ce qui pourrait être dessiné et compris par le moteur. À la place, l'éditeur crée une instance d'une classe lorsque vous faites glisser une classe de la palette vers le document. Un moteur de projection assure ensuite le rendu du diagramme, en dessinant dans ce cas un rectangle pour la classe. Vous pouvez ensuite réorganiser les éléments visuels à l'écran sans modifier la signification de votre diagramme.

Cette approche peut être généralisée pour fonctionner également avec les éditeurs de texte. Tout élément de programme, tel qu'une déclaration variable, une déclaration Si ou un appel de méthode, est stocké en tant que nœud avec un identifiant unique (UID) dans l'AST. Les références sont basées sur des pointeurs réels (références aux UID). L'AST est en fait un graphique ASG (Abstract Syntax Graph) dès le début, dans la mesure où les références croisées sont traitées en premier au lieu d'être résolues après l'analyse. Le programme est ensuite maintenu sur le disque sous forme de code XML, mais ce processus reste transparent pour l'utilisateur.

Le contournement de l'analyseur apporte aux utilisateurs deux avantages supplémentaires :

1. En détachant la notation du format de persistance du code, il devient possible de définir plusieurs notations pour un langage unique. Les utilisateurs peuvent ensuite interagir avec le code au moyen d'une notation, et utiliser une autre notation pour déboguer, réviser le code ou résoudre les conflits de fusion.

2. Les langages peuvent être répartis dans des modules et les utilisateurs peuvent ensuite combiner les langages à utiliser dans les programmes. L'éditeur projectionnel résout facilement toutes les ambiguïtés de définition du langage.

II - Cas d'utilisateur IVR (Interactive Voice Response)

Les applications de langage, telles que JetBrains MPS, promettent de simplifier le processus de création des outils de modélisation. Équipé de JetBrains MPS, un concepteur de langage expérimenté peut définir un ou plusieurs langages de haut niveau et créer un package sous forme d'outil de modélisation autonome.

Le système IVR que nous allons utiliser pour illustrer l'édition projectionnelle dans cet article est un exemple d'outil de modélisation de haut niveau et spécialisé.

Un IVR est un système que les entreprises utilisent pour interagir avec l'utilisateur au moyen d'un clavier, la plupart du temps par téléphone. Il existe de nombreux systèmes de ce type sur le marché. La configuration type consiste à confier la création d'arbre décisionnel au personnel opérationnel pour définir les options, puis de laisser le personnel technique configurer la partie logique dans l'IVR. Dès que l'arbre décisionnel change, un technicien doit intervenir pour ajuster le système. Dans la plupart des cas il suffit de modifier un script et de charger les fichiers, mais pour une personne sans compétences techniques, cette tâche peut paraître compliquée et impressionnante.

L'équipe JetBrains MPS a créé un exemple de menu vocal pour un IVR en utilisant un éditeur projectionnel, conçu pour les utilisateurs sans compétences techniques. Le produit final est un IDE autonome qui permet aux utilisateurs de créer et gérer les définitions des menus vocaux à un niveau élevé d'abstraction.

L'éditeur projectionnel élimine le risque d'introduction d'une erreur de syntaxe par l'utilisateur, dans la mesure où le code est manipulé au niveau conceptuel et non pas au niveau des caractères individuels. L'éditeur offre en outre une assistance sous forme de suggestions dans l'éditeur, de menus de saisie semi-automatique et d'un panneau latéral droit regroupant les actions contextuelles suggérées.

L'IDE autorise également le suivi des versions des définitions et de la collaboration au sein des équipes avec des outils de systèmes de contrôle de version, tels que Git.

En appuyant sur un simple bouton, l'utilisateur convertit la définition de menu vocal au format d'implémentation voulu : scripts HTML, XML, Java ou Asterisk.

III - Génération de code

Cet exemple démontre la flexibilité et la puissance des applications de langage projectionnel, et de JetBrains MPS en particulier. MPS n'impose aucune limite particulière sur le type de code à générer. Il s'agit le plus souvent de code Java, C ou XML, mais certaines personnes l'utilisent pour générer du code Python, des documents RTF et R.

En assurant la cible de génération HTML, le système IVR permet aux utilisateurs de visualiser l'arbre de décision au format Web dans un navigateur Web. Vous pouvez imaginer un serveur d'intégration continue permettant de générer la logique la plus à jour du menu vocal au cours de la nuit, le déployer sur un serveur et en même temps générer la description HTML du menu vocal et la déployer sur le serveur Web interne pour compléter la documentation. Le format XML, d'un autre côté, apporte une autre solution pour d'autres types d'IVR où l'entrée de code XML est nécessaire.

L'implémentation Java non seulement génère le code, mais également crée une application Java locale pour simuler le menu vocal. Cet aspect est très pratique pendant les tests. La simulation permet de prendre le point de vue d'un utilisateur final.

Enfin, mais non des moindres, cet IDE autonome génère les fichiers de configuration Asterisk. Asterisk est un système IVR de pointe, que de nombreuses grandes entreprises utilisent pour créer leur IVR. Avec cet IDE, il est possible de créer des fichiers Asterisk pour définir la logique du menu vocal. Les fichiers de configuration sont chargés sur le serveur Asterisk et le nouveau menu vocal est mis à jour sans avoir à faire intervenir un technicien.

Les générateurs de code sont des composants essentiels des applications de création de langage, car ils donnent du sens aux modèles créés par les utilisateurs. Ils séparent la logique métier (domaine) de la logique d'implémentation. En modifiant le générateur, vous pouvez modifier l'implémentation tout en préservant les investissements en connaissances métier codés dans vos modèles.

IV - Avez-vous besoin d’un MPS ( Meta Programming System ) ?

Avec un MPS, créez votre propre langage spécifique au domaine. Chaque entreprise est différente avec ses propres besoins. Vous devez donc créer votre propre langage pour répondre aux demandes de votre entreprise. MPS vous offre la possibilité d’exprimer vos processus et vos connaissances dans un langage qui utilise directement les concepts et la logique spécifiques à votre domaine.