JetBrains元编程系统

10

有没有人使用过JetBrains元编程系统?MPS是否比在Ruby中开发DSL更好?

5个回答

7
我在 JetBrains 工作。我曾领导 MPS 项目多年,现在我正在另一个完全使用 MPS 编写的项目上工作。根据我的经验,MPS 值得使用 :-)
回答你的问题需要考虑很多因素。如果你有基于 Ruby 的系统,或想快速创建语言,则基于 Ruby 的内部 DSL 可能是最佳选择。如果你想生成 Java,并有时间学习 MPS,则 MPS 可能是最佳选择。你还可以考虑像 XText 等系统,它们处于基于 Ruby 的DSL和MPS之间的中间地带。

7

我没有MPS的个人经验,但它在最近一期的Herding Code with Markus Völter中被提到。我的理解是,MPS是一个投影编辑器,这意味着你直接编辑底层语言数据结构,而不是解析和编辑文本。正如Markus所提到的,MPS允许你定义自己的语言,但你也可以将新的语言概念引入现有的语言中。例如,你可以在几分钟内向Java添加一个新的关键字。MPS模糊了内部DSL和外部DSL之间的界限,并且你会获得静态类型和工具支持,这是你使用像Ruby这样的动态语言开发DSL时无法获得的。


3
MPS是一个非常有趣的工具,具有巨大的潜力。这个想法非常棒:
  • 在IDE(MPS)中,用户可以更加直观地定义DSL(领域特定语言)
  • IDE不仅允许生成语言本身(运行时或其功能),还可以生成“工具”,也就是一个更加完整的IDE,供用户或其他用户用于编辑新语言。
然而,至少对于现有的MPS版本来说,Jetbrains未能实现上述目标,因为: - 它非常难用和复杂 - 就像它不是易于使用的IntelliJ的作者所做的一样。 - 用户需要学习太多的概念和“方法”,才能做出有用的事情,但仍然感觉陷入了黑暗之中。 - IDE不会为您生成IDE,只会在MPS内部生成“基于单元格的编辑器”(截至该版本)。
我曾经多次尝试使用MPS(因为这个概念非常美妙和有前途),但可惜的是,到目前为止,我无法用它做出有用的东西。 也许我对MPS太蠢了,但是在我刚开始了解MPS的基础知识的时间里,我已经能够交付完全可用的基于Groovy的DSL。
我仍然关注着MPS的发展,并希望有一天它能够实现最初承诺的目标,因为这是一个非常棒的想法。

3

通用Lisp对象系统CLOS中的宏可以极大地改变语法,MPS与ANTLR非常相似,但它配备了一个图形编辑器。然而,MPS不欣赏代码碎片化超过编译和运行时,因此MPS和ANTLR都涉及静态元编程问题。您仍然无法创建将接受任意数量子构造参数的结构,如Monadics,例如:接受任意数量过滤器和列表生成器的列表理解构建器。要实现这一点,您需要对原始AST进行程序化修改。更有经验的Lispers可能可以指出其他无法完成的转换。


2
我认为,对于初学者来说,文档是学习MPS时的一个问题。这在之前的帖子中(2010年)确实是事实。通过自己的亲身经历并最终成功理解系统,我写了《MPS语言工作台》(第一卷和第二卷),以帮助缓解学习曲线。读者反馈指出,这些书籍足以帮助您入门(第一卷)并学习MPS平台的更高级方面(第二卷)。
关于原始问题的回答。是的,我相信与在Ruby或Groovy中开发DSL相比,MPS具有关键优势。原因在于,作为语言设计者,您:
1. 可以更好地控制语言的各个方面, 2. 您使用MPS构建的语言可以包括图形符号和用户界面元素,这使它们成为用户界面和文本DSL脚本/程序之间的混合体, 3. MPS可帮助您迁移程序,因为随着语言的发展(例如,重构或其他语言更改),这些变化可以自动地传播到语言的最终用户,从而实现DSL脚本/程序的迁移。
您可以在 MetaR 项目 中看到使用 MPS 构建的良好 DSL 示例。

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