我将为JVM创建一个内部DSL。我看到Scala和Groovy是这项任务的最佳人选。我发现Groovy脚本不那么冗长,默认使用BigDecimal,而Scala有很好的类型推理系统。在内部DSL的背景下,这些语言之间的其他差异是什么?
编辑: 最后我选择了Groovy,经过一年的DSL开发,它似乎是正确的选择:我可以从Groovy 2.0中的类型推断和静态类型中受益,并且在需要时仍然使用动态类型,方法/属性调度处理程序工作得很好,ASTTransforation允许我改变语言语义,eclipse的groovy插件和IDEA对Groovy DSL提供开箱即用的支持,DSL语法比Scala更简洁。虽然仍有一些改进空间,因为一些动态功能并不总是如我所料。
我没有在Scala中使用DSL的经验,但我可以说Groovy通过元对象协议的动态特性使其非常适合DSL。我发现 这个系列 在Groovy中检查DSL时要有所帮助。你可能也想看看 马丁福勒的页面,其中包括他关于这个主题的书的链接。
我一直在使用DSL进行Scala测试。我认为你最终会在Scala中编写更多的解释代码(类型转换等),但是一旦你有了,你的DSL就没有理由或多或少地冗长。回报是(一旦IDE赶上)你将有代码完成,以帮助写入你的Scala DSL。
Scala模式匹配也是编写解释代码的巨大胜利。
很多 Groovy DSL的优点 在1.8中添加。
Groovy是一个很好的起点。
看看Gradle。这是一个用Groovy编写的构建工具,构建语言是DSL。