文档章节

浅谈DSL

散关清渭
 散关清渭
发布于 2015/07/20 23:47
字数 727
阅读 56
收藏 1
DSL

领域专用语言是编程语言或规范语言的一种类型,致力于特定问题领域,特定问题表示技术,或特定解决技术。


领域专用语言的例子包括HTML、Verilog和VHDL硬件描述语言、用于符号数学的Mathematica和Maxima、关系数据库的SQL、创建解析器的YACC语法、指定词法分析器的正则表达式、创建图表语言的通用Eclipse模型系统、声音和音乐合成的Csound、GraphViz和GrGen的输入语言、用于图布局和图重写的软件包。

相反的是:

    1、相通用目的的编程语言,诸如C、Java 或Python

    2、 通用目的的模型语言诸如UML


一个领域专用语言被专门创建去解决一个特定领域里的问题,而不是打算能解决问题之外的。

与此相反,通用目的语言被创建用于解决许多领域的问题。领域也许是一个商业领域。


DSL是一种有着特定目的语言。DSL和脚本语言之间的区别在某种程度上是模糊的,但DSL常常缺乏低级功能,如文件系统访问、进程间控制和其他表征功能齐全的编程语言,脚本或其他等的功能。许多DSL不编译成字节码或可执行代码,但是编译成各种各样的媒体对象:GraphViz导出为PostScript,GIF,JPEG等 ,Csound编译成视频文件。


SQL代表一个有趣的例子:它被认为是一种DSL,因为它具体到一个特定领域,并且它常常被从其他应用程序里调用,但是SQL比其他许多脚本语言有更多的关键字和函数,通常被认为是它自己权利的一种语言,也许因为在编程中,数据库操作的普遍,在这个语言里需要是一个专家。


一个非常小的语言像一个小刀,可以用几千种不同的方式使用,从切食物到砍树。

一个DSL语言就像一个电钻:它是一个在特定上下文中有着广泛用途的强大工具。

一个通用语言是一个全集,有多种多样的工具用于执行各种各样的任务。

DSL应该被正看着他们工作台的程序员使用,意识到他们需要一个更好的钻子,发现一个独有的DSL确切地提供了


参考文献:

[0]  Domain-specific_language

https://en.wikipedia.org/wiki/Domain-specific_language


© 著作权归作者所有

共有 人打赏支持
上一篇: HDFS Federation
下一篇: Spark 配置解析
散关清渭
粉丝 24
博文 238
码字总数 166498
作品 0
东城
程序员
私信 提问
《浅谈JavaScript系列》系列技术文章整理收藏

《浅谈JavaScript系列》系列技术文章整理收藏 1浅谈JavaScript中面向对象技术的模拟 2浅谈javascript函数劫持[转自xfocus]第1/3页 3浅谈javascript 面向对象编程 4老鱼 浅谈javascript面向对...

开元中国2015
2015/07/27
1K
0
细说JavaScript数据类型及转换

细说JavaScript数据类型及转换 JavaScript数据类型 1.Boolean(布尔) 布尔:(值类型)var b1=true;//布尔类型 2.Number(数字) 数值:(值类型)var n1=3.1415926;//数值类型 n1.toFixed...

开元中国2015
2015/07/13
0
0
目录帖:​​​​​​​浅谈算法和数据结构

浅谈算法和数据结构: 一 栈和队列 浅谈算法和数据结构: 二 基本排序算法 浅谈算法和数据结构: 三 合并排序 浅谈算法和数据结构: 四 快速排序 浅谈算法和数据结构: 五 优先级队列与堆排序 浅谈...

安小乐
09/04
0
0
浅谈Gradle(二)与SourceSets

之前写过了一篇Gradle(一),那是根据别人写的文章总结写的,当时其实还是很多不懂,包括我现在对gradle的理解也其实还是似懂非懂,但是还是要写,每次写完之后包括再重新多看几次,都会有新...

kylinarm
06/04
0
0
第10章 使用 Kotlin 创建 DSL

第10章 使用 Kotlin 创建 DSL 使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的 DSL。相对于传统的API, DSL 更加富有表现力、更符合人类语言习惯。 本章就...

程序员诗人
2017/10/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker搞个wordpress

1.先把wordpress的镜像下载下来 docker pull wordpress 2.下载mysql docker pull mysql:lastest 3.启动mysql docker run --name blog -e root -d mysql:5.7 docker run --name some-mysql -e......

无极之岚
5分钟前
0
0
【宇润日常疯测-005】PHP 中的 clone 和 new 性能比较

clone和new本不应该放在一起比较,它们的作用是不同的。但可能有一些场景下,可以用clone也可以用new,那么这时候我们选哪个呢? 我编写了两个测试,第一个是声明一个空类,第二个是带构造方...

宇润
6分钟前
0
1
点击按钮弹出类似IOS 底部 dialog

implementation 'com.baoyz.actionsheet:library:1.1.7' 然后设置按钮点击监听,,调用下列代码即可 ActionSheet.createBuilder(this, getSupportFragmentManager()) ......

lanyu96
9分钟前
1
0
专访阿里云专有云马劲,一个理性的理想主义者

“我的故事都是和团队技术相关的,自己还真没有什么引人入胜的故事。”当马劲被问到能不能多分享些个人经历故事时他笑着说,我们就干脆怀着好奇聊了聊他和阿里云专有云一路走来的故事。 马劲...

阿里云官方博客
41分钟前
1
0
java环形缓冲区

import java.util.ArrayList;import java.util.List;/** * * 环形缓冲区<br/> * 一. 写数据:<br/> * 1. push: 当数据已写满时返回false,否则可以正常写入返回true<br/>......

whoisliang
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部