在计算机行业永远不缺乏的是什么?
概念和新名词
我们已经见了太多太多的名词,现在都有点名词麻痹症了。就在这些名词中间有一个单词忽隐忽现的闪烁着自己的光芒----meta。
在牛津大辞典里对meta这样解释:它是个词根,构成名词、形容词和动词。1.connected
with a change of position or state位置或状态的变化的。2.higher,beyond高于,在上:metaphysics形而上学,metalangugage元语言
呵呵,还有元语言这个词条:用于讲述或描述语言或某种语言的词或短语。
看了上面的解释还是没啥感觉。那看看meta这个词一般用在什么地方呢?
在我们的.NET里面我们几乎在所有的技术文档里都会看到metadata(元数据)这个东西,元数据就是编译器生成程序集的时候生成的一些额外的信息,这些信息用来描述程序集,类型、方法等东东的,这样在运行时JIT可以加以利用,GC也可以看看,俺们自己还可以通过反射来瞧瞧。嗯,这东西好像就是描述性的东西。
HTML里面有一个<meta
/>的标签,这玩意儿又有什么作用呢?做web的也许都知道这个标签是为网页提供一些附加信息,对搜索引擎友好,比如你可以通过这个meta里说明这网页是你做的,你用啥工具做的,这个网页里包括一些什么内容。
呵,这东西好像还是描述性的东西。
不过我们今天的话题:元编程(metaprogramming),这里的元和编程加起来又是什么概念呢?根据前面对meta这个单词的理解,是不是就是描述性编程,我编的这代码的作用就是描述别的代码的。
嘿嘿,我在Wiki上找到了一句说明:Metaprogramming
is the writing of computer programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that is otherwise done at run time.In many cases, this allows programmers to get more done in the same amount
of time as they would take to write all the code manually
元编程就是编写计算机程序来编写或操作其它程序(或它自己)作为它们的数据,或者是在编译时而不是运行时干一部分工作。大多数情况下,在同一时间里程序员使用元编程比手写代码更有效率。
看了上面的说明,元编程好像是写个代码,让这个代码自己生成代码。
一下子我就想到了C++里面的模板(在C#里为泛型,但却有很多不同,此处的模板不是指设计模式里面的模板方法),假如有这样一个通用的算法,排序算法,可能有整数排序,字符排序,浮点数排序,但它们的排序算法都差不多,不同的就是类型。那我们可以写一个模板,这个模板在编译的时候根据使用的不同,比如使用整型版本,它就会根据模板生成一份针对整型的代码。呵,这是不是就是代码生代码了,一份程序,可能编译后可能生出几份代码来(这也引起了C++里面的代码爆炸的问题,这种方式和C#泛型的方式很不一样,据说java也是这种方式,但我没考究)。
除了C++的模板,还有C里面的宏,这宏差不多也是个“模板”,在编译的第一阶段就会全部replace掉。
比如我们定义一个能交换两变量值的宏:
#define SWAP(a,b,type) {type temp;temp = b;b=a;a=temp;}
看看如何使用:
//定义两整型变量
int g = 5,h = 8;
//使用这个宏来交换g和h的值,注意,这里并不是方法调用
//通过这个宏的第三个参数可以看出,它适用于多种类型的变量交换
SWAP(g,h,int);
上面使用宏可并不是方法调用,和方法调用相比它没有调用时的性能损耗,它在编译器的预处理时期就替换成这样的语句:
int temp;temp = h;h = g;g = temp;
貌似这也是代码生成代码
那再看看C# 3.0里一个非常重要的概念----表达式树:
Expression<Func<int,bool>>
test = x => x > 1;
就是这么一个Lambda表达式,这样赋值一下编译后:
Expression<Func<int,bool>>
test =Expression.Lambda<Func<int,bool>>(Expression.GreaterThan(CS$0$0000
=Expression.Parameter(typeof(int),"x"),Expression.Constant(1,typeof(int))),newParameterExpression[]
{ CS$0$0000 });
C#编译器却为我们构造了一个树形的数据结构。这是否是元编程?
好了就写这么多了,到现在我也没有弄明白什么是元编程,只是一些概念在脑子里忽隐忽现,如是很想把它整理出来,但整理的时候却又非常的凌乱,所以我写在这里作为一期话题,希望各位能讨论讨论,说不定能碰撞出一些火花呢。
分享到:
相关推荐
Elixir 元编程 Metaprogramming is one of Elixir's greatest features. Maybe you've played with the basics or written a few macros. Now you want to take it to the next level. This book is a guided series...
这本《Metaprogramming Ruby》书籍深入探讨了如何利用Ruby的特性进行元编程,帮助开发者提升代码的灵活性、可扩展性和复用性。源代码提供了书中各个示例的实践,让读者能够更好地理解元编程的概念。 元编程的核心...
《C++ Template Metaprogramming Concepts, Tools, and Techniques from Boost and Beyond》是关于C++元编程的一本经典教材,适合那些对软件构造有深入兴趣的读者。元编程是C++语言的一个强大特性,它允许程序员在...
### Metaprogramming Ruby 2nd Edition:深入理解Ruby元编程 #### 一、书籍简介与价值 《Metaprogramming Ruby 2nd Edition》是一本深入探讨Ruby语言元编程特性的经典之作。本书不仅适合那些希望深入了解Ruby内部...
本书主要介绍Traits和类型操纵、深入探索元函数、整型外覆器和操作、序列与迭代器、算法、视图与迭代器适配器、诊断、跨越编译期和运行期边界、...,另外附录部分还介绍了预处理元编程概述、typename和template关键字...
2004年出版的《C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond》一书则归纳了模板元编程的技术动向,成为第一本论述C++模板元编程技术的专著。 C++模板元编程的一个经典...
元编程(Metaprogramming)是指在程序运行时或编译时处理程序本身的一种编程方式。在书中,池建强通过MacTalk这一独特视角,讲解如何利用元编程思想来解决实际问题,提高编程效率,并以此类比到个人的成长路径,阐述...
标题提到了"The Boost C++ Metaprogramming",意味着这篇文档关注的是在C++领域中,Boost库提供的模板元编程工具和相关技术。 描述部分强调了文档将讨论Boost C++模板元编程库,这是一个可扩展的编译时框架,包含...
C++模板元编程(Template Metaprogramming,TMP)则是利用模板在编译期间进行计算的一种技术。《C++模板元编程》这本书则专注于这一主题,介绍了如何编写能在编译时执行逻辑的模板代码。TMP允许开发者创建编译时的...
历史部分提到了模板元编程的起源,1994年Erwin Unruh通过一段展示在编译期计算质数的代码引起了关注,随后Todd Veldhuizen进一步发展了这一概念,将其命名为C++模板元编程(Template Metaprogramming,TMP)。...
在C++中,模板不仅仅是用来创建泛型代码的工具,它们也可以被用作一种编程范式,这就是模板元编程(Template Metaprogramming,简称TMP)。以下是对这一主题的深入探讨。 首先,我们需要理解模板的基本概念。C++...
《Metaprogramming Ruby》这本书深入探讨了Ruby的元编程技术,并教授如何利用这些技术编写更精练、更优良的代码。在本书中,读者会了解到以下关键知识点: 1. Ruby对象模型:Ruby中的每个值都是一个对象,每个对象...
《Metaprogramming Ruby: Programming Like the Ruby Pros》是一本深入探讨Ruby元编程技术的专业书籍,作者Paolo Perrotta通过丰富的实例和清晰的概念解析,帮助读者理解和掌握Ruby中的高级编程技巧。本书不仅适用于...
元编程(Metaprogramming)是一种编程技术,它允许程序在运行时分析或修改自身结构和行为的能力。在.NET框架中,元编程主要通过反射(Reflection)、动态类型创建、代码模板转换工具包(T4)、CodeDOM等方式实现。 ##### ...
C++模板元编程,ISBN:9787111267423,作者:(美)大卫 等著,荣耀 译 原作名: C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond 出版年: 2010-1 页数: 277
模板元编程(Template Metaprogramming,简称TMP)利用C++模板的特性来实现类似编程语言的逻辑,但这一切都在编译期间完成,而非运行时。通过这种方式,我们可以创建高效、类型安全且灵活的代码,尤其是在处理泛型...
首先,我们需要理解模板元编程(Template MetaProgramming,TMP)的基本原理。C++模板不仅仅用于参数化类型,还可以作为一种编程范式,允许我们在编译期间进行逻辑推理和计算。这涉及到的主要概念有类型推导、模板...