IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

JetBrains annonce la sortie de la version 2020.1 de MPS (Meta Programming System)
La première mise à jour majeure de l'année pour son environnement de développement de langages dédiés

Le , par Michael Guilloux

146PARTAGES

8  0 
Un langage dédié (en anglais, Domain specific language ou DSL) est un langage de programmation dont les spécifications sont conçues pour répondre aux contraintes d’un domaine d'application précis. Il s'oppose conceptuellement aux langages de programmation classiques (ou généralistes) comme Java ou C, qui tendent à traiter un ensemble de domaines. Dans de nombreux cas, les DSL ne sont pas conçus pour être utilisés par des développeurs, mais par des non-programmeurs maîtrisant parfaitement le domaine couvert par le langage dédié.

La construction des langages dédiés diffère fondamentalement de celle d'un langage classique. Le processus de développement peut s’avérer très complexe. Sa conception nécessite en effet une double compétence dans le domaine à traiter et en développement informatique. Mais un langage dédié étant basé sur les concepts et les fonctionnalités d'un domaine spécifique, il reste un moyen efficace de décrire et de générer des programmes dans ce domaine ; ce que veut faciliter JetBrains avec MPS.

MPS vous permet de concevoir votre propre langage dédié avec un environnement de développement complet. Il offre un éditeur de code et est fourni avec son propre moteur de génération de code, qui peut être utilisé pour fournir une sémantique aux DSL basés sur MPS. Vous pouvez donc créer des générateurs pour compiler votre DSL dans plusieurs langages cibles, tels que Java, C, XML, etc.

Pour ceux qui connaissent déjà MPS, après la version 2019.3 principalement axée sur la stabilisation du produit (plus de 700 problèmes corrigés), MPS 2020.1 apporte plusieurs nouvelles fonctionnalités et des améliorations de différents sous-systèmes. Nouveautés et améliorations que nous présenterons avec un peu plus de détails dans la suite.

Utilisation de séparateurs différents selon la position dans la liste

Lors de la modification de nœuds avec la cardinalité (0, n) ou (1, n), vous aviez la possibilité de fournir un séparateur personnalisé entre les valeurs en implémentant une fonction de requête de séparateur. Maintenant, vous pouvez passer plus d’arguments dans la fonction de requête (à savoir prevNode et nextNode). Ces derniers permettent de fournir un séparateur personnalisé pour chaque paire de valeurs. Dans la capture d’écran suivante, “and” et “, ” sont les séparateurs.


Light patterns

Un pattern language permet de définir des modèles de structure et de faire correspondre des nœuds avec ces derniers. Il utilise des éditeurs de concept courants qui donnent au modèle une apparence similaire aux nœuds qu’il accepte. Mais pour certains éditeurs complexes qui ne correspondent pas exactement à la structure du concept, il peut être plus confortable d’utiliser des light patterns (constructeurs de modèles) qui décrivent la structure requise littéralement.


Saisie par-dessus un texte existant

La possibilité de saisir par dessus du texte existant est une nouvelle fonctionnalité de l’éditeur projectionnel, qui le rapproche un peu d’un éditeur de texte. Lors de la saisie dans une cellule de texte, si le caractère que vous venez de saisir était déjà présent à la position du curseur, le curseur se déplacera comme si vous veniez de remplacer le caractère existant. Cette fonctionnalité n’est déclenchée que si la frappe ne peut pas être traitée correctement et serait autrement ignorée (par exemple dans les cellules constantes) ou rendrait le contenu de la cellule invalide.

Infobulles

L'extension d'éditeur Tooltips de la plateforme mbeddr a été ajoutée à MPS. Une migration sera également prévue pour le langage mbeddr. Précisons que mbeddr est un langage de programmation extensible basé sur C et un EDI pour les systèmes embarqués.


Améliorations de BaseLanguage inspirées de Java

BaseLanguage est un langage équivalent à Java, qui partage avec Java presque le même ensemble de constructeurs. Il a en effet été créé en tant que copie de Java 6 avant de se doter de plusieurs extensions au fil du temps. BaseLanguage est également la cible la plus courante de la génération de code dans MPS.

Dans cette nouvelle version de MPS, BaseLanguage inclut désormais la fonctionnalité "try with resources", la détection (catch) de plusieurs exceptions, l’inférence de type pour les variables locales, et les méthodes d’interface par défaut et privées. Pour assurer la compatibilité avec les processus de build qui nécessitent un niveau de langage Java spécifique, chaque solution peut être configurée pour interdire les fonctionnalités de langage non compatibles avec ce niveau.

À l’exception de la fonctionnalité d'inférence de type pour les variables locales, qui nécessite j.m.baseLanguage.varVariable, ces fonctionnalités ne nécessitent aucune autre importation de langage.

Suppression des extensions de langage inutiles

MPS exigeait auparavant une dépendance "extends" entre les langages lorsqu’un éditeur de langage fournissait des composants d’éditeur pour les concepts d’un autre langage. Ces dépendances ne reflètent pas nécessairement la relation entre les langages et entraînent parfois un traitement exhaustif de la hiérarchie des langages.

Dans la version 2020.1, le générateur détecte les extensions de l’éditeur pour d’autres langages et génère le code respectif qui manifeste la dépendance de façon explicite, afin que les concepteurs de langage n’aient pas à se soucier de ce type particulier de dépendance entre les langages. La dépendance "extends" entre les modules de langage n’est plus nécessaire pour activer les extensions de l’éditeur.

Commentaires Javadoc dans les modèles de stub Java

Les bibliothèques Java sont utilisées dans le monde de MPS à l’aide de modèles de stub Java. Ces modèles sont construits à partir des informations .class et n’ont donc pas de documentation comme javadocs.

Dans la version 2020.1, un nouveau mécanisme permet de spécifier un zip contenant les sources d’une bibliothèque en plus de la bibliothèque .jar, et MPS est capable d’extraire le javadoc des sources pour le présenter en parallèle des informations extraites des fichiers de classe. Cette fonctionnalité est notamment pratique lorsque l’on utilise une bibliothèque Java à partir de MPS et que l’on doit accéder au javadoc de la bibliothèque. Il est beaucoup plus facile de naviguer vers le code concerné et sa documentation directement dans MPS que de basculer vers un emplacement externe pour ensuite lancer une recherche et lire le code. C’est encore plus important pour MPS lui-même, car des parties essentielles de son API sont fournies sous forme de stubs Java.

Détection d’erreurs pour les éditeurs défectueux

Si le code dans l’aspect éditeur d’un langage lève une exception, l’éditeur par défaut s’affiche pour une cellule correspondante dans un modèle écrit dans le langage. À partir de la version 2020.1, si ce type de cellule rompue est ouvert dans l’éditeur, une erreur s’affiche dans la fenêtre d’outils Messages. Il est possible d’obtenir la trace de la pile à partir de l’erreur et d’accéder à la cellule problématique.

Commentaires multilignes en BaseLanguage

La fonctionnalité de SingleLineComment a été améliorée et le nouveau concept MultiLineComment a été introduit dans BaseLanguage pour prendre en charge les commentaires délimités par les symboles /* … */ de la même manière que le fait Java.

Menus Transform/substitute : fusion des menus nommés et des menus par défaut

Il s’agit d’une amélioration qui simplifie les menus Transformation et Substitution en supprimant les concepts personnalisés des menus d’éditeur nommé (SubstituteMenu_Named) et par défaut (SubstituteMenu_Default). Les deux concepts ont été fusionnés dans leur parent (SubstituteMenu). Le type de menu est maintenant sélectionné dans l’éditeur de menus. La même refactorisation a été appliquée aux menus Transformation.

Autres améliorations

Parmi les autres améliorations, notons que MPS utilise maintenant la toute nouvelle police JetBrains Mono (Preferences / Settings | Editor | Font) par défaut. Mentionnons également que la JetBrains Plugin Marketplace est désormais disponible dans MPS, ce qui ouvre de nouvelles opportunités pour les développeurs, car ils peuvent commercialiser leurs plugins.

Afin de simplifier le flux de commits, JetBrains a développé une nouvelle fenêtre Commit tool pour gérer toutes les tâches liées aux commits. Elle offre davantage d’espace pour la liste des fichiers modifiés et le diff, et vous permet d’ajouter des modifications à un commit quand elles sont prêtes, de composer un message de commit de manière itérative et de choisir quelle modification échelonnée va dans quel commit. Cette interface n’est pas activée par défaut. Si vous voulez l’essayer, sélectionnez “Use non-modal commit interface” dans Preferences/Settings | Version Control | Commit.

Il y a aussi le mode Zen. Ce nouveau mode vous aide à vous concentrer sur votre code en combinant les modes Plein écran et Sans distraction. Pour essayer le mode Zen, cliquez sur View | Appearance | Enter Zen Mode.

Comme autre amélioration, on peut citer la possibilité d'installer Git depuis l’EDI. Vous n’avez plus besoin de préinstaller Git manuellement. Lorsque vous clonez un référentiel Git, l’EDI recherche l’exécutable Git sur votre machine et vous propose de le télécharger et de le configurer pour vous si l’EDI ne peut pas le localiser.

Veuillez également noter que dans MPS 2020.1, le chemin d’accès aux fichiers de configuration a changé. JetBrains a aussi corrigé une longue liste de bugs qui lui avaient été signalés par la communauté.

Télécharger MPS 2020.1

Voir aussi :

AppCode 2020.1 : la nouvelle version de l'EDI destiné aux plateformes Apple propose entre autres une assistance de code plus rapide et la complétion pendant l'indexation
ReSharper C++ 2020.1 est disponible avec notamment les nouvelles fonctionnalités C++ 20, une aide au codage améliorée, et une prise en charge de HLSL
ReSharper Ultimate 2020.1 est disponible avec la prise en charge améliorée de C# 8.0 et C++ 20, analyse du flux de données des valeurs entières, et autres
Rider 2020.1 est disponible en téléchargement, l'EDI .NET multiplateforme s'accompagne de nombreuses améliorations parmi lesquelles le rechargement à chaud Xamarin
RubyMine 2020.1 est disponible avec une navigation améliorée, une assistance au codage plus intelligente, et de nouvelles fonctionnalités pour le débogueur, Docker, le contrôle des versions, JS

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Madmac
Membre extrêmement actif https://www.developpez.com
Le 29/05/2020 à 22:12
Et ils ont une très belle fonte pour les programmeurs. https://www.jetbrains.com/fr-fr/lp/mono/
2  0