特定领域的语言:简要介绍

特定领域语言(DSL),也称为微语言或小语言,是旨在关注特定领域的编程语言。 众所周知的DSL包括正则表达式,标记,可扩展标记语言(XML)和结构化查询语言(SQL)。 通用语言(GPL)的范围更广。 它们提供了一组适用于不同问题域的处理能力。 主流GPL是Java,C / C ++,Python和Scala。

为了更好地理解DSL和GPL之间的区别,请考虑以下示例。 C编程语言是GPL。 它提供了抽象和计算的基本形式。 如果有人想在C中定义一个整数矩阵会怎样? 必须声明指针数组,如下所示:

  int **矩阵; 

要访问矩阵的值,程序员将必须编写复杂的指针算术语句。 如果试图实现一种用于矩阵乘法的算法,则必须定义一个函数,该函数接受两个矩阵作为参数并返回结果。

  int ** multiply(int ** m_first,int ** m_sec); 

诸如C ++和Java之类的更高级的语言为创建抽象提供了更高级的方法。 因此有类和接口。 矩阵乘法算法的典型实现是使用称为乘法的方法创建了一个名为Matrix的类。 例如,在Java中,代码如下所示:

 公共类矩阵{ 
public void mupltiply(Matrix m){...}
}

与C版本相比,此方法有很多好处。 域抽象(即矩阵)直接声明为类型。 此外,它还包含乘法方法,该方法更接近于数学域的实际情况。

使用现代编程语言,可以轻松地创建复杂的库来声明和实现特定域的抽象,但是存在障碍。 必须始终使用该语言的语法。

现在考虑octave或mathematica,这是一种专门为处理该算法实现而创建的语言的工具。 这些DSL被大量用于仿真和数学建模。 是否有人考虑使用mathematica的语言来开发Web服务器或数据库管理系统? 这些语言仅关注数学领域。 在外面,它们没有任何意义。 mathematica和八度的语言是DSL。

本条目的其余部分结构如下: 首先,简要介绍了DSL的优缺点以及基本术语。 还介绍了三种流行的DSL,并附有一些实用的小例子。 下一节重点介绍DSL设计和实现模式。 最后,本条目以对编程语言嵌入的各种工作以及有关如何将所有这些方法组合起来以增强整体DSL设计和实现过程的基本要素的分析作为结尾。

其余条目可以在《计算机科学与技术百科全书》(泰勒和弗朗西斯)的最新版(2016)中找到。