1

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

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

谁能告诉我这些关系或 DSL 如何成为实现软件重用的有效方法?非常感谢你的帮助

4

1 回答 1

2

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

  • 他们捕捉问题域中感兴趣的概念
  • 他们使用在该领域工作的社区熟悉的符号
  • 它们定义规范/解决方案组件的组合规则以产生答案,以便可以在提供 DSL 片段时检查其完整性

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

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

因此,您捕获问题规范和实现知识,并将其应用于获取代码。抽象、规范、实现的重用,哇,……不仅仅是重用“代码”,许多人似乎仍然停留在 80 年代初期。代码真的很难重用。

与“子程序作为组件”相比,这确实是一个非常好的范例(目前这个术语的花哨术语是“内部 DSL”,它忽略了域符号、规范检查、实现和组合性元素)。

我认为你真的应该仔细阅读他的博士论文(与他的许多其他论文一起在此处访问)。它比预期的要平易近人。它没有充满神秘的数学;它充满了如何设计各种 DSL 的概念和演示。

于 2012-08-04T20:03:29.080 回答