当我读到系统编程时,我发现了语义鸿沟,以及我们如何为更好的软件开发搭建桥梁。
然后出现了编程语言领域这一术语,它显然弥合了语义鸿沟,但同时也填补了规范和执行的鸿沟。有没有人可以举个例子给我解释一下?
发布于 2021-02-02 20:32:01
当在特定的应用程序域中工作时,您需要考虑该域的概念。例如,如果您正在为律师开发软件,您将在以下概念中工作和思考:法案、法规、法律、段落等。
另一方面,执行平台是软件最终运行的地方(物理机或虚拟机)。在那个领域,你有完全不同的概念:栈、寄存器、指令等。
必须有人或某事将解决方案的模型从应用程序域转换到执行域。语义上的差距是巨大的。通用语言( General-purpose languages,GPLs)通过使用更容易使用的更高级别的抽象(例如,类、对象、方法、函数、参数、集合)来缓解这个问题。因此,不是直接将解决方案翻译到机器上,而是手动将其翻译成编程语言,弥合规范差距,然后编译器机械地将其翻译到目标机器(或许多不同的机器),以弥补执行差距。在将概念从应用程序领域转换为GPL时,仍然需要大量的手动工作。
领域特定语言(DSL)更进一步。它们基于应用程序域中的概念。因此,DSL中的解决方案规范应该是简单的1:1映射。应用程序域和规范之间没有差距。DSL规范现在被机械地翻译(通常在多个步骤中,例如DSL->GPL->机器码)到目标执行平台。
要进一步阅读有关弥合语义鸿沟的主题,我建议阅读Martin Ward和Sergey Dmitriev关于面向语言的编程主题的论文。要阅读更多关于领域特定语言的一般知识,我推荐Markus Voelter的一本书"DSL工程:设计、实现和使用领域特定语言“。
https://stackoverflow.com/questions/66003306
复制相似问题