冒号课堂§3.2:超级范式 - 编程入门网
语言是不允许动态变更类的成员或实现代码的,利用元编程便可突破这种限制。”
逗号恍然大悟:“原来元编程就是编写能自动生成源代码的程序。” “也不尽然。”冒号马上修正道,“自动生成源代码的编程也属于另一种编程范式——产生式编程(Generative Programming)[3]的范畴。区别在于后者更看重代码的生成,而元编程看重的是生成代码的可执行性。另外,除了在编译期间生成源代码的静态元编程,还有能在运行期间修改程序的动态元编程。从低级的汇编语言到一些高级的动态语言如Perl、Python、Ruby、JavaScript、Lisp、Prolog等均支持此类功能。比如许多脚本语言都提供eval函数,可以在运行时将字符串作为表达式来运算[4]。” 冒号课堂§3.2:超级范式(4)时间:2011-06-25 BlogJava xyz98问号突然问道:“编写病毒算不算元编程?” “编写一个只是删除或感染文件的病毒,不必用到元编程。但如果要开发一个能自我变异的智能病毒,那就需要元编程了。不过你要是把元编程用在这方面,可别说是我教的。”冒号开了个玩笑。 引号自言自语:“程序的程序,就是程序的平方。” “也可以是程序的立方,四次方……理论上是无限次方。在传统的编程中,运算是动态的,但程序本身是静态的;在元编程中,二者都是动态的。元程序将程序作为数据来对待,能自我发现、自我赋权和自我升级,有着其他程序所不具备的自觉性、自适应性和智能性,可以说是一种最高级的程序。它要求编程者超越常规的编程思维,在一种崭新的高度上理解编程。想象一下,”冒号****勃发,“如果有一天机器人能自我学习、自我完善,甚至能生产新的机器人,实现‘智能繁衍’,是不是很美妙?” “我怎么觉得特恐怖呢?岂止是程序员,所有地球人的饭碗都会被它们砸光了。”叹号此言一出,众皆忍俊不禁。 ,插语 [1] Martin Ward最早提出此范式,见参考文献【1】。 [2] 虽然调试与测试和日志不是一码事,但合理的日志和单元测试能大量减少调试工作。 [3] 也译作“生成式编程”,属于自动编程(Automatic Programming)范畴。 [4] 考虑到eval过于广泛和强大,有些动态语言还提供其他更明确和更安全的元编程机制,如JavaScript可用字符串来构建Function,Ruby更是提供了define_method、instance_eval、 class_eval和module_eval等诸多元编程方法。 。总结 元编程是编写、操纵程序的程序。在传统的编程中,运算是动态的,但程序本身是静态的;在元编程中,二者都是动态的。 元编程能减少手工编程,突破原语言的语法限制,提升语言的抽象级别与灵活性,从而提高程序员的生产效率。 元编程有诸多应用:许多开发工具、框架引擎之类的基础软件都有自动生成源代码的功能;创造DSL以便更高效地处理专门领域的业务;自动生成重复代码;动态改变程序的语句、函数、类等等。 IDE下自动生成的代码通常局限性大且可读性差,小操作可能造成的源码上的大差异,削弱了版本控制的意义。用自编的无需人机交互的元程序来生成代码,只需将元程序的数据来源版本化,简明而直观。同时由于元程序可以随时修改,因此局限性小,更加灵活。 语言导向式编程(LOP)通过创建一套专用语言DSL来编写程序。相比通用语言,DSL更简单、更抽象、更专业、更接近自然语言和声明式语言、开发效率更高,同时有助于专业程序员与业务分析员之间的合作。 语言导向式编程一般通过元编程将专用语言转化为通用语言。 产生式编程与静态元编程都能自动生成源代码。产生式编程强调代码的生成,元编程强调生成代码的可执行性。此外,动态元编程并不生成源代码,但能在 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |