领域特定语言,应用程序生成器和软件重用

时间:2012-08-04 18:42:29

标签: dsl code-reuse

James Neighbors提到DSL作为一种软件重用的方法,但没有解释原因。他只是说DSL可以比可重用组件库更好。我无法理解这种关系以及我们在软件重用中使用DSL可以带来哪些好处?

同样在Mernik开发DSL论文的时间和方式中,他提到DSL可以作为应用程序生成器的输入语言,而应用程序生成器是重用Krueger讨论的软件的一种方法。

有人可以告诉我这些关系或者DSL如何成为软件重用的有效方法?非常感谢您的帮助

2 个答案:

答案 0 :(得分:2)

詹姆斯非常清楚为什么DSL是软件重用的好方法(他和我一起在加州大学欧文分校):

  • 他们捕获问题域中感兴趣的概念
  • 他们使用在该域中有效的社区熟悉的符号
  • 他们定义规范/解决方案组件的组成规则以产生答案,以便在提供DSL片段时可以检查它是否合理

他的Draco系统实现了所有这些概念,接受了DSL描述,接着是DSL实例,然后Draco通过应用实现知识片段(“细化规则”)编译成低级代码来映射将高级DSL转换为较低级别的DSL /在较低级别DSL中进行优化,然后重复,直到最终以足够低级别的抽象方式到达DSL以提供给传统编译器(例如,到LISP或C或Ada或COBOL或...)。

这是他的优化和优化范例,它允许一组DSL通过层次结构细化到低级代码。因此,您可以获得分层域的可组合性,并且可以在非常高的抽象级别上工作。

因此,您可以捕获问题规范和实现知识,并将其应用于获取代码。重复使用抽象,规范,实现,哇,......不仅仅是重复使用“代码”,而这些代码仍然存在,就像80年代早期一样。代码很难重用。

与“子程序作为组件”相比,这是一个非常好的范例(目前这个“内部DSL”的奇特术语,它错过了域符号,规范检查,实现和组合元素)。 p>

我认为你真的应该仔细阅读他的博士论文(可访问here以及他的许多其他论文)。它比平时更容易接近。它没有充满神秘的数学;它充满了关于如何设计各种DSL的概念和演示。

答案 1 :(得分:0)

实际上,DSL在面向对象的方法下只是方便的上层结构方法。

当您编写自己的DSL时,您提供了更灵活的机制来使用该函数,并为更多常见案例模型的所选域的行为元素提供,而不仅仅是为特定的通用编程语言编写的包或库。

此外,DSL允许跨域语言重用域模型的描述。例如,如果您使用Java编写自己的库,那么DSL超结构+适当的解释器允许使用c#语言代码生成器重用您的组件。

DSL方法也有更常见的相对范式,称为“概念编程”。您可以尝试找到有关它的论文,特别是爱沙尼亚 - 苏联科学家Enn Tyugu的论文:http://www.cs.ioc.ee/~tyugu/