2010-04-08 8 views
43

Ich habe Eclipse Xtext in mehreren Projekten verwendet. Ich liebte die Leichtigkeit der Definition einer Grammatik über ein Ecore (Meta) -Modell und ließ alles, was für dich generiert wurde, einschließlich des Eclipse-Plugin-Editors, aber ich war ziemlich unwohl mit dem zugrunde liegenden EMF framework mit allem, was in statischen Feldern fest verdrahtet war.Was sind die Hauptunterschiede zwischen Jetbrains MPS und Eclipse Xtext?

In letzter Zeit stieß ich auf Jetbrains MPS (Meta Programming System). Es basiert auf einer völlig anderen Philosophie. Während Xtext zum Erstellen von textbasierten DSLs verwendet wird, die einen Parser für Sie generieren (und diese EObjects instanziieren), bearbeitet man in MPS-erzeugter Sprache direkt die zugrunde liegende Modellstruktur. Bis jetzt verstehe ich es.

Hat jemand Erfahrung mit beiden diesen DSL-Tools, um die wichtigsten Unterschiede in Bezug auf die Arbeit mit ihnen, beabsichtigte Anwendungsfälle und Publikum, Komplexität, Lernkurve aufzuzeigen (um ehrlich zu sein, Xtext zu verwenden, sollte man ziemlich viel wissen über EMFs Mut), Codegenerierung usw.?

Antwort

49

Xtext ist ein traditioneller Parser-basierter Ansatz, der mit normalen Textdateien arbeitet. Diese können versandt, gespeichert und mit jedem Versionskontrollsystem verglichen und sogar außerhalb des Editors mit Ihrem bevorzugten Befehlszeilentool geändert werden. Es integriert sich nahtlos in Eclipse EMF und funktioniert ziemlich gut mit einer ganzen Reihe von Tools, die Sie im Eclipse-Ökosystem finden können. Vor kurzem entwickelte es sich (und tut es immer noch) in eine Art "Programmiersprachenentwicklungs-Toolkit", wo es Ihnen erlaubt, alle Arten von zusätzlichen Werkzeugen zu unterstützen.

MPS auf der anderen Seite arbeitet mit einem projektionsbasierten Editor, der während der Arbeit in der Umgebung nur wie Text aussieht. Das zugrundeliegende Speicherformat ist werkzeugspezifisch (lese: ohne spezielle Programme unbrauchbar) und analysiert keine reinen Textdateien. Dies bietet einige große Vorteile, wie das Einbetten beliebiger Sprachen (z. B. Regex innerhalb von SQL innerhalb von Java). Die Toolchain ermöglicht die Generierung in Form eines Modells, um Transformationen zu modellieren, die - wie der Editor - anfangs ungewöhnlich sind, aber auch mächtig sind.

Beide Tools sperren Sie irgendwie in ihre Welt (MPS/Eclipse). Obwohl Sie beide im kopflosen Modus ausführen können, kann der Xtext-Editor nicht einfach in einer anderen IDE gestartet werden. Das Gleiche gilt für MPS. Ich würde argumentieren, dass Xtext "offener" ist, da es einerseits mit normalen Textdateien arbeitet und andererseits gut mit etablierten Werkzeugen (EMF und Eclipse im Allgemeinen) spielt.

Beantwortet das Ihre Frage? Ich werde versuchen, Ihnen genauere Antworten zu geben, wenn Sie detailliertere Fragen haben.

+0

Danke, Heiko, ich habe jetzt einen besseren Einblick :) Ich habe die textbasierten v-projektionsbasierten Sachen und ihre Auswirkungen auf Versionskontrolle, diff usw. Was ich gerne weiter wissen möchte, sind Unterschiede in "typischer Nutzung" der Werkzeuge und in ihren Werkzeugketten. Mit Xtext erhalte ich eine Menge Java-Code, der aus dem zugrunde liegenden Ecore-Modell generiert wird, das ich sofort in jedem Java-Programm verwenden kann. Was mich beim Lesen des offiziellen MPS-Tutorials erschreckte, war das Codegenerations-Template-Zeug, das ein hübsches Stück davon in Anspruch nahm. Kann ich das Modell, das durch das, was ich in meiner Sprache schreibe, irgendwie durchqueren ... einfach wie mit EMF? –

+2

Eigentlich sind die Leute hinter Xtext sehr bemüht, Xtext-Sprachen in anderen Umgebungen als Eclipse zu verwenden, zum Beispiel Web-Editoren mit dem Orion-Projekt und Unterstützung für IntelliJ IDEA. Sie können mehr darüber in https://eclipse.org/Xtext/news.html lesen –

+2

All dies ist wahr, jedoch unterstützt MPS benutzerdefinierten Speicher. Während die Datei standardmäßig in ihrem eigenen Format (basierend auf XML) gespeichert wird, können Sie eine benutzerdefinierte Serialisierung/Deserialisierung bereitstellen. –

16

Die Hauptidee von MPS besteht nicht darin, einen Projektionseditor anstelle eines textbasierten zu verwenden. Es ist die Verständlichkeit der Sprache. Zum Beispiel können Sie Java mit Tupeln erweitern, und eine andere Person könnte Java mit asynchronen Methodenaufrufen erweitern. In textbasierten Werkzeugen (wie XText) ist es unmöglich zu garantieren, dass zwei Erweiterungen gut zusammenpassen, da die resultierende Grammatik mehrdeutig sein kann. MPS macht dies möglich. Sie fügen Ihrem Projekt einfach eine Sprache hinzu, wie Sie Bibliotheken hinzufügen.

14

Meiner Meinung nach ist Jetbrains MPS zunächst leichter zu erlernen. Sie müssen nicht mit Konfigurationsdateien wie den Workflow-Dateien in xtext arbeiten.

Ein Hauptunterschied besteht darin, dass Sie in MPS das Modell direkt bearbeiten und dieses Modell in einer Syntax-/Editor-Ansicht angezeigt wird. In xtext bearbeiten Sie die Syntax und das Modell wird generiert/geparst.

MPS ist meiner Meinung nach leistungsfähiger. Sie können Sprachen viel einfacher kombinieren und erweitern. Ein großer Vorteil von Projektionseditoren ist, dass Sie Informationen verbergen oder zusätzliche Informationen aus dem Modell anzeigen können. Sie können auch verschiedene Ansichten wie Tabellen oder Grafiken verwenden (in MPS 2.1).

Die Versionskontrolle kann mit MPS durchgeführt werden. Es gibt ein Merge/Diff-Tool, das auf dem Baummodell funktioniert.

Verwandte Themen