9

我们需要创建复杂的固定长度和可变长度字符串。这些字符串可能代表客户资料、订单等。你们建议使用哪种基于 JVM 的编程语言?

想法是让最终用户使用此 DSL 创建字符串。所以我正在寻找验证、代码完成等。

4

8 回答 8

8

时髦的

http://docs.codehaus.org/display/GROOVY/Writing+Domain-Specific+Languages

于 2011-01-24T04:21:44.103 回答
8

使用在 JVM 上运行的 Lisp。您有一些选择:

  1. Clojure
  2. JS方案
  3. SISC
  4. ABCL
  5. Bigloo(不在 JVM 上运行,但具有良好的 Java 互操作性)。

一本很好的免费书解释了如何使用 Lisp自下而上地设计软件,即如何将Lisp 发展成一种非常适合解决手头问题的语言。

Forth系列中的语言也非常适合定义 DSL。有一些在 JVM 上运行:

  1. 纽埃
  2. 迷雾海滩
于 2011-01-24T04:59:49.267 回答
6

有两种类型的 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。

于 2011-02-02T10:46:37.243 回答
5

斯卡拉一路!Scala 特别适用于内部 DSL(请参考这个)。

于 2011-01-24T05:22:59.973 回答
5

使用Xtext ( http://www.eclipse.org/Xtext/ ) 在指定 DSL 时,您可以免费获得一个不错的编辑器。

于 2011-01-24T14:39:22.500 回答
2

我会为此推荐Groovy

于 2011-01-24T04:21:21.170 回答
0

我会推荐jruby。我已经做了一些,而且总是很容易得到我想要的东西。

http://www.artima.com/rubycs/articles/ruby_as_dsl3.html

于 2011-01-24T04:52:15.590 回答
-2

听起来像是 Apache Velocity 模板引擎的问题。如果您愿意,它是一个带有模板语法或 DSL 的 Java 库。

于 2011-01-24T04:18:10.750 回答