What are the main differences between Jetbrains' MPS and Eclipse Xtext?
Asked Answered
F

3

55

I have used Eclipse Xtext in several projects. I loved the ease of defining a grammar over an Ecore (meta)model and letting everything generated for you including awesome Eclipse plugin editor, but I was quite uncomfortable with the underlying EMF framework with everything hard-wired in static fields.

Lately I came across Jetbrains' MPS (Meta Programming System). It's based on completely different philosophy. While Xtext is for creating text-based DSLs generating a parser for you (and instantiating those EObjects), in MPS-created language one edits directly underlying model structure. So far I get it.

Has anybody experience with both those DSL tools to point out the main differences in terms of working with them, intended use cases and audience, complexity, learning curve (to be honest, to start using Xtext one should know quite a lot about EMF's guts), code generation etc?

Fetching answered 8/4, 2010 at 20:16 Comment(0)
W
59

Xtext is a traditional parser-based approach that works with ordinary textual files. Those can be mailed, stored and compared with any version control system and even modified outside the editor using your favorite command line tool. It tightly integrates into Eclipse EMF and works pretty well with a whole bunch of tools you can find in the Eclipse eco-system. Recently, it evolved (and is doing so still) into some kind of "programming language development toolkit" where it allows you to support all kind of additional tooling.

MPS on the other side works with a projection-based editor that just "looks" like text while you are working within the environment. The underlying storage format is tool-specific (read: unusable without special programs) and does not parse plain text files. This offers some great advantages such as embedding of arbitrary langauges (e.g. Regex inside SQL inside Java). The toolchain enables generation in form of model to model transformations that -as the editor- feel unusual at the beginning but are powerful, too.

Both tools are somehow locking you into their world (MPS/Eclipse). Even though you could run both in a headless mode, one cannot easily launch the Xtext editor inside another IDE. The same is true for MPS. I would argue that Xtext is "more open", since it works with ordinary text files on one hand and plays well with established tools (EMF and Eclipse in general) on the other hand.

Does this answer your question? I will try to give you more precise answers if you have more detailed questions.

Wenzel answered 9/4, 2010 at 9:14 Comment(5)
Thanks, Heiko, I have a better insight now :) I got the text-based v projection-based stuff and its consequences on version control, diff etc. What I would like to know further is differences in "typical usage" of the tools and in their toolchains. With Xtext, I get a lotta Java code generated from the underlying Ecore model which I may instantly use in any Java program. What frightened me while reading MPS official tutorial was the code generation template stuff which took a pretty piece of it. Can I traverse the model created from what I write in my language somehow... easily like with EMF?Flaviaflavian
Actually, people behind Xtext is putting a lot of effort to make possible to use Xtext languages in other environments besides Eclipse, for example Web editors by means of the Orion project, and support for IntelliJ IDEA. You can read more about this in eclipse.org/Xtext/news.htmlGamboge
All of this is true, however MPS supports custom storage. While by default it saves file in its own format (based on XML), you can provide custom serialization/unserialization.Triatomic
Xtext at the moment can also generate plugins for Eclipse, IntelliJIdea, and Web browser editors !Hurty
I second that - Xtext has web integration. I can run Xtext (with validation and code completion) in my own web application, and while it's not super obvious how to do that, it's also not very complicated if you spend a day or two to figure it out. As for MPS - I'm not even sure it's possible.Southwards
B
17

The main idea of MPS isn't using a projectional editor instead of a text based one. It's the language compasability. For example, you can extend Java with tuples, and another person could extend Java with async method calls. In text based tools (like XText), it's impossible to guarantee that two extensions work well together, since the resulting grammar might be ambiguous. MPS makes this possible. You just add language to your project like you add libraries.

Bobbobb answered 26/11, 2010 at 11:13 Comment(0)
A
17

In my opinion Jetbrain's MPS is easier to learn at first. You don't need to work with configuration files like the Workflow-Files in xtext.

A main difference is that in MPS you edit the model directly and this model is shown to you in a syntax/editor view. In xtext you edit the syntax and the model is generated/parsed.

In my opinion MPS is more powerful. You can combine languages much easier and extend them. A big advantage of projectional editors is that you can hide information or show additional information retrieved from the model. You can also used different views like tables or graphs (coming up in MPS 2.1).

Version control can be done with MPS. Theres a merge/diff tool that works on the tree-model.

Ariel answered 15/4, 2011 at 10:44 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.