格雷格威尔逊的谈话“有点证据” ( http://www.slideshare.net/gvwilson/bits-of-evidence -2338367 )讨论了Martin Fowler提出的使用DSL的好处的以下主张背后缺乏证据:

“[使用域特定语言]导致两个主要好处。第一个,也是最简单的是提高程序员的工作效率。第二个......是......与领域专家的沟通。“ - 2009年7月/ 8月 IEEE软件中的Martin Fowler

问题:是否有任何实证研究证明程序员的工作效率有所提高,或者使用DSL改善了与领域专家的沟通?

许多构建DSL的人无法为“你为什么要构建DSL?”提供合理的答案。和“为什么DSL会帮助你而不是一个考虑周全的对象模型?”

我听到很多“我正在做这件事,因为它很酷而且其他人都在做” - 这不是一个理性的答案。

我认为DSL至少在某些时候是有用的,但它们不太可能是“银弹”。应该不分青红皂白地使用。我希望看到一些科学着作,描述何时应该和不应该使用DSL--基于实证研究。

有帮助吗?

解决方案

只是谷歌搜索,我发现了几篇有趣的论文:

实践中的特定领域语言:关于成功因素的用户研究

特定领域语言与面向对象框架:金融工程案例研究

设计后领域特定语言嵌入:案例在软件工程领域学习

我想你可以从Google Scholar开始找到一些更好的参考资料......

其他提示

这取决于您认为的DSL。

例如,css是DSL吗?我想是的,那么它显然可以使页面样式更容易,因为在HTML 3中我们使用表格来安排,而且我们现在没有灵活性。

如果您有DSL,那么学生可以使用原子符号(H20)设计分子,那么它比自己编码更简单,因为如果给出符号和类型,您可以快速查看分子配置例如,粘合。

我不知道有哪种方式显示这种或那种方式,但是,如果您的目标受众不是程序员,那么DSL就有意义,因此我们可以让会计师使用他们的术语来编写他们的应用程序,而不是让他们向开发人员提出要求。

DSL已经存在了很长时间,但现在变得越来越流行,所以时间会告诉我们什么时候有更好的和坏用的例子,关于何时最好使用它以及何时它实际上是有害的。例如,我不会用任何DSL编写医疗监控软件。

“科学”的整个前提在这种情况下是可疑的。根本没有办法保证“可再现的”,“控制(组)”的标准。实证研究所需要的。

总的来说,在商业编程中,没有对某些事物在使用之前的好处进行过认真的实证研究。无论是SQL,面向对象语言,函数式语言,垃圾收集等等。

这些事情往往由市场决定。

为什么会出现这种情况可能是两个原因的组合。一个是获得一个好的实证研究是非常昂贵的,从经济的角度来看它只是尝试它便宜得多。另一种情况是每种情况都不同,因此实证研究必须从限制研究中的问题开始,以便在使用DSL和不使用DSL之间进行适当的比较,并且研究的最终结果不会很超出所选择的特定类型的问题。

我认为我们可以从经验中安全地说,没有什么是灵丹妙药,并坚持采用某种方法的充分理由会使任何解决方案更好,因为即使DSL有助于某种情况,如果你不知道为什么你这样做,你不知道你是否正确行事,最终可能会错过整个利益。

这是一个明智的问题,我认为存在定义问题,例如“什么是DSL”?当一个buzword变得“热”时如果有的话,它就会成为一种营销机会并与基础科学脱节。

几年前,我写了一本书(建立更好的应用程序,ISBN 0-442-01740-5,早已绝版),我试图研究性能,不仅是程序,还有程序员。我试图用信息理论来看待它。

我想出了一个粗略的可维护性测量方法,其中存在一个问题,作为某人头脑中的知识结构(对于AI人来说没有问题),并且其解决方案存在于由机器处理的文本结构中。我看到的是这两种结构之间的关系。例如,如果心理问题描述中发生了更改,那么需要更改多少源代码才能将其正确地传输到程序文本中?衡量这种情况的一种简单方法是在之前和之后区分代码。现在,衡量可能变化空间的平均值,平均值越低,源代码的可维护性就越高。

我的论点是,通过该度量,可维护性更高的代码越多,它就越类似于域的心理模型,因此将其称为“面向问题”的代码是合理的。或更多“特定领域”。 我注意到这种代码的一个特征是,它往往是问题的语句,而不是问题的解决方案。解决方案不在于语言,而在于语言的实现,子结构。 这是与“声明性”概念的回声,尽管不是直接的协议。与“命令式”相对语言。

因此,在试图回答你的问题时,我会说让我们远离人们可能想要的东西“DSL”。意思是,而是看一个至少适度明确的定义。

作为开发这个想法的一部分,我偶然发现了一些技术,其中一个是差异执行,它似乎为编码UI提供了良好的可维护性,并且还将源代码大小减少了大约一个数量级。我的理论是,这是DSL可能成功的一个例子。

如果没有维护者不得不爬上学习曲线,我并不认为可以实现可维护性。我认为真正的可维护性是以程序员必须学习可能不易掌握的东西为代价的,但一旦掌握了具有所需价值的东西。

语言学家Saphir和Worf,我们可以了解到语言的语法特征会影响我们的思维=如果你创建了一个DSL,你会想到更多的特定领域,而且可能不那么通用。一切都与抽象有关,就像通用编程语言倾向于从机器中抽象出来一样,因此我们能够更多地关注算法,结构和设计,而不是指令集,寻址模式,寄存器大小等。

不确定是否有人在您需要的范围内进行过任何研究。 我的经验是,首先创建DSL的成本可能很高(可能比简单的对象模型做2倍或更多的努力来做同样的事情)。 然而,一旦创建,开发人员就可以通过使用DSL比使用模型更快地完成任务而立即获益。

问题的问题在于它将所有DSL视为平等。有些会更容易实现,有些则更难 - 无论是使用流畅的接口/内部DSL还是外部DSL都会导致实现不同的时间/成本。

此类研究可能未涉及的一个主要好处是DSL可以轻松地表达和实现代码。它还可以帮助其他人更容易理解代码的意图 - 并且由于软件开发生命周期的维护阶段是SDLC的一个重要组成部分,这可能会带来远远超过最初在创建DSL时丢失的好处(从长远来看)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top