论坛首页 编程语言技术论坛

谈谈我对DSL的看法

浏览 1313 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-02-24   最后修改:2012-02-24

 

 

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

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

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

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

 

 

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

         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. 自己设计语言的规范并实现编译器;

 

 

 

 

 

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics