Quelqu'un a-t-il une expérience avec le système de programmation méta de JetBrains? Les députés sont-ils meilleurs que, disons, développer une DSL dans Ruby? P>
5 Réponses :
Je n'ai aucune expérience personnelle avec les députés, mais il a été mentionné sur le récent épisode de Code d'élevage avec Markus völter . Voici ma compréhension. MPS est un éditeur de projection qui signifie, au lieu d'analyser et d'éditer du texte, vous modifiez directement la structure de données de la langue soulignée. Comme Markus mentionne, les députés vous permettent de définir votre propre langue, mais vous pouvez également introduire de nouveaux concepts de langue dans des langues existantes. Par exemple, vous pouvez ajouter un nouveau mot-clé à Java en quelques minutes. Les députés brouillent les lignes entre DSL interne et externe et, avec ceci, vous obtenez une saisie statique et un support d'outil que vous n'auriez pas obtenu lors du développement d'une DSL avec une langue dynamique comme Ruby. p>
MPS est une bête intéressante et a un très grand potentiel. L'idée est tout simplement fantastique: p>
Cela étant dit, malheureusement au moins pour les versions MPS disponibles réelles, Jetbrains n'a pas réussi à livrer ce qui précède (au moins pour moi) car: - Il est très difficile et compliqué à utiliser - comme il n'aurait pas été fait par les auteurs de la facilité d'utilisation de Intellij. - Il y a juste trop de concepts et de "façons" dont l'utilisateur doit apprendre avant de pouvoir faire quelque chose d'utile, et toujours l'une des sentiments de taraudage dans le noir. - L'IDE ne générera pas une IDE pour vous, mais quelque chose à l'intérieur de MPS aussi, un "éditeur à base de cellules" seulement (à partir de cette version). P>
J'ai essayé des députés plusieurs fois (car le concept est si merveilleux et prometteur), mais malheureusement à ce moment-là, je n'ai pas pu faire quelque chose d'utile avec ça. Je serais peut-être trop stupide pour les députés, mais à l'époque, je pensais simplement de base sur les députés, j'ai pu livrer des DSL utilisables entièrement blowns. P>
Je suis toujours suivant l'évolution des députés et j'espère qu'un jour délivrera ce qui avait initialement promis, car c'est une idée aussi fantastique. P>
Je travaille pour JetBrains. J'ai dirigé le projet MPS depuis plusieurs années et je travaille maintenant sur un autre projet qui est également complètement écrit dans les députés. Selon mon expérience, les députés méritent d'utiliser: -) p>
La réponse à votre question dépend de nombreuses choses. Si vous avez un système basé sur Ruby, ou souhaitez créer une langue rapidement, DSL interne basé sur RUBY pourrait être le meilleur choix. Si vous souhaitez générer Java et avoir le temps d'apprendre les députés, les députés pourraient être le meilleur cas. Vous pouvez également envisager des systèmes tels que XText, etc., qui sont du centre-myct entre DSL et MPS à base de rubis. P>
Macros dans le système d'objet LISP commun Clos peut altérer la syntaxe de manière assez spectaculaire, les députés sont assez similaires à ANTLR, mais il est livré avec un éditeur graphique. Cependant, les députés n'apprécient pas la fragmentation de code fragmentant au-delà de la compilation et de l'exécution et, partant, les députés et les anti-anti-ANTLR autour de problèmes de métaprogrammation statique. Vous ne pouvez toujours pas créer de constructions qui accepteront un nombre arbitraire d'arguments de sous-construction comme des monadies, par exemple; Un constructeur de compréhension de liste qui prend un nombre arbitraire de filtres et de générateurs de liste. Pour que cela soit possible, vous devez modifier programmatiquement l'AST cru. Des lispeurs plus expérimentés peuvent probablement signaler d'autres transformations qui ne peuvent pas être faites. P>
Je conviens que la documentation a été un problème pour les débutants lors de l'apprentissage des députés. C'était certainement vrai lorsque le poste précédent a été écrit (2010). Après avoir vécu cette première main, et enfin avoir réussi à comprendre le système, j'ai écrit le Workbench Langue MPS (volumes i et ii) aider à lisser la courbe d'apprentissage. Les commentaires que je reçoivent des lecteurs sont que les livres sont suffisants pour vous aider à démarrer (volume I) et à apprendre des aspects plus avancés de la plate-forme MPS (Volume II). P>
En ce qui concerne la réponse à la question initiale. Oui, je pense que les députés ont des avantages clés par rapport au développement d'une DSL dans Ruby ou Groovy. La raison est que comme un concepteur de langue que vous p>
Vous pouvez voir un bon exemple de DSL construit avec des MPS dans le Projet Metar . P>