AI 时代的 Meta Programming 是 workflow。
最近很多人在说自己使用 loop 进行编程,但是没有具体说怎么做。
本文是我的理解和实践。
什么是 meta programming
loop 这个说法过于模糊,实际上基于 loop 编程,指的是基于 workflow 来编程。
Meta Programming 中文是元编程。元类(metaclass)、C++ 宏编程、泛型,我认为均属于 Meta programming。
Workflow 为什么是 Meta Programming(MP)?
合适的 workflow 可以让 AI 写出更好的代码。
假设 MetaG 是一个「元函数」——它接收代码或约束作为输入,输出目标代码。例如 Python 虚拟机、C++ 预处理器都是 MetaG 的实例。
C++ 宏 - 一种 MP
以 C++ 宏为例,开发者编写宏模板作为输入,预处理器执行展开。
| |
此时 MetaG 就是 C++ 预处理器。
Python 元类
输入:元类定义
| |
此时 MetaG 是 Python 解释器。
输出:受元类控制的单例行为
| |
泛型
以 Go 语言为例。
输入:泛型函数定义
| |
MetaG 接收泛型定义,根据类型参数生成具体的函数实例。
输出:泛型展开后的具体函数
| |
总结
在传统的 Meta Programming 中,MetaG 的输入和输出都是代码。MetaG 本身是一个确定性的程序(编译器、解释器、预处理器),输入模板或类型定义,输出展开后的代码。
一个 workflow 例子
/goal 是 Claude Code 中的一个命令,用于设定一个高层目标,让 agent 自主循环工作直到达成。以下是一个基于 /goal 的 workflow 例子。
输入:一段 workflow 脚本
| |
agent 在每次循环中检查是否达成目标,未达成则继续编程和 review,直到 goal 完成或达到最大轮次。
MetaG 是可以执行 workflow 的 runtime,例如 Claude Code 或者 OMP。
输出:
| |
已有的 runtime
目前已有多个 runtime 支持执行 workflow,以下是两个典型的例子。
Claude Code
Claude Code 提供了更丰富的 workflow 原语,例如 parallel、pipeline、subagent 等,支持并行、串行和委托等执行模式。
上面的例子只用了 agent 这个原语,实际上 Claude Code 生成的大多数是 parallel(agent1, agent2, agent3) 或者是 pipeline(agent1, agent2, agent3)。
OMP - oh my pi
workflow 这个功能在 OMP 上体验更好。
可以通过对话将 Python workflow 落盘,下一次直接 eval 使用。在 Claude Code 中,workflow 用 JS 表示。
如果 py 文件里本身有 loop,那么下次 coding 的过程就是 eval loop 的过程。workflow 本身也可有输入输出。
