我最近一直在思考DSL与图书馆的问题。在我的领域,DSL(R,SAS和Matlab)的问题在于它们是用于编写更多通用代码的PITA和用于在其他语言中集成到更通用代码的PITA。我不是说要么是不可能的,要么令人讨厌和令人沮丧。
这与例如NumPy的方法形成了鲜明对比,NumPy运行在通用语言之上,如果它存在了很长时间并且有大量资金投入其中,它可能会和Matlab一样好。这使您可以处理一个项目,其中只有一点点是数字,而不需要一堆粗俗的胶水代码来连接语言,必须记住多种语法等。
独立DSL相对于通用语言的普通旧库有什么优势?似乎在更难以与更通用的代码集成方面存在明显的缺点,而另一种语法可以理解我无法理解为什么这些DSL如此受欢迎。
答案 0 :(得分:1)
独立DSL的一个主要优点是它可以更具表现力。在用通用语言编写的库中,您受到语言语法的限制。考虑一个银行软件的例子,它有一些可以查询的财务记录,你想在去年找到所有抵押贷款问题。使用通用语言的查询的伪代码类似于:
List<Mortgage> mortgagesThisYear = new LinkedList<Mortgage>();
for ( Mortgage m : mortgages ) {
if ( today.minus(m.getDate()) <= 1 year ) {
mortgagesThisYear.add(m);
}
}
现在在DSL中,您可以编写如下内容:
Find all mortgages in the last year
更重要的是,银行家可以基于“普遍存在的语言”来构建这些查询。 (一种常见的域名语言,使程序员和银行家更容易沟通)。
站在DSL上意味着非常具体而非通用。语言更具表现力,语法通常更宽松,与域名更相关。
答案 1 :(得分:0)
外部DSL的缺点不适用于使用代码生成和生成间隙模式实现的外部DSL。然后通过所使用的一种通用语言进行接口连接。 实际上,内部DSL有许多缺点,例如没有良好的可读显式结构,不良的实践编码,有限的具体语法可能性,没有工具支持,很难或不可能实现领域特定的验证以及与其他代码的接口问题,当DSL实现是太脆弱了。