领域专用语言
翻译:http://en.wikipedia.org/wiki/Domain-specific_language
在软件开发中,领域专用语言(domain-specific language,DSL)是编程语言或者规范语言的一种类型,领域工程致力于一个特定问题领域,一个特定的问题表示技术,或者一个特定的解决技术。
特定目的的编程语言和所有种类的模型/规范语言总是存在于计算机时代,但是由于领域专用模型的崛起,这个属于变的比较流行。
领域专用语言的例子包括HTML、类铅笔绘图的Logo、Verilog和VHDL硬件描述语言、矩阵编程的Mata、用于符号数学的Mathematica和Maxima、电子表格公式和宏、关系数据库的SQL、创建解析器的YACC语法、指定词法分析器的正则表达式、创建图表语言的通用Eclipse模型系统、声音和音乐合成的Csound、GraphViz和GrGen的输入语言、用于图布局和图重写的软件包。
相反的是:
1、相通用目的的编程语言,诸如C、Java 或Python
2、 通用目的的模型语言诸如UML
创建一个领域专用语言(软件支持的话)是值得的,如果语言允许特定类型的问题或解决方法比现存语言表达更清楚,则是允许的,且讨论中的问题类型经常充分再现。面向语言的编程(Language-Oriented Programming)认为特殊用途语言的创建是为了表达问题解决过程中问题的一个标准部分。
综述
一个领域专用语言被专门创建去解决一个特定领域里的问题,而不是打算能解决问题之外的(尽管在技术上是可行的)。与此相反,通用目的的语言被创建用于解决许多领域的问题。领域也许是一个商业领域。一些商业领域的例子包括:
在一个大型保险企业里人寿保险政策自行开发的领域专用语言
1、 作战模拟的DSL
2、 工资计算的DSL
3、 记账的DSL
DSL某些时候,在微小编程语言和脚本语言之间,常被类似于编程库的方式去使用。在这些感念之间的边界相当模糊,很像脚本语言和通用语言之间的边界。
设计与实现
在设计和实现中,DSL是一种有着特定目的语言。一个DSL可以是可视化编程语言的一种,诸如由通用Eclipse模型系统创建的;编程抽象,诸如Eclipse模型框架,或文本语言。例如,命令行公用程序 grep有一个正则表达式语法,在一个文本行里进行模式匹配。Sed公用程序为匹配和替换正则表达式定义了一个语法。常常,这些微型语言可以在一个shell里一起使用,用于执行比较复杂的编程任务。
在DSL和脚本语言之间的线在某种程度上是模糊的,但是DSL常常缺乏低级功能,如文件系统访问、进程间控制和其他表征功能齐全的编程语言,脚本或其他等的功能。许多DSL不编译成字节码或可执行代码,但是编译成各种各样的媒体对象:GraphViz导出为PostScript,GIF,JPEG等 ,Csound编译成视频文件。一个像SQL的计算机语言代表一个有趣的例子:它被认为是一种DSL,因为它具体到一个特定领域(在SQL's例子里,访问和管理关系数据库),并且它常常被从其他应用程序里调用,但是SQL比其他许多脚本语言有更多的关键字和函数,通常被认为是它自己权利的一种语言,也许因为在编程中,数据库操作的普遍,在这个语言里需要是一个专家。更近一步模糊了这个线,许多DSL有暴露的API,可以从其他编程语言访问,而不需要破坏执行流程,可以被趘程序库操作。
编程工具
一些DSL随着时间去扩大,包括了全功能的编程工具,其更复杂化了一个语言是DS或不是这个问题。一个好的例子是函数式语言XSLT,专为转换一个XML图标到另一个,已经从它的最初功能呢过扩展到了各种形式的文件系统交互,字符串和日期操纵和数据类型。
在模型驱动工程里,像OCL的许多DSL例子,OCL是一种带有断言的装饰模型语言或QVT,一种领域规范转换语言。然而,像UML这样的语言是典型的通用模型语言。
简而言之,一个类比也许是有用的:一个非常小的语言像一个小刀,可以用几千种不同的方式使用,从切食物到砍树。一个DSL语言就像一个电钻:它是一个有着广泛用途的强大工具,但是在一个特定的上下文,换句话,putting holes in things。一个通用语言是一个全集,有多种多样的工具用于执行各种各样的任务。DSL应该被正看着他们工作台的程序员使用,意识到他们需要一个更好的钻子,发现一个独有的DSL确切地提供了
DSL话题
使用模式
DSL有几种使用模式:
1、 处理独立的工具,通过直接的用户操作调用,常常是命令行或一个Makefile
2、 DSL是使用编程语言宏系统实现的,在编译时或读出时,其被转换或扩展为一个主机通用的语言
3、 嵌入式DSL,被作为库实现,其采用了它们主机通用语言的语法或一个子集。同时增加了DSL元素(数据类型,惯例,方法,宏等)
4、 在运行时,从用通用语言编写的程序中调用,如C或Perl,去执行一个特定的功能,常常返回操作结果到“主机”编程语言,用于进一步处理,一般请困高相爱,为了DSL,一个解释器或者虚拟机需要被嵌入到主机应用程序
5、 DSL被嵌入到用户应用程序中,(1)用于执行应用程序用户编写的代码;(2)由应用程序动态产生;(3)前两个
许多DSL都有多于一种的使用方式
设计目标
把DSL方法应用到软件工程涉及到风险和机会。设计良好的DSL设法在这两者之间找到适当的平衡。
与通用语言相比,DSL有重要的设计目标
1、 DSL不全面
2、 DSL在他们的领域中有更富有表现力
3、 依据下述的主观定义,DSL应该存在最小容易
一个程序的冗余被定义为文本插入、删除或替换必须实现需求里一个独立变化点的平均数。对于一个语言,这是程序问题域的平均。这个度量是有用的,因为平均数越小,由不完全实现变化所引入的bug就可能越少。
风格
在编程中,风格是由程序员强加去控制通用开发任务的方法,比如:
1、 确保在床后关闭前保存数据
2、 在指导昂贵的测试前,执行廉价测试可以排除昂测试的需要
3、 当命令行参数变化时,编辑代码,因为它们影响程序的行为
通用编程语言几乎不支持这些风格,但是DSL可以描述它们,例如:
1、 脚本可以自动保存数据
2、 一个智能测试装置可以学习哪些是好的测试
3、 DSL可以参数化命令行的输入
DSL例子
1、 Unix shell脚本
2、 ColdFusion 标记语言
3、 Erlang OTP
4、 FilterMeister
5、 MediaWiki 模板
6、 软件工程用例
7、 Metacompilers
8、 虚幻引擎和其他游戏
9、 规则引擎策略自动化
10、 统计模型语言
优势与劣势
一些优势:
1、DSL允许解决方案以习语或者问题域的抽象层面来表达。这个思想是领域专家他们自己可以理解,修改,常常甚至开发出了DSL程序。然而,这是很少的情况
2、 自我文档型代码
3、 DSL提高了质量,生产率,可靠性,维护性,移植性和重用性
4、 DSL允许在域级别校验。只要语言构造是安全的,任何使用它们写的句子都被认为是安全的
一些劣势:
1、学习新语言的成本 vs 它有限的适用性
2、 设计,实现和维护一个DSL的成本和用来开发所需的工具
3、 查找,设置和维护正确的范围
4、 在域规范和通用编程语言构造之间的平衡取舍是困难的
5、 与手工编码软件相比,处理器效率的潜在损失
6、 类似非标准DSL的扩散,例如,保险公司A使用DSL对抗保险公司B使用DSL
7、 非技术域专家发现他们自己写或修改DSL程序是困难的
8、 与IT系统的其他组件集成DSL的难度增加
9、 在一个特定的DSL,专家供应不足,倾向于增加了劳动力成本。
10、 很难找到代码例子
相关推荐
【标题】"PHP版本的Sinatra极其轻量优雅的web领域专用语言框架"指的是一个名为Pinatra的PHP框架,它是对Ruby的Sinatra框架的一种实现。Sinatra在Ruby世界里以其简洁、高效的语法而著名,使得开发者能快速构建Web应用...
本书是第一本领域专用语言(DSL)的实战类图书,它面向真正的实践者,是一本让奋战在开发第一线的实干家备感实用的专著! 《领域专用语言实战》基于一系列JVM语言(Java、Ruby、Groovy、Scala和Clojure),分析了...
Python-Selda是一个创新的工具,它为Python开发者提供了一种类型安全、高级的SQL领域特定语言(DSL),使得与关系数据库的交互变得更加简洁和高效。Selda的设计灵感来源于Haskell中的Selda库,它将SQL语句直接嵌入到...
【车轴:用于科学云计算和可视化的车桥领域专用语言】 车轴(Axle)是一种专为科学云计算和可视化设计的编程语言,它基于Scala,旨在提供强大的工具和框架,帮助科研人员和数据科学家更高效地进行计算和数据探索。...
在深入分析《基于C语言的自定制脚本语言设计与研究》这一文档之前,需要明确几个核心概念,包括C语言、自定制脚本语言、领域专用语言(DSL),以及语言设计的关键要素。本文档将探讨如何利用C语言作为基础,设计一种...
特定领域的数学语言 提供与Chalmers和GU的BSc课程相关的开源材料。 主要课程主页位于Canvas LMS中:( ) 课程代码: / 消息 完整课程手册的 和录制的讲座(大多数使用瑞典语,有些使用英语) 2020年1月21日星期...
使用的领域特定语言和概率编程语言的后端。 你想做出贡献? 如果您认为自己有一些相关技能并且对贡献有所兴趣,请联系并在Github上发表文章。 贡献者指南 该项目遵循 ,除了以下细微变化: master分支包含任何...
语言规范草案v0.3.0 我们回顾一个简单的案例。 然后,我们详细介绍该语言的其余部分。快速入门:L4示例你好白菜假设白菜只能在满月的那天出售-除非农业主管批准豁免。 买方有权在购买后的三周内退还卷心菜,以获得90...
1. **CMM语言**:CMM可能代表一种特定的编程模型或领域专用语言(DSL),用于解决特定问题。由于没有更多的信息,我们只能推测CMM是一种为了简化某类任务而设计的语言,可能是为了系统配置、数据处理或某种特定计算...
在LISP编程中,代码和数据的可互换性使得开发者可以通过宏系统将自定义的新语法或领域专用语言嵌入到LISP中,从而实现高度的可扩展性和灵活性。同时,LISP提供了读取-求值-输出循环(REPL)环境,便于程序员进行交互...
Equelle 是一个领域专用语言,用于通过高级语法实现 PDE 系统模拟。 标签:Equelle
此外,ChatGPT 技术对于含有隐喻、讽刺、领域专用语言等复杂语言形式的情感识别和推理也存在困难。 四、ChatGPT 技术的发展方向 为了进一步发展 ChatGPT 技术,我们需要加强数据质量的监测与控制,增加多语种、多...
虽然基于接口的多领域建模方法可以利用不同仿真软件之间的接口实现集中式协同仿真,但这种方法依赖于商业软件公司的专用接口,限制了其研究潜能。 Modelica语言和基于该语言的仿真平台的提出,为解决多领域建模问题...
2. **DSL(Domain-Specific Language)领域专用语言**:例如 P4 语言等,这些语言专门针对特定领域的需求进行了优化,可以简化编程流程,提高开发效率。 3. **三维集成与近存计算**:通过三维集成技术减少信号传输...
介绍:一个用python实现的科学计算包。包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、...Quant DSL 是财务定量分析领域专用语言
CMM是一种特定的编程语言,它的全称可能指的是Controlled Modeling Language或某种特定的领域专用语言。在这个场景中,我们讨论的是针对CMM语言的解析工具——CMM-parser。一个解析器是编程语言处理的核心部分,它...
### 汽车领域专用语言(ADLs) 文档提到了几种用于汽车架构建模的专用语言: - **Automotive Modeling Language (AML)** - **COmponent Language (COLA)** - **EAST-ADL** - **Timing Augmented Description Language...
随着领域专用语言(DSL)的发展,Web服务可视化的研究变得日益重要。 DSL是一种针对特定领域的编程语言,它具有高度的抽象性和简洁性,专门用于解决特定领域的问题。DSL通常较小且注重声明,而非复杂的规则或命令,...