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

我在几个项目中使用了Eclipse Xtext 。 我喜欢在Ecore(meta)模型上定义语法的容易程度,并为您生成的所有内容包括真棒Eclipse插件编辑器,但是我对底层EMF框架以及静态字段中的所有硬件都感到不安。

最近我遇到了Jetbrains的MPS(元编程系统) 。 它基于完全不同的哲学。 虽然Xtext用于创build基于文本的DSL为您生成parsing器(并实例化这些EObject),但是在MPS创build的语言中,直接编辑模型结构。 到目前为止,我明白了。

有没有人使用这两种DSL工具的经验来指出与他们合作的主要区别,预期用例和受众,复杂性,学习曲线(说实话,开始使用Xtext应该知道很多关于EMF的内容) ,代码生成等?

Xtext是一种传统的基于parsing器的方法,适用于普通的文本文件。 可以邮寄,存储和与任何版本控制系统进行比较,甚至可以使用您最喜欢的命令行工具在编辑器外进行修改。 它紧密地集成到Eclipse EMF中,并且可以在Eclipse生态系统中find大量的工具。 最近,它发展成为一种“编程语言开发工具包”,它允许你支持所有types的附加工具。

另一方面,MPS与基于投影的编辑器配合使用,当您在环境中工作时,它只是“看起来”像文本。 底层存储格式是特定于工具的(读取:无需特殊程序即可使用),不会parsing纯文本文件。 这提供了一些很大的优点,比如embedded任意语言(例如,在Java里面的SQL里面的正则expression式)。 工具链能够以模型的forms生成模型转换,就像编辑器一样,开始时感觉不寻常,但也是强大的。

这两个工具都以某种方式locking你的世界(MPS / Eclipse)。 即使您可以在无头模式下运行,也无法在另一个IDE中轻松启动Xtext编辑器。 MPS也是如此。 我认为Xtext是“更开放的”,因为它一方面可以处理普通的文本文件,另一方面可以和已有的工具(一般的EMF和Eclipse)进行良好的配合。

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

MPS的主要思想是不使用投影编辑器而不是基于文本的编辑器。 这是语言的可操作性。 例如,您可以使用元组来扩展Java,另一个人可以使用asynchronous方法调用来扩展Java。 在基于文本的工具(如XText)中,不可能保证两个扩展一起工作,因为结果语法可能不明确。 MPS使这成为可能。 您只需像添加库一样将语言添加到项目中。

在我看来,Jetbrain的MPS起初更容易学习。 您不需要像xtext中的Workflow-Files一样使用configuration文件。

主要区别在于,在MPS中,您直接编辑模型,并在语法/编辑器视图中向您显示此模型。 在xtext中编辑语法,并生成/parsing模型。

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

版本控制可以使用MPS完成。 这是一个适用于树型模型的合并/比较工具。