哪种语言(在JVM上运行)最适合创建DSL?

Ara*_*ram 8 java architecture dsl jvm dsl-tools

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

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

Vij*_*hew 7

使用在JVM上运行的Lisp.你有一些选择:

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

一个很好的免费的书,介绍了如何使用Lisp的设计软件自下而上的,即如何成长的Lisp成,是理想的手来解决问题的语言.

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

  1. 纽埃
  2. Misty Beach Forth


And*_*rew 6

有两种类型的DSL; 外部和嵌入式.

外部DSL与您的宿主语言完全分开,即您在语言之外编写它,但通常用于生成宿主语言的代码.对于这种方法,与XTEXT XPAND可能是最好的工具,简单的语法文件生成新的DSL一个完整的基于Eclipse的编辑器,你可以使用代码模板XPAND产生实际的Java代码.XTend和XPand是用Java编写的,但这是偶然的,因为它们可以用任何东西编写,只要你在流程结束时最终得到Java代码.这种方法的缺点是,对于任何相当复杂的问题,语言将变得非常复杂,语法中将需要大量工作,甚至代码生成模板中也需要更多工作.您不能使用任何主机语言功能,如表达式评估,因此如果您需要,所有这些都需要在DSL中重建.XText将很快包含XBase,它是一种部分语言,将包含表达式以帮助解决此问题.

另一种方法是嵌入式DSL,其中高级域特征以宿主语言表达,或者通过功能语言中常见的高阶构造(如HOF和monad)或通过诸如宏的元编程工具(例如Lisp)来表达.Java既没有这些,也不适合DSL工作(或大多数其他形式的抽象编程).Spring Roo为使用生成的java提供了元编程类型工具,因此可能是一个选项.如果做不到这一点,Scala可能是最受欢迎的JVM语言,并且拥有您需要的设施.

嵌入式DSL通常比外部DSL容易得多,因为您完全支持宿主语言,因此我的建议是尝试使用Scala.


01e*_*1es 5

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


Hen*_*rik 5

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