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

 

                                                                                     --- 老徐 (转载请注明出处)java

相关文章
相关标签/搜索