DSL和GPL的区别
DSL(Domain Specified Language)领域专用语言。
GPL(General Purpose Language)通用编程语言
GPL也表示 General Public License,表示GUN的的开源许可证,在此,我们只讨论作为语言的GPL。
DSL
要理解DSL 分类需要先理解一个概念。“元语言抽象”
它是指通过一种语言来构建另一种语言。比如 Java 就是构建在 C 上的语言。
其中,从什么语言构建而来,这种构建来源的语言称为“宿主语言”
根据是否从宿主语言构建而来,DSL 分为:
-
内部 DSL(从一种宿主语言构建而来)
-
外部 DSL(从零开始构建的语言,需要实现语法分析器等)
内部DSL
内部DSL,就是为了满足某些特定的功能需求,借助宿主语言而“抽离”出的一种言
比如我用过的: 正则regex表达式,spring-AOP切点的execution表达式、定时任务中的Cron表达式等
forexample
正则regex匹配验证-验证Email是否正确
ublic static void main(String[] args) {
// 要验证的字符串
String str = "service@xsoftlab.net";
// 邮箱验证规则
String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";
// 编译正则表达式
Pattern pattern = Pattern.compile(regEx);
// 忽略大小写的写法
// Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
// 字符串是否与正则表达式相匹配
boolean rs = matcher.matches();
System.out.println(rs);
}
AOP excution表达式
@Pointcut("execution (* com.shfdr.service..*.*(..))")
public void cut(){}
外部DSL
外部DSL可以理解是一种全新的语言,主要是为特别的领域来实现功能,并且需要特定的解释器或分析器来处理它。
但相反,内部DSL,比如正则regex它内部依据java.
关于领域的理解,我个人认为,其实是指的是针对不对业务需求,而有不同的限定
常接触的外部DSL,就是CSS和html了 ,它们为了把数据图形化展示而存在。
讲到特殊领域,css和html应该算是前台开发人员,或者UI需要掌握的一门,但因为会涉及到和后头交互,所以CSS和Html也成了后台人员必备的技能了。
GPL
通用编程语言指被设计为各种应用领域服务的编程语言。通常通用编程语言不含有为特定应用领域设计的结构。就是我们非常熟悉的 Objective-C、Java、Python 以及 C 语言等等
GPL也可以理解是我们实现编程的基础。