快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

冒号课堂§3.2:超级范式

时间:2011-06-25 BlogJava xyz98

第三课 常用范式(2)

3.2 超级范式——提升语言的级别

智能繁衍:机器人生产机器人          ——题记

关键词:编程范式,模板元编程,元编程,语言导向式编程,产生式编程

摘要:元编程简谈

?提问

什么是元编程?它与通常的编程有何不同?

元编程有何用处?它有哪些应用?

相比自编的元程序,用IDE自动生成的代码有什么缺陷?

语言导向式编程有何优点?它与元编程有何关系?

元编程与产生式编程有何异同?

为什么说元程序是一种最高级的程序?

:讲解

问号忽然想起一事,问道:“有一本名为《C++模版元编程》的书,既然提到了模板,想来也属于泛型编程吧?”

冒号答道:“模板元编程即Template Metaprogramming,与泛型编程密切相关但自成一派,隶属于另一种编程范式——元编程(Metaprogramming),简称MP。此处的前缀‘meta-’常译作‘元’,其实就是‘超级’、‘行而上’的意思。比如,元数据(Metadata)是关于数据的数据,元对象(Metaobject)是关于对象的对象,依此类推,元编程自然是关于程序的程序,或者说是编写、操纵程序的程序。”

叹号皱着眉:“听着有点绕。”

冒号投影出另一段代码——

C++(元编程): template <int N> struct factorial {    enum { value = N * factorial<N - 1>::value }; }; template <>        // 特化(specialization) struct factorial<0>  // 递归中止 {    enum { value = 1 }; }; void main() {    cout << factorial<5>::value << endl; // 等价于 cout << 120 << endl; }

“以上用模板元编程实现了阶乘运算。”冒号讲解道,“与前面三种核心范式的阶乘实现有着根本的不同:这里阶乘的值是在编译时而非运行时计算出来的。换句话说,这段代码以模板形式通过编译器生成了新的代码,并在编译期间获得执行。”

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

时间:2011-06-25 BlogJava xyz98

叹号大惑不解:“这又说明什么呢?”

冒号并不直接回答:“假设你需要批量处理用户文档,其格式结构预先给定,但既不像CSV(逗号分隔)那么简单,也不像XML那么标准,并且用户随时可能改变格式标准,请问如何设计这段程序?”

叹号略一思索,便回答:“三大模块:阅读器读出输入文档,解析器按照格式标准去解析,处理器对解析结果进行处理。”

“显然关键在解析器,如果你是从头做起,那么问题至少有四。”冒号扳着指头数:“第一、费时写解析器代码;第二、费时调试解析器代码;第三、如果用户更改格式标准,你得重复做上两件事;第四、如果这段程序是大型程序的一部分,任何改动都可能意味着软件的重新编译、连接、测试、打包、部署等等。如果因为你的缘故公司不得不频频发布补丁包的话,你的饭碗恐怕是朝不保夕了。”

还是句号机灵:“既然谈到了元编程,一定是利用元编程,根据不同的格式标准自动生成相应的解析器代码。不过——此法虽一劳永逸,但难度似乎不小啊。”

“思路对头!”冒号赞许道,“大家听说过Lex和Yacc吗?它们能根据格式标准生成相应的解析器代码。更妙的是,格式标准不限于静态数据,甚至可以含有动态指令!这意味着用户不仅能定义业务数据格式,还能定义业务流程。”

“这敢情好!”叹号兴奋地说。

“如果知道Lex和Yacc本来就是编写编译器和解释器的工具,你就

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号