
上QQ阅读APP看书,第一时间看更新
7.1.2 元编程的分类
现代的编程语言大多会为我们提供一些元编程能力。根据生成代码的时机来区分,如图7-1所示,我们会将元编程分成以下两种类型:
· 编译期间元编程。
· 运行期间元编程。
编译期间元编程主要是通过宏和模板实现的,它们允许程序在编译期展开生成或者执行代码。

图7-1 Kotlin元编程的分类
计算机科学中的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。
这里的模板通常是指C++的模板,本书不做过多介绍。
另外,泛型也是编译期间元编程的方式,只不过不同的语言和编译器对泛型的支持不太一样。例如,前面介绍过Java的泛型可能会被认为是“伪泛型”,通过类型擦除支持泛型,生成的Java字节码不包含任何泛型信息。并且,Java的泛型要靠编译期和运行期协作实现。
运行期间元编程主要靠反射机制,它允许程序在运行时改变自身的行为。后面会详细介绍Kotlin的反射机制。