有没有人使用过JetBrains元编程系统?MPS是否比在Ruby中开发DSL更好?
我没有MPS的个人经验,但它在最近一期的Herding Code with Markus Völter中被提到。我的理解是,MPS是一个投影编辑器,这意味着你直接编辑底层语言数据结构,而不是解析和编辑文本。正如Markus所提到的,MPS允许你定义自己的语言,但你也可以将新的语言概念引入现有的语言中。例如,你可以在几分钟内向Java添加一个新的关键字。MPS模糊了内部DSL和外部DSL之间的界限,并且你会获得静态类型和工具支持,这是你使用像Ruby这样的动态语言开发DSL时无法获得的。
通用Lisp对象系统CLOS中的宏可以极大地改变语法,MPS与ANTLR非常相似,但它配备了一个图形编辑器。然而,MPS不欣赏代码碎片化超过编译和运行时,因此MPS和ANTLR都涉及静态元编程问题。您仍然无法创建将接受任意数量子构造参数的结构,如Monadics,例如:接受任意数量过滤器和列表生成器的列表理解构建器。要实现这一点,您需要对原始AST进行程序化修改。更有经验的Lispers可能可以指出其他无法完成的转换。