[综述]领域特定语言(Domain-Specific Language)的概念和意义
领域特定语言(Domain Specific Language, DSL)是一种为解决特定领域问题而对某个特定领域操作和概念进行抽象的语言。领域特定语言只是针对某个特定的领域,这点与通用编程语言(General purpose Language)不同,如Java既可以适用于网站开发,也可以适用于手机开发。一旦领域特定语言离开了相关领域,它就会变得不适用。但针对某个特定的领域,领域特定语言能很自然地方便地表述问题,也常常比通用编程语言更快地解决问题。
Martin Fowler 在《领域特定语言》一书中认为:
“Domain-Specific Language: a computer programming language of limited expressiveness focused on a particular domain.”
他突出了四个关键因素:一是计算机编程语言。它是人类设计出的让计算机执行的命令。故其除了要让人容易理解以外,必须要可执行;二是具有语言的表达能力。语法不能是一个个单独的表达式,必须有一定的组合表达的能力;三是有限的表达能力。它不需要像通用程序语言那样宽的表达能力,只需要它支持某个特定的领域即可;四是关注某个特定领域。只有关注某个特定的领域,有限的表达能力才能发挥最大的作用。第三点与第四点是不能割裂的。
领域特定语言有时候也称为第四代语言,它们常是描述式的,只是说明想要什么,而不像通用编程语言(如 C, Java)那样,要详细写出一步步如何做和实现。Debasish Ghosh总结了两点领域特定语言与其它高级编程语言的差异。一是领域特定语言为用户提供了更高层次的抽象。这使得用户不用去关心诸如特殊的数据结构或低层次实现等细节,而仅仅去着手解决当下的问题即可。二是领域特定语言对于其关注的领域提供了有限的词汇。它不用像通用语言那样为特定的建模领域提供额外的帮助。这两点使得领域特定语言更合适非程序员的领域专家使用。也正是这些特性,通过领域特定语言,能在更高抽象级直观地表达应用问题,能在领域级完成需求确认,实现有效的复用,又能通过工具支持和领域知识复用,使许多从规范说明到可执行代码的转换任务能实现自动化,让应用专长和先进技术能在更广范围内一致使用,避免因开发人员技能水平差异带来大的起伏,从而显著提高开发效率和质量,加快产品开发速度,满足客户多变的需求。
在软件工程领域,随着需求和技术的不断更新,领域特定语言的种类也越来越多。以下是一些比较常见的领域特定语言:用于描述Web 页面的 HTML,用于构造软件系统的Ant、RAKE、MAKE, 用于表达语法的 BNF 范式,语法分析器生成语言 YACC、Bison、ANTLR ,用于数据库结构化查询的 SQL,用Ruby的行为驱动测试语言的RSpec, Cucumber,用于描述样式表的CSS,专用的排版系统LaTex等。由Eelco Visser的团队设计的WebDSL[22]语言是Web系统领域最完善的设计,现已拥有了一套全面的工具集。
在互联网环境中,海量用户的个性化需求不断涌现,如何迅速地满足大量最终用户的个性化需求,是软件工程领域面临的一个重要问题,而最终用户编程是有效解决上述问题的方法之一。让最终用户来直接编程可能存在很多问题,如安全性、一致性等,另外最终用户编程时可能面临很多障碍,比如程序的设计,组件的选择等。
为了有效地辅助最终用户编程,国内外学者针对该领域做了大量研究,并提出了一些技术和方法。最终用户编程的主要技术有三种:程序合成、模型驱动开发、sloppy编程。下面分别对这三种技术进行分析。
1)基于程序合成的最终用户编程主要有两种形式,示例编程和演示编程。演示编程是指通过演示一个例子来指明程序的操作和逻辑,即用户演示一个具体的例子,系统通过录制用户的操作序列来生成程序。示例编程是指根据用户的输入输出样例及输入输出样例间的内在逻辑关系来生成目标程序。
2)基于可视化DSL语言的最终用户编程使用的是模型驱动开发的方法。Scratch是由MIT(麻省理工学院)研究组成员共同开发完成的一套新的程序语言, 它主要使用了基于DSL的面向驱动的开发方法。Scratch是属于“积木组合式”的程序语言,采用拖曳、组合的方式来设计程序。另外谷歌推出的一款软件叫App Inventor,App Inventor 主要是让使用者可以跳过那些看不懂的程序代码,直接利用 App Inventor 中的模板来“拼”软件。
3)有文献层提出了一种sloppy编程,目前基于网站的sloppy编程系统主要有以下几种:a)sloppy web command line b)Koala c)Inky(Internet keyword的简写)。以上系统主要针对门户网站,基于关键字的方式来实现sloppy编程。另外文献还分析了针对java集成开发环境的sloppy编程。Quack Eclipse Plugin(QEP)是eclipse的一个插件,这个插件集成了eclipse的java 编辑器,根据用户输入的关键字,可以提供自动补全的功能。Google Calendar的 Quick Add也是基于关键字的一种sloppy编程。用户可以通过输入一些简单的自然语言,在日历上快速地添加日程安排的事件。它主要指将用户的输入解析为表单的一些参数,通过表单自动填充来简化用户添加日程安排时繁琐的表单输入。
综上所述,目前面向最终用户的编程的研究尚处于起步阶段,能够同时满足实际领域的功能描述能力和面向最终用户编程的DSL很少,研究所涉及的主要领域有儿童游戏,手机,门户网站等。
[综述]领域特定语言(Domain-Specific Language)的概念和意义的更多相关文章
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)
前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言1
在Visual Studio 2012中使用VMSDK开发领域特定语言(一) 前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modelin ...
- 七周七语言之用Io编写领域特定语言
如果你想获得更好的阅读体验,可以前往我在 github 上的博客进行阅读,http://lcomplete.github.io/blog/2013/06/05/sevenlang-io/. Io 语言 ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)
本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...
- 正则表达式与领域特定语言(DSL)
如何设计一门语言(十)——正则表达式与领域特定语言(DSL) 几个月前就一直有博友关心DSL的问题,于是我想一想,我在gac.codeplex.com里面也创建了一些DSL,于是今天就来说一说这个事情 ...
- Domain-specific language 领域特定语言
https://en.wikipedia.org/wiki/Domain-specific_language A domain-specific language (DSL) is a compute ...
- 如何设计一门语言(十)——正则表达式与领域特定语言(DSL)
几个月前就一直有博友关心DSL的问题,于是我想一想,我在gac.codeplex.com里面也创建了一些DSL,于是今天就来说一说这个事情. 创建DSL恐怕是很多人第一次设计一门语言的经历,很少有人一 ...
- DSL-领域特定语言(英语:domain-specific language、DSL)
领域特定语言(英语:domain-specific language.DSL)指的是专注于某个应用程序领域的计算机语言.
- Android特定语言 Xtendroid
Xtendroid是一款Android的领域特定语言,它大大降低样板代码,同时提供巨大的工具支持.Xtendroid利用Xtend transpiler实现,它的特点是能够在Java代码编辑或编译期间 ...
随机推荐
- PHP — 用PHP实现一个双向队列
1.简介 deque,全名double-ended queue,是一种具有队列和栈的性质的数据结构.双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行.双向队列(双端队列)就像是一个队 ...
- 6 款国外开源web oa办公系统(转)
国外的开源产品较多,而且大多提供免费的社区版本,oa办公系统也不例外. 1.eGroupware eGroupware是一个多用户,在以PHP为基础的API上的定制集为基础开发的,以WEB为基础的工作 ...
- VS调试错误:“没有可用于当前位置的源代码”的解决方案
今天,有朋友在问为什么我在调试的时候会出现"没有可用于当前位置的源代码"的错误呢? MSDN上的说法:没有可用于当前位置的源代码,项目不包含您试图查看代码的源代码.原因通常是双击了 ...
- java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)(ERR=12505)(ERR
dbc 链接orcal出错 java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)( ...
- BZOJ 1729: [Usaco2005 dec]Cow Patterns 牛的模式匹配
Description 约翰的N(1≤N≤100000)只奶牛中出现了K(1≤K≤25000)只爱惹麻烦的坏蛋.奶牛们按一定的顺序排队的时候,这些坏蛋总会站在一起.为了找出这些坏蛋,约翰让他的奶牛排好 ...
- HDU1395+快速幂
#include<stdio.h> int fast_pow( int a,int b,int mod ){ ; ){ == ){ res = res*a%mod; } a = a*a%m ...
- easyui源码翻译1.32--Resizable(调整大小)
前言 使用$.fn.resizable.defaults重写默认值对象 下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 Resiz ...
- 使用phpexecel类库导出数据
公司要求做一个功能:将数据库里的数据导出,并生成excel文件. 于是百度了下,集大牛之所长,加上自己之所长,做出了整理,并分享. 目标:使用phpexcel类库生成xml文件,并下载. 步骤一:下载 ...
- 《ArcGIS Engine+C#实例开发教程》第二讲 菜单的添加及其实现
原文:<ArcGIS Engine+C#实例开发教程>第二讲 菜单的添加及其实现 摘要:在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下.在“属性”选项卡中,我们 ...
- cto
CTO(首席技术官)英文Chief Technology Officer,即企业内负责技术的最高负责人.这个名称在1980年代从美国开始时兴.起于做很多研究的大公司,如General Electric ...