2010-12-07 24 views
15

Hat jemand Erfahrung mit Language Workbench-Tools wie Xtext, Spoofax und JetBrains MPS? Ich versuche, es auszuprobieren, und es fällt mir schwer, einen guten Vergleich der verschiedenen Tools zu finden. Was sind die Vor- und Nachteile von jedem?Pro/Contras verschiedener Sprache Workbench-Tools wie Xtext und MPS?

Ich möchte DSLs erstellen, die Python-Code generieren, daher bin ich besonders an Leuten interessiert, die eines dieser Tools mit Python verwendet haben (alle drei scheinen ziemlich Java-fokussiert zu sein ... warum ist das so?) ?). Die DLSs sind in erster Linie für mich selbst gedacht, deshalb kümmere ich mich weniger darum, eine wirklich schöne IDE zu bauen, als über KISS, um die Syntax zu definieren und den Codegenerator zu schreiben. Die Möglichkeit, die DLS-Dateien statisch zu prüfen und zu analysieren, wäre auch ziemlich cool.

Ich habe ein wenig Angst davor, einen langen Weg zurückzulegen, eine Wand zu treffen und zu erkennen, dass mein gesamter Code in einem Format vorliegt, das nicht auf etwas anderes portiert werden kann - ist das ein Risiko bei diesen Tools? Insbesondere MPS scheint ein wenig gruselig zu sein, da, wie ich es verstehe, Sie nicht wirklich textbasierte Syntax generieren, sondern spezialisierte Editoren für ASTs erstellen.

+1

Ich werde anfangen, Spoofax b/c zu erkunden, es scheint von einer ziemlich reichen Programm Transformation Sprache (Stratego) unterstützt werden, die ich denke, ist wirklich das Fleisch und Kartoffeln beim Bau einer DSL ... – josh

+1

An diesem Punkt habe ich es auf Stratego/Spoofax vs den Aufbau meines eigenen Parser/Interpreter in Python (über ANTLR) oder ähnlich eingeschränkt. Meines Erachtens ist der Hauptkonflikt, dass Stratego ein besseres Paradigma für die Manipulation meiner ASTs bietet, aber dass der Schreib-Build-Testzyklus nicht so sauber sein wird, da ich Python-Code ausgeben und dann den Code ausführen muss Halten Sie die gesamte Anwendung in Python. – josh

Antwort

13

Markus Voelter macht einen ziemlich guten Job und vergleicht diese drei in se-radio und Software ArchitekTOUR Podcasts. Die Grundidee ist, dass Xtext am meisten verwendet wird, daher am stabilsten und dokumentiert, und es basiert auf der populären Eclipse-Plattform und dem Modellierungs-Ökosystem EMF, das es umgibt. Auf der anderen Seite ist es parserbasiert und verwendet ANTLR intern, was bedeutet, dass die Art der Grammatiken, die Sie definieren können, begrenzt ist und Sprachen nicht einfach kombiniert werden können. Spoofax ist ein akademisches Produkt mit der geringsten Annahme dieser drei. Es basiert ebenfalls auf Parser, verwendet jedoch intern einen eigenen Parsergenerator, der Sprachkombinationen ermöglicht. Jetbrains MPS ist projektionsbasiert, was dem Sprachdesigner viel Freiheit gibt und Sprachkombinationen ermöglicht. * t hat auch solide Unterstützung. Nachteil könnte die Lernkurve sein. Keines dieser Tools ist ausschließlich auf Java als Zielsprache für Codegeneratoren ausgerichtet. Xtext verwendet Xpand-Vorlagen, bei denen es sich um einfachen Text handelt. Ich weiß nicht wirklich, wie Code-Generierung in Spofax funktioniert. MPS hat seine Basissprache, von der gesagt wird, dass sie eine Teilmenge von Java ist, aber es gibt verschiedene Alternativen. Ich persönlich benutze Xtext wegen seiner Einfachheit und Reife, aber diese starken Einschränkungen durch sein Design machen es nicht zu einer sehr zukunftssicheren Wahl.

+2

Danke, das ist die Art von Vergleich, den ich gesucht habe. Ich habe den Spoofax-Pfad etwas weiter unten durchgespielt, seit ich die Frage gestellt habe, und das Codegenerationsstück ist ziemlich überzeugend: Es gibt Ihnen eine mächtige funktionale Sprache, um Ihre ASTs zu manipulieren und umzuwandeln. Im Moment überwiegt der Vorgesetzte Community/Unterstützung der anderen Tools, zumindest für mein Projekt. – josh

7

Ich habe XText in dem gleichen Fall vor zwei Wochen gewählt, aber ich weiß nichts über Spofax. Mein erster Eindruck - Xtext ist sehr einfach und produktiv. Ich habe mein erstes realise (aber sehr einfaches) Projekt in 30 Minuten erstellt, ich habe einen GraphViz Dot Graph und HTML Report erstellt. Ich mag MPS nicht, weil ich Quell- und Zieldateien im Klartext bevorzuge.

1

Ich habe für ein paar Tage experimentiert mit Xtext und während das Werkzeug vielversprechend aussieht wurde ich schließlich durch die enge Integration mit dem Eclipse- Ökosystem und den Schmerz, den man hat, um durch nur zu lösen, setzen Sie vor, was sollte ohne Probleme aus der Box gegeben werden: eine kopflose Ausführung des Code-Generators Sie implementiert. Sehen Sie here für einige der minutiae, die man durchlaufen muss (und es ist nicht einmal richtig auf der Xtext Website dokumentiert, sondern eher in einem Blog, was bedeutet, dass es ein Ad-hoc-Patch ist, der sehr wohl bei der nächsten Veröffentlichung brechen könnte).

Wir werden in einem halben Jahr noch einmal schauen, ob sich an dieser Front etwas verbessert hat.

2

Werfen Sie einen Blick auf das Buch von Markus Völter. Es bietet einen sehr umfassenden Vergleich dieser 3 Technologien. http://dslbook.org

XText ist sehr gut gepflegt, aber das bedeutet nicht, dass es problemlos ist. Das Typ-System, das Scoping und das Generieren ist nicht so einfach wie angekündigt.

Spoofax ist scannerlos (Vereinfachung der Grammatik). Nicht so gut dokumentiert, aber scheint komplett.

MPS ist projektional. Ein Profi für Sprachkomposition und Bearbeitung. Unterstützt mehrere Editoren für einen AST und wird bald sogar einen schönen Diagrammeditor unterstützen. Die Basissprachendokumentation ist nicht so gut. Typsystem, Scoping, Überprüfung ist sehr gut behandelt. Modell-zu-Modell-Transformationen werden vom Solver durchgeführt. Meine Kollegen beschweren sich über Modell-zu-Text-Sprachen. (Meine Meinung war M2M auch nicht so intuitiv.)

Vor Jahren hatte Microsoft das OSLO-Projekt. MGrammar und besonders Quadrant waren sehr vielversprechend. Es war möglich, Ihr Modell in Tabellen-, Formular-, Text- oder Diagrammansicht darzustellen. Doch plötzlich haben sie das Projekt abgebrochen (und schoss vielleicht die Leute daran zu arbeiten)

3

Es gibt andere Systeme für diese Art von Sache. Wenn Sie Tools erstellen möchten, müssen Sie nicht unbedingt mit einem integrierten Tool auf eine IDE zugreifen. manchmal kann man bessere Werkzeuge finden, die auf Dienstprogramm konzentriert statt IDE Integration

Tools eine der reinen Programm Transformation vor:

  • TXL (praktisch, Einzel Paradigma)
  • Stratego (Spoofax bevor es
  • Rascal (Forschung, sehr schön in vielerlei Hinsicht entworfen)
  • DMS Software Reengineering Toolkit (zufällig zu mir, kommerziell, verwendet, um schwere DSL/konventionelle Sprache Analyse und Transformation zu tun C++)

Dies alles bieten gute Mechanismen zum Definieren und Umwandeln von DSLs.

Was wirklich wichtig ist, ist die Unterstützung Maschinen für die Durchführung "Leben nach dem Parsen".