James Neighbors 提到 DSL 是一种软件重用的方法,但没有解释原因。他只是说 DSL 可能是比可重用组件库更好的方法。我无法理解这种关系以及在软件重用中使用 DSL 可以带来什么好处?
同样在 Mernik 的何时和如何开发 DSL 论文中,他提到 DSL 可以作为应用程序生成器的输入语言,而应用程序生成器是 Krueger 讨论的重用软件的一种方法。
谁能告诉我这些关系或 DSL 如何成为实现软件重用的有效方法?非常感谢你的帮助
James Neighbors 提到 DSL 是一种软件重用的方法,但没有解释原因。他只是说 DSL 可能是比可重用组件库更好的方法。我无法理解这种关系以及在软件重用中使用 DSL 可以带来什么好处?
同样在 Mernik 的何时和如何开发 DSL 论文中,他提到 DSL 可以作为应用程序生成器的输入语言,而应用程序生成器是 Krueger 讨论的重用软件的一种方法。
谁能告诉我这些关系或 DSL 如何成为实现软件重用的有效方法?非常感谢你的帮助
James 非常清楚为什么 DSL 是软件重用的好方法(他和我一起在加州大学欧文分校):
他的 Draco 系统实现了所有这些概念,接受 DSL 描述,然后是一个 DSL 实例,然后 Draco 通过应用实现知识片段(“细化规则”)将其从高级 DSL 映射到低级 DSL将其编译为低级代码/在较低级别的 DSL 中进行优化,然后重复,直到您最终以足够低的抽象级别达到 DSL,以提供给传统编译器(例如,LISP 或 C 或 Ada 或 COBOL 或......)。
这是他的细化和优化范式,它允许一组 DSL 通过层次结构层细化为低级代码。因此,您可以获得分层域的可组合性,并且可以在非常高的抽象级别上工作。
因此,您捕获问题规范和实现知识,并将其应用于获取代码。抽象、规范、实现的重用,哇,……不仅仅是重用“代码”,许多人似乎仍然停留在 80 年代初期。代码真的很难重用。
与“子程序作为组件”相比,这确实是一个非常好的范例(目前这个术语的花哨术语是“内部 DSL”,它忽略了域符号、规范检查、实现和组合性元素)。
我认为你真的应该仔细阅读他的博士论文(与他的许多其他论文一起在此处访问)。它比预期的要平易近人。它没有充满神秘的数学;它充满了如何设计各种 DSL 的概念和演示。