Kar*_*tný 50 dsl xtext mps eclipse-emf
我在几个项目中使用了Eclipse Xtext.我喜欢在Ecore(meta)模型上定义语法的简易性,并为你生成所有内容,包括令人敬畏的Eclipse插件编辑器,但我对基础EMF框架感到非常不舒服,所有内容都在静态字段中进行了硬连接.
最近我遇到了Jetbrains的MPS(元编程系统).它基于完全不同的哲学.虽然Xtext用于创建基于文本的DSL,为您生成解析器(并实例化那些EObject),但在MPS创建的语言中,可直接编辑基础模型结构.到目前为止,我明白了.
有没有人使用这两种DSL工具来指出在使用它们方面的主要差异,预期用例和受众,复杂性,学习曲线(说实话,开始使用Xtext应该对EMF的内容有很多了解) ,代码生成等?
小智 56
Xtext是一种传统的基于解析器的方法,适用于普通的文本文件.这些可以邮寄,存储并与任何版本控制系统进行比较,甚至可以使用您喜欢的命令行工具在编辑器外部进行修改.它与Eclipse EMF紧密集成,可以与Eclipse生态系统中的大量工具很好地配合使用.最近,它逐渐发展(并且仍然如此)成为某种"编程语言开发工具包",它允许您支持所有类型的附加工具.
另一方面,MPS使用基于投影的编辑器,当您在环境中工作时,该编辑器"看起来"像文本一样.底层存储格式是特定于工具的(读取:不使用特殊程序时无法使用),并且不解析纯文本文件.这提供了一些很大的优点,例如嵌入任意语言(例如Java中的SQL内部的Regex).工具链能够以模型的形式生成模型转换 - 编辑器在开始时感觉不寻常,但也很强大.
这两种工具都以某种方式锁定了他们的世界(MPS/Eclipse).即使您可以在无头模式下运行,也无法在另一个IDE中轻松启动Xtext编辑器.MPS也是如此.我认为Xtext"更开放",因为它一方面可以处理普通文本文件,另一方面可以很好地使用已建立的工具(一般是EMF和Eclipse).
这回答了你的问题了吗?如果您有更详细的问题,我会尽量给您更准确的答案.
Kon*_*tov 16
MPS的主要思想不是使用投影编辑器而不是基于文本的编辑器.这是语言的可比性.例如,您可以使用元组扩展Java,而另一个人可以使用异步方法调用来扩展Java.在基于文本的工具(如XText)中,不可能保证两个扩展可以很好地协同工作,因为生成的语法可能不明确.MPS使这成为可能.您只需像添加库一样为项目添加语言.
小智 15
在我看来,Jetbrain的MPS起初更容易学习.您不需要使用配置文件,如xtext中的Workflow-Files.
主要区别在于,在MPS中,您可以直接编辑模型,并在语法/编辑器视图中向您显示此模型.在xtext中,您可以编辑语法并生成/解析模型.
在我看来,MPS更强大.您可以更轻松地组合语言并扩展它们.投影编辑器的一大优势是您可以隐藏信息或显示从模型中检索的其他信息.您还可以使用不同的视图,如表格或图形(在MPS 2.1中出现).
可以使用MPS完成版本控制.这是一个适用于树模型的合并/差异工具.