54

我在几个项目中使用了Eclipse Xtext 。我喜欢在 Ecore(元)模型上轻松定义语法并让所有内容为您生成,包括很棒的 Eclipse 插件编辑器,但我对底层EMF 框架感到非常不舒服,因为所有东西都硬连线在静态字段中。

最近我遇到了 Jetbrains 的MPS(元编程系统)。它基于完全不同的哲学。Xtext 用于创建基于文本的 DSL,为您生成解析器(并实例化那些 EObject),而在 MPS 创建的语言中,可以直接编辑底层模型结构。到目前为止,我明白了。

有没有人使用这两种 DSL 工具来指出在使用它们方面的主要区别、预期的用例和受众、复杂性、学习曲线(老实说,开始使用 Xtext 应该对 EMF 的胆量有很多了解) ,代码生成等?

4

3 回答 3

59

Xtext 是一种传统的基于解析器的方法,适用于普通文本文件。这些可以邮寄、存储并与任何版本控制系统进行比较,甚至可以使用您最喜欢的命令行工具在编辑器之外进行修改。它与 Eclipse EMF 紧密集成,并且可以与 Eclipse 生态系统中的一大堆工具配合使用。最近,它演变(并且仍在这样做)成为某种“编程语言开发工具包”,它允许您支持所有类型的附加工具。

另一方面,MPS 使用基于投影的编辑器,当您在环境中工作时,它“看起来”像文本。底层存储格式是特定于工具的(阅读:没有特殊程序就无法使用)并且不解析纯文本文件。这提供了一些很大的优势,例如嵌入任意语言(例如,Java 中 SQL 中的 Regex)。工具链能够以模型的形式生成模型到模型的转换,就像编辑器一样,在开始时感觉很不寻常,但也很强大。

这两种工具都以某种方式将您锁定在他们的世界中(MPS/Eclipse)。即使您可以在无头模式下运行两者,也无法在另一个 IDE 中轻松启动 Xtext 编辑器。MPS 也是如此。我认为 Xtext 是“更开放的”,因为它一方面适用于普通文本文件,另一方面也适用于已建立的工具(通常是 EMF 和 Eclipse)。

这回答了你的问题了吗?如果您有更详细的问题,我会尽力为您提供更准确的答案。

于 2010-04-09T09:14:07.477 回答
17

在我看来,Jetbrain 的 MPS 一开始更容易学习。您不需要使用 xtext 中的 Workflow-Files 等配置文件。

主要区别在于,在 MPS 中,您可以直接编辑模型,并且此模型会在语法/编辑器视图中显示给您。在 xtext 中,您可以编辑语法并生成/解析模型。

在我看来,MPS 更强大。您可以更轻松地组合语言并扩展它们。投影编辑器的一大优势是您可以隐藏信息或显示从模型中检索到的附加信息。您还可以使用不同的视图,例如表格或图形(在 MPS 2.1 中出现)。

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

于 2011-04-15T10:44:13.930 回答
17

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

于 2010-11-26T11:13:50.870 回答