快速业务通道

冒号课堂§3.2:超级范式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
不会惊讶于它们的强大了。顺带说一句,编译器本身就是元编程的典型范例——把高级语言转化为汇编语言或机器语言的程序,不就是能写程序的程序吗?”冒号引申开来,“更进一步地,我们可以定义自己的领域特定语言DSL,更加灵活方便地处理客户逻辑。”

逗号有点糊涂了:“领域特定语言?就是前两堂课提到的非通用编程语言吧?怎么和元编程也扯上关系了?”

“不是扯上关系,而是它们之间本来就有着千丝万缕的联系。”冒号纠正着,“相比第三代的通用编程语言,领域特定语言由于其在应用范围上和语法上的限制而显得简单、针对性强,有时被成为‘小语言’(little language),也是一种特高级语言(very high-level programming language ,简称VHLL),属于第四代编程语言。”

冒号说到此处,逗号猛地一拍脑门:“哦,我明白了。第四代语言最终需要编译为机器语言,而编译器就是元编程的应用。”

“你只说对了一半。”冒号不疾不缓地说,“DSL一般不会一步到位地编译为第一代的机器语言或第二代的汇编语言,而是通过现成的编译器生成器(compiler-compiler或compiler generator)首先转化为第三代的高级语言。这样不仅大大降低了难度,也方便了程序的调试。刚才提到的Yacc(Yet Another Compiler Compiler)便是这样的工具,能为解析器(parser)产生C程序,多用于Unix下的编程。更现代的工具如ANTLR (ANother Tool for Language Recognition),能生成C、C++、Java、C#、Python等多种语言的源程序。”

引号立刻联想到:“我记得框架Hiberate的必备库中就含有antlr.jar文件,与这个ANTLR有关吗?”

“说得正是!”冒号很满意学员完美的配合,“Hiberate中的HQL(Hibernate Query Language)是典型的DSL,需要通过ANTLR来解析。你们可以验证一下,在Hibernate的API中有org.hibernate.hql.antlr的package,但在其发布的源代码中相应的目录下却看不到一个Java源文件。却是为何?盖因此package中所有的源代码都是在ant build中自动生成的,这些非人工编辑的文件是不会放在版本控制中的。”

众人茅塞顿开。

句号想通了一个逻辑:“元编程作为超级范式的一个体现是,它能提升语言的级别。比如,有了编译器的存在,汇编语言升级为第三代高级语言;同样借助Yacc、ANTLR之类的元编程工具,第三代语言可以升级为第四代的DSL语言。”

冒号并未就此止步:“将这一模式发挥到极致,便是更加激进的语言导向式编程[1](Language-Oriented Programming,简称LOP)。这种编程范式的思路是:在建立一套DSL体系之后,直接用它们来编写软件,尽量不用通用语言。””

叹号莫明其妙:“想法近乎疯狂啊!放着好端端的通用语言不用,先造一套专用语言,这么做划算吗?”

“如果一个大型系统涉及的领域十分专业,包含的业务逻辑十分复杂,为其定制DSL或许会磨刀不误砍柴工。我们通过下面的两个图比较一下这种范式与主流编程范式的不同之处。”冒号映出新的投影——

冒号课堂§3.2:超级范式 - 编程入门网

冒号课堂§3.2:超级范式(3)

时间:2011-06-25 BlogJava xyz98

“由于DSL比通用语言更简单、更抽象、更专业、更接近自然语言和声明式语言,开发效率显著提高,因此图中手工部分的时间相应减少。此外尤为关键的是,这种方式填补了专业程序员与业务分析员之间的鸿沟。要求一个非专业编程的业务分析员用DSL来开发固是勉为其难,但要做到读懂代码并审查其中的业务逻辑则已非难事。” 冒号细解个中要点,“如果说OOP的关键在于构造对象的概念,那么LOP的关键在于构造语言的语

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号