Skip to content

Latest commit

 

History

History
45 lines (30 loc) · 1.39 KB

File metadata and controls

45 lines (30 loc) · 1.39 KB

元程 (Metaprogram)

操作程序的程序。

定义

元程序是以程序为输入、以程序为输出的程序。

程序 → 元程序 → 程序

凡是对程序本身进行分析、变换、生成的程序,都是元程序。

三类形态

形态 时机 示例
编译时 源码 → 源码 宏、模板、代码生成器
加载时 链接/加载阶段 AOT 织入、linker script
运行时 程序执行中 反射、动态代理、JIT

本质

普通程序操作数据,元程序操作程序

普通程序: 数据 → 逻辑 → 数据
元程序:   程序 → 逻辑 → 程序

程序在元程序眼中,不过是另一种形态的数据。

经典范式

  • 宏系统 — 语法扩展,编译时展开(Lisp macro、Rust macro)
  • 代码生成 — 从描述生成源码(protobuf compiler、parser generator)
  • 反射 — 运行时检查与修改自身结构(Java reflection、Go reflect)
  • 模板元编程 — 利用类型系统在编译时计算(C++ template)
  • AOP — 横切关注点织入(AspectJ、Spring AOP)
  • 程序综合 — 从规约自动生成程序(program synthesis)

元程的元程

元程本身也是程序,也可以被元程操作。这种自指性(self-referentiality)是元编程的核心魅力——也是复杂性的根源。