我们需要创建复杂的固定长度和可变长度字符串。这些字符串可能代表客户资料、订单等。你们建议使用哪种基于 JVM 的编程语言?
想法是让最终用户使用此 DSL 创建字符串。所以我正在寻找验证、代码完成等。
我们需要创建复杂的固定长度和可变长度字符串。这些字符串可能代表客户资料、订单等。你们建议使用哪种基于 JVM 的编程语言?
想法是让最终用户使用此 DSL 创建字符串。所以我正在寻找验证、代码完成等。
有两种类型的 DSL;外部和嵌入式。
外部 DSL 与您的宿主语言完全分离,即您在语言之外编写它,但通常用于生成宿主语言的代码。对于这种方法,带有 XPand 的 XText 可能是最好的工具,因为一个简单的语法文件可以为新的 DSL 生成一个完整的基于 Eclipse 的编辑器,并且您可以使用 XPand 中的代码模板来生成实际的 Java 代码。XTend 和 XPand 是用 Java 编写的,但这是偶然的,因为只要您在流程结束时得到 Java 代码,它们就可以用任何东西编写。这种方法的缺点是,对于任何相当复杂的问题,语言都会变得相当复杂,并且需要在语法上做很多工作,甚至在代码生成模板中做更多的工作。你可以' t 使用任何宿主语言功能,如表达式评估,因此如果需要,所有这些都需要在您的 DSL 中重建。XText 将很快包含 XBase,它是一种部分语言,其中将包含表达式以提供帮助。
另一种方法是嵌入式 DSL,其中高级域特征在宿主语言中表达,或者使用功能语言中常见的高阶结构(如 HOF 和 monad)或通过宏(例如 Lisp)等元编程工具。Java 没有这些,因此对于 DSL 工作(或大多数其他形式的抽象编程)来说是一个糟糕的选择。Spring Roo 为使用生成的 java 提供了元编程类型工具,因此可能是一种选择。如果做不到这一点,Scala 可能是最像 Java 的 JVM 语言,它很流行并且拥有你需要的工具。
嵌入式 DSL 通常比外部 DSL 容易得多,因为您完全支持宿主语言,所以我的建议是尝试 Scala。
斯卡拉一路!Scala 特别适用于内部 DSL(请参考这个)。
使用Xtext ( http://www.eclipse.org/Xtext/ ) 在指定 DSL 时,您可以免费获得一个不错的编辑器。
我会为此推荐Groovy。
我会推荐jruby。我已经做了一些,而且总是很容易得到我想要的东西。
听起来像是 Apache Velocity 模板引擎的问题。如果您愿意,它是一个带有模板语法或 DSL 的 Java 库。