问题描述
当我遇到语义鸿沟以及我们必须如何弥合这一鸿沟以实现更好的软件开发时,我正在阅读有关系统编程的文章。
然后术语编程语言领域出现了,它显然弥合了语义鸿沟,但又进入了规范和执行鸿沟。有人可以用一个例子向我解释这一点吗?
解决方法
在特定应用程序领域工作时,您会想到该领域的概念 领域。例如,如果您正在为律师开发软件,您将工作 并考虑以下概念:法案、法规、法律、段落等。
另一方面,执行平台是软件最终运行的地方(一个 物理机或虚拟机)。在那个领域你有完全不同的 概念:堆栈、寄存器、指令等
某人或某物必须从应用程序中转换解决方案的模型 域到执行域。语义鸿沟是巨大的。一般用途 语言 (GPL) 通过使用更高级别的抽象来缓解问题 更容易使用(例如类、对象、方法、函数、参数、 集合)。因此,与其将解决方案直接翻译给机器, 你手动将它翻译成编程语言,桥接 规范差距,编译器机械地进行翻译 目标机器(或许多不同的机器)弥合执行差距。还是一个 在将概念从应用程序域转换为 GPL 方面需要进行大量手动工作。
领域特定语言 (DSL) 更进一步。它们基于概念 在应用程序域中找到。因此,DSL 中解决方案的规范 应该很容易 1:1 映射。申请之间没有差距 域和规范。 DSL 规范现已翻译(通常 在多个步骤中,例如DSL->GPL->machine code) 到目标执行平台 机械地。
关于弥合语义鸿沟的进一步阅读,我建议阅读论文 Martin Ward 和 Sergey Dmitriev 关于面向语言的编程主题。到 阅读更多关于 DSL 的内容,我推荐一本书“DSL 工程:设计, 实施和使用领域特定语言”,作者:Markus Voelter。