域控 只能访问特定网址

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

DSL最佳做法

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

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

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

翻译自: https://opensource.com/article/20/2/domain-specific-languages

域控 只能访问特定网址

域控 只能访问特定网址_开发人员需要了解的特定于域的语言相关推荐

  1. ad域控查看ldap端口命令_工作笔记(一)LDAP和AD介绍以及使用LDAP操作AD域

    1. LDAP入门 1.1 定义 LDAP是轻量目录访问协议(LightweightDirectory Access Protocol)的缩写,LDAP标准实际上是在X.500标准基础上产生的一个简化 ...

  2. ifttt 编程开发_开发人员的5种IFTTT替代品

    ifttt 编程开发 就其本身而言,应用程序或网站只能做很多事情. 当它与其他服务一起工作时,它才真正强大. IFTTT(适用于"如果这样就那么做")将多个网站和服务整合到大多数人 ...

  3. mysql中groupby会用到索引吗_开发人员不得不知的MySQL索引和查询优化

    本文主要总结了工作中一些常用的操作及不合理的操作,在对慢查询进行优化时收集的一些有用的资料和信息,本文适合有 MySQL 基础的开发人员. 索引相关 索引基数 基数是数据列所包含的不同值的数量,例如, ...

  4. ios开发语言本地国际化_开发人员软件本地化最终语言指南

    ios开发语言本地国际化 There are lots of great guides out there for how to prep your product for international ...

  5. idea非开源安装指南_开发人员开源指南

    idea非开源安装指南 想为一个开源项目做贡献,但不知道从哪里开始? 在不熟悉的代码库中找到要解决的第一个问题似乎很困难-甚至在数百万行代码的情况下更是如此-但通常比看起来容易得多. 本文应该为您提供 ...

  6. 敏捷开发创始人_开发人员和技术创始人如何将他们的想法转化为UI设计

    敏捷开发创始人 by Simon McCade 西蒙·麦卡德(Simon McCade) 开发人员和技术创始人如何将他们的想法转化为UI设计 (How developers and tech foun ...

  7. ui设计师与开发人员的沟通_开发人员和设计师的27种免费资源

    ui设计师与开发人员的沟通 Design is the face of your product, service or content, without good designs, even if ...

  8. slack 使用说明_开发人员应使用的7个Slack集成

    slack 使用说明 如何使用集成和机器人自定义Slack来增强您的开发工作流程 毫无疑问,Slack正在逐渐成为现代办公通信的标准. 尽管您可能会说Slack从技术上讲与IRC没什么不同,但是精湛的 ...

  9. java开发工作经历_开发人员在寻找第二份工作时会经历什么

    java开发工作经历 Just a little background before we begin. I have been working as a mobile app developer f ...

最新文章

  1. Office 365发送超大附件
  2. python集合中的元素是否可以重复_python中集合中的元素是否可以重复
  3. IJ中 运行tomcat 配置
  4. 编写你的第一个 Django 应用,第 7 部分
  5. HDU2049(错列排序)
  6. java io加速器,Java 日期操作
  7. CF995A Tesla
  8. 【R图秀】情人节快乐!
  9. 云计算领导者,自主研发虚级化产品,华胜天成IVCS
  10. cocoStudio UI编辑器设置自定义字体
  11. 计算机组成原理数据通路实验报告,数据通路组成实验汇总_相关文章专题_写写帮文库...
  12. Laravel框架教程 入门篇(一)
  13. python爬虫之scrapy入门
  14. windows7 x64x86专业纯净版(usb3.0_nvme)2019.12.17
  15. docker容器status为create状态
  16. java访问邮箱 apache,关于apache common-mail发邮件,部分邮箱无法接收有关问题
  17. redis cluster master failover问题
  18. Palindrome Numer
  19. 端口号被占用的解决办法
  20. 纳米二氧化硅/分解酶/聚己内酯复合微球/银纳米颗粒修饰二氧化硅微球SERS基底的应用

热门文章

  1. 深度学习 AI入门-1
  2. 关于Etcd的几个问题
  3. springcloud是如何进行服务治理的
  4. Unity Tiling和offset的使用
  5. javascript在asp.net中运用
  6. 初识Xen-CentOS5.8_x64位系统安装xen文档(-)
  7. jquery eaayui 学习(四)datagrid
  8. 一位在项目上的好友求助
  9. VLAN设置实例全程解读
  10. php三要素,并发编程三要素:原子性,有序性,可见性