8. 元编程

一、前言

元编程很有意思,只是很多人可能一直都没关注过它的名字而已,比如C++中的模板、rust中的宏等等,这些其实都算是元编程的一种实现。

这么一看,元编程这个词似乎也就没有那么的高大上了。

它的核心概念其实:编程语言的编程语言。

这听起来很抽象,但理解起来并不复杂,意思就是:我们通过一些编程语法来生成编程语言本身。

比如C++中的模板,不就是通过模板这一语言来生成的C++代码本身吗?

二、用途

不过本文也只是见到介绍一下元编程的概念与用途,并不会介绍某种语言是如何去实现元编程。

它的第一个、也是最常见的用途,便是生成代码。

以C++中的模板举例:

template<typename T>
T fun(T a,T b){
	return a+b;	
}

上面的代码就是一个用来生成代码的代码。它本身并不会被C++编译器编译进最终的可执行文件中。

只要你填入相关的类型:

fun<int>(10,20);
fun<double>(1.1,2.2);

那么编译器就会根据上面的模板为我们生成相应的两份代码:

int fun(int a,int b){
	return a+b;	
}
double fun(double a,double b){
	return a+b;	
}

通过这种方式可以减少我们程序员的工作量,自然也就降低了出错的风险。

除此之外还有反射,不过C++目前似乎并不支持,它在Java中是一个很常见的概念,其用途是运行程序在运行是过程中来检查某个对象的字段、方法等等,这同样用到了元编程的概念。

然后还有元数据,C++可能体会不到,但在rust中你却能够体会的很真切:在代码中写的注释信息,可以直接被编译成文档、测试用例,可用于代码分析等等领域。

还有一些语言中出现的注解,也可以被认为是元编程的一种用途,比如rust可以在函数前面写一些配置信息,控制其在指定平台进行编译。

python、java可以通过一些配置信息,来控制函数、类的实现,如果你写的代码不符合该注解信息的规范,编译器就会直接报错之类的。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux