领域特定语言如何帮助弥合语义鸿沟?

How does domain specific language help in bridging semantic gap?

当我遇到语义鸿沟时,我正在阅读系统编程,以及我们如何弥合它以实现更好的软件开发。

然后出现了编程语言领域这个术语,它显然弥合了语义鸿沟,但却进入了规范和执行鸿沟。有人可以举个例子给我解释一下吗?

semantic gap

addition of PL domain

在特定应用领域工作时,您会考虑该领域的概念 领域。例如,如果您正在为律师开发软件,您将工作 并思考诸如法案、法规、法律、段落等概念

另一方面,执行平台是软件最终运行(a 物理机或虚拟机)。在那个领域你有完全不同的 概念:堆栈、寄存器、指令等

某人或某事必须从应用程序转换解决方案模型 域到执行域。语义鸿沟是巨大的。 General-purpose 语言(GPL)通过使用更高层次的抽象来缓解这个问题 更易于使用(例如 类、objects、方法、函数、参数、 collections)。因此,与其将解决方案直接翻译给机器,不如 你手动将它翻译成编程语言,桥接 规范差距,编译器机械地翻译成 目标机器(或许多不同的机器)弥合执行差距。还是个 将概念从应用程序域转换为 GPL 的大量手动工作。

Domain-specific 语言 (DSL) 更进一步。它们基于概念 在应用程序域中找到。因此,DSL 中解决方案的规范 应该很容易1:1映射。申请之间没有差距 域和规范。 DSL 规范现已翻译(通常 在多个步骤中,例如DSL->GPL->机器码)到目标执行平台 机械地。

要进一步阅读弥合语义鸿沟的主题,我建议阅读论文 关于 Language-Oriented 编程主题,作者是 Martin Ward 和 Sergey Dmitriev。到 总体上阅读有关 DSL 的更多信息,我建议阅读一本书“DSL Engineering: Designing, 实施和使用 Domain-Specific 语言”,作者:Markus Voelter。