Jetbrains的MPS和Eclipse Xtext之间的主要区别是什么?

55

我在几个项目中使用了 Eclipse Xtext。我喜欢通过 Ecore(元)模型定义语法的简易性,以及生成包括出色的 Eclipse 插件编辑器在内的所有内容,但是我对潜在的 EMF 框架 感到相当不舒服,其中一切都被硬编码为静态字段。

最近,我接触了 JetBrains 的 MPS(元编程系统)。它基于完全不同的哲学。虽然 Xtext 用于创建基于文本的 DSL 并为您生成解析器(并实例化这些 EObject),但在 MPS 创建的语言中,用户可以直接编辑底层模型结构。到目前为止,我理解了这一点。

有没有人同时使用过这两个 DSL 工具,以指出它们在使用、预期用例和受众、复杂度、学习曲线(坦白地说,要开始使用 Xtext,应该对 EMF 的内部了解相当多),代码生成等方面的主要区别?

3个回答

59
Xtext是一种传统的基于解析器的方法,可用于处理普通文本文件。这些文件可以通过电子邮件发送、存储和与任何版本控制系统进行比较,甚至可以使用您喜爱的命令行工具在编辑器之外进行修改。 它紧密集成到Eclipse EMF中,并且可以很好地与您可以在Eclipse生态系统中找到的许多工具一起使用。最近,它发展成为一种“编程语言开发工具包”,允许您支持各种附加工具。
另一方面,MPS使用基于投影的编辑器,当您在环境中工作时,它只“看起来”像文本。底层存储格式是特定于工具的(即:没有特殊程序无法使用),而且不解析纯文本文件。这提供了一些巨大的优势,例如嵌入任意语言(例如,在Java中的SQL内部的正则表达式)。该工具链使生成成为模型到模型转换的形式,就像编辑器一样,一开始感觉不寻常,但也很强大。
这两种工具都在某种程度上将您锁定在其世界中(MPS/Eclipse)。即使您可以以无头模式运行两者,但不能轻松地在其他IDE中启动Xtext编辑器。MPS也是如此。我认为Xtext“更加开放”,因为一方面它可以处理普通文本文件,而另一方面它可以很好地与已有的工具(EMF和Eclipse等)配合使用。
这回答了您的问题吗?如果您有更详细的问题,我会尽力给您更精确的答案。

谢谢,Heiko,现在我有更好的了解了 :) 我明白了基于文本和基于投影的东西以及它们对版本控制、差异等方面的影响。我想进一步了解的是工具的“典型用法”以及它们的工具链之间的区别。使用Xtext时,我可以从底层Ecore模型中生成大量Java代码,这些代码可以立即在任何Java程序中使用。当我阅读MPS官方教程时,让我感到害怕的是代码生成模板,这占据了其中相当一部分。我能否以某种方式遍历从我编写的语言创建的模型...像EMF那样容易吗? - Karel Smutný
5
实际上,Xtext背后的人正在付出很多努力,使得除了Eclipse之外的其他环境也能使用Xtext语言,例如通过Orion项目在Web编辑器中使用,并支持IntelliJ IDEA。你可以在https://eclipse.org/Xtext/news.html上了解更多信息。 - Miguel Jiménez
2
所有这些都是真实的,然而MPS支持自定义存储。默认情况下,它会将文件保存在自己的格式中(基于XML),但您可以提供自定义序列化/反序列化。 - Federico Tomassetti
1
Xtext目前还可以为Eclipse、IntelliJIdea和Web浏览器编辑器生成插件! - idichekop
我同意 - Xtext具有Web集成功能。我可以在自己的Web应用程序中运行Xtext(带有验证和代码完成),虽然如何实现不是非常明显,但如果你花一两天时间去弄清楚,也不是很复杂。至于MPS-我甚至不确定是否可能。 - mvmn

17

我认为Jetbrain的MPS在最初学习时更容易。与xtext中的Workflow-Files不同,你不需要使用配置文件。

主要区别是在MPS中直接编辑模型,该模型在语法/编辑器视图中显示给您。而在xtext中,您需要编辑语法,然后生成/解析模型。

我认为MPS更强大。你可以更轻松地结合语言并扩展它们。投影式编辑器的一个重要优势是可以隐藏信息或显示从模型检索的附加信息。您还可以使用不同的视图,如表格或图形(即将在MPS 2.1中推出)。

MPS可以进行版本控制。有一个适用于树模型的合并/差异工具。


17

MPS的主要思想不是使用投影式编辑器,而是语言兼容性。例如,您可以使用元组扩展Java,另一个人可以使用异步方法调用扩展Java。在基于文本的工具(如XText)中,无法保证两个扩展程序能够良好地配合使用,因为生成的语法可能是模棱两可的。MPS使这成为可能。您只需像添加库一样向项目添加语言。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接