10

有人对 JetBrains 元编程系统有任何经验吗?MPS 是否比在 Ruby 中开发 DSL 更好?

4

5 回答 5

7

我对 MPS 没有任何个人经验,但在最近一集与 Markus Völter 合作的 Herding Code中提到了这一点。这是我的理解。MPS 是一个投影编辑器,这意味着您无需解析和编辑文本,而是直接编辑下划线语言数据结构。正如 Markus 所提到的,MPS 允许您定义自己的语言,但您也可以将新的语言概念引入现有语言。例如,您可以在几分钟内为 Java 添加一个新关键字。MPS 模糊了内部和外部 DSL 之间的界限,因此,您可以获得静态类型和工具支持,这是使用 Ruby 等动态语言开发 DSL 时无法获得的。

于 2009-08-11T00:39:25.533 回答
6

我为 JetBrains 工作。我领导了 MPS 项目几年,现在我正在研究另一个完全用 MPS 编写的项目。根据我的经验,MPS 值得使用 :-)

你的问题的答案取决于很多事情。如果您有基于 Ruby 的系统,或者想快速创建一门语言,基于 Ruby 的内部 DSL 可能是最佳选择。如果你想生成 Java,并且有时间学习 MPS,MPS 可能是最好的情况。您还可以考虑 XText 等系统,它们是基于 Ruby 的 DSL 和 MPS 之间的中间地带。

于 2010-11-26T11:20:28.390 回答
3

普通 lisp 对象系统 CLOS 中的宏可以极大地改变语法,MPS 与 ANTLR 非常相似,但它带有图形编辑器。然而,MPS 不喜欢编译和运行时之外的代码碎片,因此 MPS 和 ANTLR 都围绕静态元编程问题展开。您仍然无法创建将接受任意数量的子构造参数的构造,例如 Monadics,例如;一个列表理解构建器,它采用任意数量的过滤器和列表生成器。为此,您需要以编程方式更改原始 AST。更有经验的 Lispers 可能会指出其他无法完成的转​​换。

于 2012-01-23T09:44:30.743 回答
3

MPS 是一个有趣的野兽,具有非常巨大的潜力。这个想法简直太棒了:

  • 在 IDE (MPS) 中,用户或多或少在视觉上定义了他的 DSL(s)
  • IDE 不仅允许生成语言本身(运行时或它的作用),还允许生成“工具”,也就是或多或少成熟的 IDE,他或其他用户可以使用它来编辑该新语言。

话虽如此,但不幸的是,至少对于实际可用的 MPS 版本,Jetbrains 未能提供上述(至少对我而言),因为: - 使用起来非常非常困难和复杂 - 就像它的作者不会制作一样易于使用的 IntelliJ。- 在能够做一些有用的事情之前,用户需要学习太多的概念和“方法”,但仍然会有一种进入黑暗的感觉。- IDE 不会为您生成 IDE,但也会在 MPS 内部生成一些东西,仅限“基于单元的编辑器”(截至此版本)。

我尝试了几次 MPS(因为这个概念是如此美妙和有前途),但不幸的是,到目前为止,我无法用它做一些有用的事情。我可能对 MPS 很愚​​蠢,但在我刚刚了解 MPS 的基本知识时,我能够提供完全可用的基于 Groovy 的 DSL。

我仍在关注 MPS 的发展,并希望有一天能兑现最初的承诺,因为这是一个非常棒的想法。

于 2010-06-26T13:29:36.823 回答
2

我同意,在学习 MPS 时,文档对于初学者来说一直是个问题。当上一篇文章写成时(2010 年),这当然是正确的。亲身体验了这一点,并最终成功地理解了系统,我编写了MPS 语言工作台(第一卷和第二卷)来帮助平滑学习曲线。我从读者那里得到的反馈是,这些书足以帮助您入门(第一卷)并了解 MPS 平台的更高级方面(第二卷)。

关于原始问题的答案。是的,我相信与使用 Ruby 或 Groovy 开发 DSL 相比,MPS 具有关键优势。原因是作为一个语言设计师你

  1. 更好地控制语言的各个方面,
  2. 您使用 MPS 构建的语言可以包括图形符号和用户界面元素,这使它们成为用户界面和文本 DSL 脚本/程序之间的混合体,
  3. MPS 有助于在您发展语言时迁移程序(例如,使用自动 DSL 脚本/程序迁移,对语言的重构或其他更改可以传播到语言的最终用户)。

您可以在MetaR 项目中看到使用 MPS 构建的 DSL 的一个很好的示例。

于 2015-07-02T13:50:08.227 回答