博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
域控 只能访问特定网址_开发人员需要了解的特定于域的语言
阅读量:2523 次
发布时间:2019-05-11

本文共 2692 字,大约阅读时间需要 8 分钟。

域控 只能访问特定网址

(DSL)是一种旨在在特定域的上下文中使用的语言。 域可以是业务上下文(例如,银行,保险等)或应用程序上下文(例如,Web应用程序,数据库等)。相反,通用语言(GPL)可以用于多种商业问题和应用范围。

DSL不会试图让所有人满意。 相反,它是为有限的适用性和使用范围创建的,但是它具有足够的功能来表示和解决该领域中的问题和解决方案。 DSL的一个很好的例子是HTML。 它是Web应用程序域的一种语言。 例如,它不能用于数字运算,但是很明显,HTML在网络上的使用广泛。

GPL创建者不知道该语言可能在何处使用或用户打算使用该语言解决的问题。 因此,使用通用构造创建GPL,这些通用构造可能可用于任何问题,解决方案,业务或需求。 Java是GPL,因为它用于台式机和移动设备上,并且嵌入银行,金融,保险,制造等行业的Web中。

分类DSL

在DSL世界中,有两种类型的语言:

  • 特定领域语言(DSL):编写或显示DSL的语言
  • 主机语言:执行或处理DSL的语言

用不同语言编写并由另一种主机语言处理的DSL称为外部 DSL。

这是SQL中的DSL,可以使用主机语言进行处理:

SELECT account     
FROM accounts
WHERE account
=
'123'
AND branch
=
'abc'
AND amount
>=
1000

为此,可以使用定义的词汇和格式以英语编写DSL,并可以使用诸如ANTLR的解析器生成器以另一种宿主语言处理DSL:

if smokes then increase premium by 10%

如果DSL和主机语言相同,则DSL类型为internal ,其中DSL以该语言的语义编写并由其处理。 这些也称为嵌入式 DSL。 这是两个例子。

  • 可以在Bash引擎中执行的Bash DSL:
    if today_is_christmas; then apply_christmas_discount; fi
    这是像英语一样写的有效Bash。
  • 用GPL(如Java)编写的DSL:
    orderValue        
    = orderValue
                    .
    applyFestivalDiscount
    (
    )
                    .
    applyCustomerLoyalityDiscount
    (
    )
                    .
    applyCustomerAgeDiscount
    (
    )
    ;
    这使用流利的风格,并且像英语一样可读。

是的,DSL和GPL之间的界限有时会模糊。

DSL示例

DSL使用的某些语言包括:

  • 网页:HTML
  • Shell:*,nix的sh,Bash,CSH等。 MS-DOS,Windows终端,Windows PowerShell
  • 标记语言:XML
  • 建模:UML
  • 数据管理:SQL及其变体
  • 商业规则:流口水
  • 硬件:Verilog,VHD
  • 构建工具:Maven,Gradle
  • 数值计算和仿真:MATLAB(商业),GNU Octave,Scilab
  • 各种类型的解析器和生成器:Lex,YACC,GNU Bison,ANTLR

为什么是DSL?

DSL的目的是捕获或记录一个域的要求和行为。 对于域中的特定方面(例如,金融商品交易),DSL的使用范围甚至更窄。 DSL将业务和技术团队召集在一起。 这并不意味着DSL仅用于商业用途。 例如,设计人员和开发人员可以使用DSL来表示或设计应用程序。

DSL也可以用于生成已解决域或问题的源代码。 但是,从DSL生成代码并不是强制性的,因为其主要目的是领域知识。 但是,使用代码时,代码生成是领域工程中的一个重要优势。

DSL的优缺点

从好的方面来说,DSL具有捕获域属性的强大功能。 另外,由于DSL很小,因此易于学习和使用。 最后,DSL为领域专家以及领域专家和开发人员之间提供了一种语言。

不利的一面是,DSL仅在预期的领域和目的内使用。 此外,DSL可能会有学习曲线,尽管它可能不会很高。 另外,尽管使用用于DSL捕获的工具可能会有优势,但它们并不是必不可少的,并且开发或配置此类工具是一项额外的工作。 最后,DSL创建者需要领域知识以及语言开发知识,而个人很少同时拥有这两种知识。

DSL软件选项

  • Xtext: Xtext支持DSL的开发,并与Eclipse集成在一起。 它使代码生成成为可能,并且已被多种开源和商业产品用来提供特定功能。 (多用途农业数据系统)是一个基于Xtext的有趣概念,用于“农业活动的建模和分析”(但是,该项目似乎不再有效)。
  • JetBrains MPS: JetBrains MPS是用于创建DSL的集成开发环境(IDE)。 它称自己为投影编辑器,该编辑器将文档存储为其基础抽象树结构。 (此概念也被Microsoft Word等程序使用。)JetBrains MPS还支持将代码生成为Java,C,JavaScript或XML。

DSL最佳做法

想使用DSL吗? 这里有一些提示:

  • DSL不是GPL。 尝试解决最终领域中有限的问题。
  • 您不需要定义自己的DSL。 那将是乏味的。 在网站上您需求的现有DSL,其中列出了金融领域的DSL。 如果找不到合适的DSL,则可以定义自己的DSL。
  • 最好使DSL“像英语一样”而不是过于技术化。
  • 从DSL生成代码不是强制性的,但完成后将提供显着的生产优势。
  • DSL被称为语言,但与GPL不同,它们不必是可执行的。 可执行不是DSL的意图。
  • DSL可以用文字处理器编写。 但是,使用DSL编辑器会使语法和语义检查更加容易。

如果您现在正在使用DSL或计划将来使用DSL,请在评论中分享您的经验。

翻译自:

域控 只能访问特定网址

转载地址:http://gaczd.baihongyu.com/

你可能感兴趣的文章
阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_02.三层架构和ssm框架的对应关系
查看>>
阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_03.jdbc操作数据库的问题分析
查看>>
阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_04.mybatis概述
查看>>
阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_05.mybatis环境搭建-前期准备
查看>>
阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_06.mybatis的环境搭建
查看>>
阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_07.环境搭建的注意事项
查看>>
阶段3 1.Mybatis_02.Mybatis入门案例_3.mybatis注解开发和编写dao实现类的方式
查看>>
阶段3 1.Mybatis_02.Mybatis入门案例_2.mybatis入门案例中的设计模式分析
查看>>
阶段3 1.Mybatis_03.自定义Mybatis框架_2.自定义Mybatis的分析-创建代理对象的分析
查看>>
阶段3 1.Mybatis_03.自定义Mybatis框架_1.自定义Mybatis的分析-执行查询所有分析
查看>>
阶段3 1.Mybatis_03.自定义Mybatis框架_4.自定义mybatis的编码-解析XML的工具类介绍
查看>>
阶段3 1.Mybatis_03.自定义Mybatis框架_3.自定义mybatis的编码-根据测试类中缺少的创建接口和类...
查看>>
阶段3 1.Mybatis_03.自定义Mybatis框架_5.自定义Mybatis的编码-创建两个默认实现类并分析类之间的关系...
查看>>
阶段3 1.Mybatis_03.自定义Mybatis框架_6.自定义Mybatis的编码-实现基于XML的查询所有操作...
查看>>
阶段3 1.Mybatis_03.自定义Mybatis框架_7.自定义Mybatis的编码-实现基于注解配置的查询所有...
查看>>
阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_01maven概述
查看>>
阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_03maven一键构建概念
查看>>
阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_02maven依赖管理的概念
查看>>
阶段2 JavaWeb+黑马旅游网_15-Maven基础_第2节 maven的安装和仓库种类_05仓库的种类和彼此关系...
查看>>
阶段2 JavaWeb+黑马旅游网_15-Maven基础_第4节 maven生命周期和概念模型图_08maven生命周期...
查看>>