【发布时间】:2010-11-18 11:20:13
【问题描述】:
有人对 JetBrains 元编程系统有任何经验吗? MPS 是否比在 Ruby 中开发 DSL 更好?
【问题讨论】:
标签: mps
有人对 JetBrains 元编程系统有任何经验吗? MPS 是否比在 Ruby 中开发 DSL 更好?
【问题讨论】:
标签: mps
我对 MPS 没有任何亲身经历,但在最近的一集Herding Code with Markus Völter 中提到了它。这是我的理解。 MPS 是一个投影编辑器,这意味着您无需解析和编辑文本,而是直接编辑下划线语言数据结构。正如 Markus 所提到的,MPS 允许您定义自己的语言,但您也可以将新的语言概念引入现有语言。例如,您可以在几分钟内为 Java 添加一个新关键字。 MPS 模糊了内部和外部 DSL 之间的界限,因此,您可以获得静态类型和工具支持,这是使用 Ruby 等动态语言开发 DSL 时无法获得的。
【讨论】:
我为 JetBrains 工作。我领导了 MPS 项目几年,现在我正在研究另一个完全用 MPS 编写的项目。根据我的经验,MPS 值得使用:-)
您的问题的答案取决于很多事情。如果您有基于 Ruby 的系统,或者想快速创建一门语言,基于 Ruby 的内部 DSL 可能是最佳选择。如果你想生成 Java,并且有时间学习 MPS,MPS 可能是最好的情况。您还可以考虑 XText 等系统,它们介于基于 Ruby 的 DSL 和 MPS 之间。
【讨论】:
MPS 是一种有趣的野兽,具有非常巨大的潜力。这个想法简直太棒了:
话虽如此,不幸的是,至少对于实际可用的 MPS 版本,Jetbrains 未能提供上述(至少对我而言),因为: - 使用起来非常非常困难和复杂 - 就像易于使用的 IntelliJ 的作者不会制作一样。 - 用户在能够做一些有用的事情之前需要学习太多的概念和“方法”,但仍然会有一种进入黑暗的感觉。 - IDE 不会为您生成 IDE,但会在 MPS 内部生成一些东西,仅限“基于单元的编辑器”(截至此版本)。
我尝试了几次 MPS(因为这个概念是如此美妙和有前途),但不幸的是,到目前为止,我无法用它做一些有用的事情。 我可能对 MPS 很愚蠢,但在我刚刚了解 MPS 的基本知识时,我能够提供完全可用的基于 Groovy 的 DSL。
我仍在关注 MPS 的发展,并希望有一天能兑现最初的承诺,因为这是一个非常棒的想法。
【讨论】:
通用 lisp 对象系统 CLOS 中的宏可以极大地改变语法,MPS 与 ANTLR 非常相似,但它带有图形编辑器。然而,MPS 不喜欢编译和运行时之外的代码碎片,因此 MPS 和 ANTLR 都围绕静态元编程问题展开。您仍然无法创建将接受任意数量的子构造参数的构造,例如 Monadics,例如;一个列表理解构建器,它采用任意数量的过滤器和列表生成器。为此,您需要以编程方式更改原始 AST。更有经验的 Lispers 可能会指出其他无法完成的转换。
【讨论】:
我同意,在学习 MPS 时,文档对于初学者来说一直是个问题。当上一篇文章写成时(2010 年),这当然是正确的。亲身体验,并最终成功理解了系统,我写了MPS Language Workbench(第一卷和第二卷)来帮助平滑学习曲线。我从读者那里得到的反馈是,这些书足以帮助您入门(第一卷)并了解 MPS 平台的更高级方面(第二卷)。
关于原始问题的答案。是的,我相信与使用 Ruby 或 Groovy 开发 DSL 相比,MPS 具有关键优势。原因是作为语言设计师你
您可以在MetaR project 中看到使用 MPS 构建的 DSL 的一个很好的示例。
【讨论】: