Avant de présenter les nouveautés prévues, rappelons qu'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é.
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. Cela dit, quelles sont les nouveautés et améliorations prévues dans MPS 2022.2 ?
Annotations dans l'inspecteur
Les annotations sont désormais accessibles à partir de la fenêtre Inspector et le processus d'annotation démarre pour toute la racine. Cette action est accessible en faisant un clic droit sur le bord gauche de la fenêtre Inspector. L'annotation s'ouvrira à la fois dans l'éditeur Inspector et dans l'éditeur principal.
Prise en charge améliorée dans MPS Kotlin
De nombreux problèmes d'édition ont été corrigés pour offrir une meilleure expérience de saisie :
- Littéraux lambda :
- Prise en charge du paramètre implicite "it".
- Les lambdas dont le type a un récepteur (par exemple "Receiver.() -> Unit" utiliseront correctement ce type de récepteur comme un "this" implicite à l'intérieur du corps du lambda.
- Les portées ont été refactorisées pour prendre en charge davantage de cas d'utilisation (par exemple, des types de récepteurs personnalisés) et améliorer le filtrage (moins de doublons, accès aux fonctions cachées).
- Prise en charge de la déconstruction des opérateurs par typesystem.
- Littéraux numériques : insertion plus facile des float et long, et transition entre les nombres non signés et signés.
- Littéraux de chaîne : toutes les chaînes peuvent passer d'une ligne à plusieurs lignes en appuyant sur Entrée dans un littéral de chaîne ; certains problèmes d'insertion ont été corrigés.
- Les stubs Kotlin prennent en charge le chargement des annotations et des types de fonctions avec le récepteur (par exemple, "T.() -> R" qui a été chargé de manière incorrecte comme "(T) -> R", comme la fonction with()).
En raison de certains changements structurels, plusieurs migrations sont fournies avec le langage :
- La prise en charge des instructions a été rendue générique dans l'interface IStatementHolder ; d'autres concepts utilisant des instructions par eux-mêmes ont été migrés pour utiliser ce concept.
- Le littéral de chaîne et le littéral multiligne ont été fusionnés en un seul concept de littéral de chaîne.
- Le modificateur d'héritage (final, abstract…) sur les déclarations de fonctions est désormais obligatoire en raison de l'utilisation de l'interface Inheritable ; les déclarations vont migrer en conséquence.
- La prise en charge de la déconstruction des variables a été regroupée sous l'interface IDeconstructingDeclarations ; L'instruction for et le multiparamètre lambda vont migrer pour l'utiliser.
- Les concepts avec des types récepteurs n'utilisent plus le concept ReceiverType (qui est une expression faisant référence à un type) et détiennent directement le type.
- Les concepts de littéraux non signés, de type Long ou Integer ont été regroupés sous le concept IntegerLiteral (qui utilise des flags booléens). De plus, les nombres littéraux négatifs ne sont plus pris en charge et doivent être créés à l'aide du concept de moins unaire.
Langage SModel pour MPS Kotlin
La prise en charge de SModel a été apportée à MPS Kotlin, avec le nouveau langage jetbrains.mps.kotlin.smodel. Cela permet l'utilisation du code Kotlin dans les modules de langage (en tant que classes helper par exemple).
Au-dessus des types réguliers (nœud, concept, liens, références), il exploite la flexibilité accrue de MPS Kotlin pour apporter des paramètres de type concept. Les fonctions, les variables et les classes peuvent désormais déclarer et utiliser ces paramètres et les réutiliser dans leurs types internes, ce qui facilite la saisie et exploite les smart casts Kotlin.
Mises à jour pour la compilation Kotlin
La prise en charge de la compilation Kotlin a été améliorée avec une meilleure persistance. Par conséquent, les classes Kotlin ne sont plus effacées lorsque MPS est redémarré.
Une nouvelle option a été ajoutée dans les scripts de construction pour marquer un module à compiler avec le compilateur Kotlin. L'insertion de cet indicateur est manuelle - aucune vérification automatique n'est actuellement disponible pour le définir sur true. L'indicateur doit être ajouté lorsqu'un module contenant des fichiers Kotlin va être compilé en JVM.
Styles de texte disponibles dans les commentaires BaseLanguage
Lors de l'ajout de commentaires dans un code BaseLanguage, il est désormais possible de les personnaliser davantage avec le style de texte. Les commentaires prennent en charge les styles gras, non italique, souligné et gras non italique. Rappelons que BaseLanguage est un équivalent MPS de Java ; il partage avec Java presque le même ensemble de constructions.
Transformation post-fix
Dans BaseLanguage, il est désormais possible d'effectuer des transformations post-fix qui vous permettent de transformer le code en ajoutant du texte à l'expression. Cela fait gagner du temps aux développeurs, car ils n'ont pas à déplacer le curseur au début de l'expression ou à sélectionner l'expression pour appliquer une transformation.
Il s'agit ici des nouveautés et améliorations introduites dans la première version EAP de MPS 2022.2. Vous pouvez télécharger les versions EAP de l'environnement de développement de langages DSL sur son site officiel.
Télécharger la dernière version EAP de MPS