JetBrains lance le programme d'accès anticipé à la version 2023.2 de MPS (Meta Programming System)
Son environnement de développement de langages DSL
JetBrains lance le programme d'accès anticipé (EAP) à MPS 2023.2, ce qui signifie que la prochaine version majeure de son environnement de développement de langages DSL est imminente. Vous êtes donc invités à tester les builds EAP et faire vos retours à JetBrains.
Avant de présenter les nouveautés, 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 de la première version EAP de MPS 2023.2 ?
Prise en charge de JUnit 5
Les tests dans MPS sont désormais générés en tant que tests JUnit 5. Une prise en charge limitée de JUnit 4 est toujours fournie.
- Toute classe Java annotée de manière appropriée peut être exécutée en tant que test.
- Les deux options pour l'exécution des tests MPS - en interne et en mode autonome - sont disponibles.
- Les racines de test existantes sont générées avec les annotations JUP Jupiter API : BTestCase, NodeTestCase, EditorTestCase, MigrationTestCase, PatternTest, GeneratorTest.
Tâche Ant pour lancer des tests de modules avec JUnit 5
Une nouvelle tâche Ant <launchtests> est disponible avec prise en charge des éléments suivants : <library>, <macro>, <plugin>, <testmodules>. Elle prend en charge l'exécution de tous les artefacts de test, à l'exception de JUnit 3, et sert de nouvelle cible pour la partie build de la configuration de test.
API de plateforme de test
Cette API vous permet d'étendre les types de tests disponibles dans MPS, ainsi que d'implémenter des listeners pour les sessions de test.
Les classes dans jetbrains.mps.baseLanguage.unitTest.platform forment l'API de plateforme de test MPS :
- TestPlatform : définit l'API de la plateforme de test MPS.
- TestDescriptor : représente un seul test dans la plateforme de test MPS.
- TestSource : représente la source du test, telle qu'un SNode.
- TestSession : représente une session de test.
- TestDiscoveryParticipant : permet de rejoindre le processus de découverte de test.
- TestSessionListener : permet de recevoir des notifications de la session de test.
Prise en charge expérimentale des moteurs de test personnalisés
JUnit 5 introduit, entre autres, la prise en charge de l'implémentation de tests exécutés avec un moteur personnalisé. Un exemple populaire d'un tel moteur est jqwik, un framework de test basé sur les propriétés.
La fonctionnalité TODO pour les commentaires personnalisés
L'extension du concept IGenericComment permet aux concepts représentant des commentaires dans des langages personnalisés de participer à la fonctionnalité TODO de MPS. Les commentaires représentant des tâches à faire seront collectés par le TODO Finder, répertoriés dans le TODO Viewer et vérifiés lors du processus de validation.
Améliorations de BaseLanguage
Dans une mise à jour précédente, MPS a reçu une prise en charge améliorée des références de méthodes et de la conversion des closures en lambdas Java. JetBrains a élargi cette prise en charge avec de nombreuses fonctionnalités mineures et des corrections de bogues.
Génération de closures en tant que lambdas
Les closures utilisées dans les opérations de collection sont désormais générées sous forme de lambdas Java, ce qui était initialement disponible uniquement pour les appels de fonction réguliers qui utilisaient des interfaces Java. Pour maintenir la compatibilité ascendante, il existe des cas où une closure sera toujours générée sous forme de classe anonyme :
- Lorsqu'un nom de variable entre en conflit avec une variable externe ; un avertissement est désormais affiché, suggérant de le renommer.
- Lorsque la version Java cible est 8 ou inférieure.
- Lorsque des types bruts sont utilisés ; ceux-ci ne se mélangent pas bien avec les lambdas Java.
En général, de cela résulte une amélioration de la qualité du code généré, car les lambdas, en plus d'être plus lisibles, ont moins de chances d'être générées incorrectement. D'autre part, MPS permet des fonctionnalités avec des types bruts que Java n'accepterait pas, car la détection de telles occurrences est encore difficile. Par conséquent, dans les emplacements où des types bruts sont utilisés, la génération peut échouer.
Paramètres de closure
Les paramètres de closure avaient auparavant différentes formes possibles : ~param, <type> paramparam et var param. Ajouter des paramètres tout en sautant le type était fastidieux.
Dans cette version, JetBrains a rendu obsolète la forme ~param en faveur du paramètre non typé simple, qui est désormais inséré par défaut. De plus, lorsqu'une closure est insérée dans un appel de fonction, des paramètres par défaut seront insérés à partir du type de fonction attendu.
Enfin, si leur type est omis dans le code source, les paramètres générés omettront désormais le type, améliorant ainsi davantage la qualité de la compilation.
Interopérabilité des flux
Bien que les séquences soient largement utilisées dans MPS, il y a des occasions où les flux Java doivent également être utilisés. Cette mise à jour offre une déduction améliorée pour atténuer les problèmes du système de types liés aux méthodes complexes que l'API Stream peut utiliser.
JetBrains a ajouté deux opérations pour relier les flux et les séquences :
- <stream>.asSequence convertira une séquence en un flux.
- <sequence>.toStream(parallel=…) fera l'inverse.
En plus de vous permettre de choisir quelle API utiliser, cela vous permet de mélanger les avantages des séquences (reproductibilité) et ceux des flux (divers collecteurs, plus d'opérateurs).
Améliorations de la collection
JetBrains a précédemment introduit l'opérateur new ArrayList<>() pour les constructeurs de BaseLanguage, mais les créateurs de collections étaient exclus de cette amélioration.
Dans cette mise à jour, vous pouvez désormais omettre les paramètres de type des nouvelles collections, simplifiant ainsi le processus d'écriture du code :
- Type déduit à partir des valeurs initiales : var myList = new arraylist<> {myInitialValue}
- Type déduit de la déclaration de variable : map<int, string> myMap = new hashmap7lt;>
De plus, JetBrains a amélioré la prise en charge de la variance dans les collections. Par exemple, il n'est plus possible d'assigner une notation ? extends Number. Cependant, le système de types n'objectera plus à l'utilisation de ces types bornés lorsqu'ils sont valides.
Le type sequence<> restera covariant par défaut car il n'entraînera aucune conséquence non sécurisée, car vous ne pouvez pas l'insérer dans une séquence d'éléments qui ne sont pas de son type. Cela peut entraîner de nouveaux problèmes de vérification des types où le code non sécurisé n'était auparavant pas détecté. Ceux-ci peuvent être résolus avec des types bornés (list<? extends node<>>) ou des types de séquence (sequence<node<>>).
Disable Make On Startup
JetBrains a ajouté une nouvelle option, Disable Make On Startup, disponible dans Settings | Project Settings | Make. Lorsque cette option est sélectionnée, MPS ne construira pas tous les modules du projet au démarrage. Cela peut être utile si vous souhaitez accélérer le démarrage dans les situations où le processus de construction initial prend trop de temps ou est susceptible d'échouer, car une configuration manuelle est nécessaire avant que le projet puisse être construit avec succès.
Voilà présenté un aperçu des principales nouveautés et améliorations introduites dans la version EAP1 de MPS 2023.2. JetBrains vous invite à tester ces fonctionnalités et lui faire savoir si vous rencontrez des problèmes afin que l'éditeur puisse s'assurer que MPS 2023.2 corresponde à vos besoins.
Télécharger la dernière version EAP de MPS 2023.2
Partager