哪种语言(在JVM上运行)最适合创建DSL?
-
23-10-2019 - |
题
我们需要创建复杂的固定长度和可变长度字符串。这些字符串可能代表客户配置文件,订单等。你们建议哪种基于JVM的编程语言?
想法是让最终用户使用此DSL创建字符串。因此,我正在寻找验证,代码完成等。
解决方案
和 XTEXT (http://www.eclipse.org/xtext/)指定DSL时免费获得一个不错的编辑器。
其他提示
DSL有两种类型;外部和嵌入式。
外部DSL与您的主机语言完全分开,即您在语言之外编写它,但通常用于以主机语言生成代码。对于这种方法,带有XPAND的XTEXT可能是最佳工具,因为简单的语法文件会为新DSL生成完整的基于Eclipse的编辑器,并且您可以使用XPAND中的代码模板来生成实际的Java代码。 Xtend和Xpand用Java编写,但这是偶然的,因为只要您在过程结束时最终使用Java代码,它们就可以写成任何内容。这种方法的不利之处是,对于任何相当复杂的问题,语言都会变得很复杂,并且语法中需要大量工作,甚至在代码生成模板中需要更多工作。您不能使用任何主机语言功能,例如表达评估,因此所有这些都需要在DSL中重建,如果需要的话。 Xtext将很快包括XBase,这是一种部分语言,其中包括在此处提供帮助的表达式。
另一种方法是一种嵌入式DSL,其中高级域特征以宿主语言表示,既有具有功能性语言或通过元编程设施(例如宏(例如LISP)))的高阶构造(例如HOF和Monads)。 Java都不拥有DSL工作(或大多数其他形式的抽象编程)的不好选择。 Spring Roo使用Generation为Java提供了元编程类型的设施,因此可能是一种选择。失败的情况下,Scala可能是最喜欢JVM语言的Java,并且具有所需的设施。
嵌入式DSL通常比外部DSL容易得多,因为您得到了主机语言的全部支持,因此我的建议是尝试Scala。
Scala一直! Scala特别适合内部DSL(请参阅 这个).
我会推荐的 groovy 为了那个原因。
我建议jruby。我已经做了一些,而且很容易就我想要的东西。
听起来像是Apache速度模板引擎的问题。如果可以的话,它是带有模板语法或DSL的Java库。