[原]认识DSL

 

 

         “我们应该学习那些科学家发现和解决问题的思维过程,而不应该直接灌输理论知识。”

         “大学精神的本质,并不是为了让我们变得深奥,而恰恰是恢复人类的天真".----刘瑜

         ”一个人的语言的世界,既是这个人的世界";

                                                                                                                      ------------------------引子

 

 

         数学家莱布尼茨提出了以下问题:

         1) 创建一种可以描述所有问题的”通用“语言;

         2)找出一种可定义的方法去解决用这种”通用“语言描述的所有问题(算法);

          莱布尼茨的问题是:是否存在一种”通用“语言描述来解决所有问题?

 

         1936年,阿兰·图灵引入的图灵机和阿隆佐·邱奇的lambda演算论文几乎同时证明了算法的“可计算性”;即任何计算或算法都可以用一台图灵机来执行。而现在的基于冯·洛依曼机器模型既是一个带寄存器状态机的图灵机器。从对问题领域的分析,到对所研究问题的恰当表述的过程既是DSL思想;而最终对于“可计算性”这个问题用计算机机器表述出来。可以说计算机的发明就是一个针对”可计算性问题“的一个伟大DSL;为计算机产生奠定了理论基础。

         图灵机的描述更偏重硬件层面的表述,而lambda演算更偏重软件层面的表述。

         构筑于“图灵机”理论上的冯·洛依曼思想衍生出许多命令式程序设计语言:汇编语言,Fortran,c,java等等。

          lambda演算理论衍生出了lisp系列的函数式程序设计语言:scheme,common-lisp;elisp等。

 

           言归正传,开始讲DSL(domain specific language),比较官方的定义为:侧重特定领域的表达有限的计算机编程语言。我们日常接触的各个方面的编程语言既是DSL,比如sql语句就是数据库查询的DSL, shell语言是与操作系统交互的DSL,java,ruby使程序员在更高的抽象层面专注业务逻辑编码;等等。

            DSL的特点,在所关注的领域易于阅读,理解的语言。因为封装了domain细节,屏蔽复杂性,提供上层操作方法,所以更易于表述人对这个业务的的理解的语言。

           DSL的实现:

                   1. 利用现有语言进行元编程;(比如:我们web开发常用的一些ssh框架,而语言层面,lisp,ruby这些语言的宏编程直接提供元编程能力)

                   2. 使用编译工具;可以使用lex,yacc,或者javacc,antlr等帮助我们建立新语言的描述和解释。比如antlr提供了词法描述,语法描述,各种目标语言(java,c,c++)的词法分析器,语法分析器生成。利用他你可以实现一个完整的语言。在各种建模工具逆向工程,比如通过代码生成图表描述的工具uml,powerdesign)等都可以看到他的身影;

                   3. 自己设计语言的规范并实现编译器;

 

 

 

                                                     ------------- 转载请注明出处:老徐

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值