Sri*_*ddi 100 dsl terminology
我想我正在寻找某种介绍,看看是否有人使用过它.使用它有什么特别的好处吗?
维基百科:
域特定语言(DSL)是专用于特定问题域的编程语言或规范语言,特定问题表示技术和/或特定解决方案技术.
任何人都可以提供有关如何实现它或在特定场景中它如何有用的具体示例吗?
Cha*_*tin 106
域特定语言是为处理特定域或关注点而编写的语言.其中有很多,比如make,ant和rake用于描述软件构建,或lexx和yacc用于语言构建.近年来,它们变得流行,因为有些东西结合起来使它们更容易构建.其中最重要的是Ruby的日益普及,它具有一些功能,可以轻松构建新的DSL.
Martin Fowler是这个想法的重要支持者,就像这里一样.
rgz*_*rgz 60
您可以将DSL视为用更通用的编程语言编写的函数的过于复杂的参数.真正的编程语言解析DSL代码,并做一些事情吧,通常情况下,DSL代码只专注于什么,你想做的事,和更大的系统计算出的如何.
DSL的例子包括所有查询语言(SQL,XPath,...),所有模板语言(Django,Smarty,...),shell脚本,特别包括像twill这样的东西,一个命令驱动的Web浏览器(主要用于自动化测试) ),数据存储和交换语言(XML,YAML,...),以及LaTex,HTML或CSS等文档语言.
一些具有非常灵活语法的语言(如TCL和Lisp)将其DSL直接构建到语言中......如果可能的话.大多数语言使用字符串,通常从外部文件加载.
使用它们有什么特别的好处吗?将它们用于预期目的是非常有利的,你将不知不觉地转向它们,就像你一直在使用(我推测)SQL或HTML而不将它们视为DSL.
我敢说有足够的DSL用于你可能需要的任何应用程序; 你几乎肯定不需要学习如何编写自己的.
小智 10
一切都是DSL ......
汇编程序:MOV R1到R2
编译器:赋值语句 - A = A + 1,条件 - IF(TRUE)...,分支 - 返回
HTML:...描述嵌套结构
TCP/IP:描述到/来自地址
PDF:描述纸张上的文字/图像位置
字体:描述字符
我们用于描述特定过程的任何语言都是DSL.遗憾的是,即使是我们最基本的流程,也缺乏特定领域的语言,所以我们使用少数几种语言来描述我们所做的一切."在我的网站上压缩所有html文件"需要300行3或4种不同的语言才能完成.
要构建DSL,请确定描述您可以记住且不需要文档的流程所需的最少字符数.请记住,速度和易用性是主要的设计标准.解析是如此之快以至于您使用的任何语法都很好,我更喜欢自然语言作为我的语法在大多数情况下,"在本月的第一天支付员工",但特定于域的是,特定于域,您确定最佳语法适合这个问题.
我会远离使用可能方便但不适合问题的其他解决方案,例如用于定义数据(XML)的HTML.CSV非常有用,适合大多数问题.JSON不适合易用性部分,对于大多数问题,CSV工作增加了不必要的复杂性是过度的.我们大量使用EXCEL用于DSL,它非常适合描述小问题,在65K到1M行之下,例如树结构或菜单,列A是级别,其他列是图标,颜色,标签等(EXCEL是一个可编辑的CSV).
我发现HTML并没有真正解决页面布局的问题,所以我摆脱了它并定义了一个适合的DSL.我在页面上定义了6个区域,HEADER,BODY,FOOTER,LEFT/RIGHT MARGINS和LEFT/RIGHT FULL MARGINS.然后,我可以告诉页面生成器向特定单元格添加TITLE BAR,STATUS BAR,MENUS,TABLE,FORMS等.然后可以将这些单元格中的每一个拆分为行和列到任何深度.任何样式的页面布局都需要几秒钟.
BODY包含我的员工表
HEADER包含标题栏标题'Hello World'并登录Collins Software
菜单DSL不适合页面布局DSL,因此我为菜单构建了一个独特的DSL.
资源我的主菜单
*定义:菜单,m,级别,标签,图标,动作;
米,0,文件;
m,1,open,open.gif,Dialog Open File;
每个问题都是独一无二的,计算机可以使用任何格式,它是人们设计的DSL,因此人们可以理解它,可以输入的东西,并用真正的单词制作语言; 因为它是我们描述的真实的人,地方和事物.
DSL是开发非程序员使用的语言的好方法.例如,如果您为公司的财务人员安装了DSL,那么您可以让他们编写他们想要完成的程序,而不是编程到他们的规范.然后,如果它太慢,那么你可以把他们写的东西按照他们想要的方式工作,用编译语言写它来加速它.
我写了一篇简短的博客文章,讨论了我喜欢使用 DSL 的原因:
在其中,我将 DSL 定义为:
一种小型编程语言,专门设计用于交流特定问题领域的解决方案。
在使用方面,如果您曾经使用过 Ant、结构化查询语言 (SQL) 或级联样式表 (CSS),那么您已经使用了 DSL。
我喜欢使用 DSL,因为它们专注于促进针对特定问题空间的解决方案的交流,并且它们以促进领域专家参与的方式进行。
好!上面有很多解释。我将尝试以更简单的方式来解释这一点,因为像我这样的人会理解。
由于通用语言用于广泛用途,因此DSL仅用于特定领域。像HTML或CSS。
您可以说是否在纸上写了说明,只有某些人或您的唯一朋友可以理解,而其他人则不能。那么它可能是DSL。但是,如果您以许多人可以理解并且可以遵循的术语来编写说明,那么这不是DSL。
我曾经为用户创建了一个开关板,可以通过计算机的串行端口进行操作,而用户希望该板可以在该板上执行程序,继电器开关也将相应地打开和关闭。因此,我写了一些说明,并告诉用户根据这些说明对该板进行编程。这是DSL的一个例子。我没有发明新的语言,而是创建了一堆字符串,微控制器可以从EEPROM读取这些字符串,并且可以据此进行解析并可以执行特定任务。
| 归档时间: |
|
| 查看次数: |
67798 次 |
| 最近记录: |