问题 内部DSL的Groovy vs Scala


我将为JVM创建一个内部DSL。我看到Scala和Groovy是这项任务的最佳人选。我发现Groovy脚本不那么冗长,默认使用BigDecimal,而Scala有很好的类型推理系统。在内部DSL的背景下,这些语言之间的其他差异是什么?

编辑: 最后我选择了Groovy,经过一年的DSL开发,它似乎是正确的选择:我可以从Groovy 2.0中的类型推断和静态类型中受益,并且在需要时仍然使用动态类型,方法/属性调度处理程序工作得很好,ASTTransforation允许我改变语言语义,eclipse的groovy插件和IDEA对Groovy DSL提供开箱即用的支持,DSL语法比Scala更简洁。虽然仍有一些改进空间,因为一些动态功能并不总是如我所料。


5690
2018-04-30 02:46


起源

Groovy和Scala是完全不同的东西 - 除了类型推断之外,Scala实际上有类型,而Groovy是一种动态脚本语言。了解DSL的应用程序和目标可能会有很大帮助。但总的来说,我会说几乎任何大型应用程序都使用Scala而不是Groovy。 - Janx
你可以看 采访Debasish Ghosh。它对你有所帮助。您可能也对他的书感兴趣 DSL在行动中。 - tenshi
@Easy谢谢,这非常有帮助 - Nutel
一世 非常 推荐Debaish Ghosh的DSLs in Action(www.manning.com/ghosh)。我阅读了Scala部分,这极大地帮助我加快了DSL的速度。 - Kevin Meredith


答案:


我没有在Scala中使用DSL的经验,但我可以说Groovy通过元对象协议的动态特性使其非常适合DSL。我发现 这个系列 在Groovy中检查DSL时要有所帮助。你可能也想看看 马丁福勒的页面,其中包括他关于这个主题的书的链接。


5
2018-05-13 21:29





我一直在使用DSL进行Scala测试。我认为你最终会在Scala中编写更多的解释代码(类型转换等),但是一旦你有了,你的DSL就没有理由或多或少地冗长。回报是(一旦IDE赶上)你将有代码完成,以帮助写入你的Scala DSL。

Scala模式匹配也是编写解释代码的巨大胜利。


5
2018-06-11 08:01



真的,这个答案后18个月随机下来投票? WTF正在这个地方继续? - Duncan McGregor
而另一个。曾经是一个不错的地方 - Duncan McGregor
你为什么选择一个 internal DSL结束 external (parser combinators)? [出于好奇而不是分歧] - Kevin Meredith
因为我可以在20分钟内启动内部DSL而不是2天学习足够的解析器组合技术。此外,我的IDE将与内部DSL配合使用 - Duncan McGregor
我只阅读了有关Scala的内部DSL DSL在行动中。但是,我发现Parser Combinators功能强大且富有表现力。但是,我从一些Scala人那里听说过 parboiled2 更适合工业用途。 - Kevin Meredith


很多 Groovy DSL的优点 在1.8中添加。

Groovy是一个很好的起点。

看看Gradle。这是一个用Groovy编写的构建工具,构建语言是DSL。


3
2018-06-09 21:57