宏扩展器Skill macro-expander

宏扩展器是一种编程技能,用于在编译时实现宏系统,进行语法抽象和代码生成。关键词包括宏系统、编译时、代码生成、语法抽象、元编程。

架构设计 0 次安装 0 次浏览 更新于 3/13/2026

名称:宏扩展器 描述:“实现宏系统,用于编译时的语法抽象和代码生成。” 版本:“1.0.0” 标签:[元编程, 宏, pldi, lisp] 难度:中级 语言:[scheme, rust, julia] 依赖项:[parser-generator, lexer-generator]

宏扩展器

宏系统通过在编译时转换代码来实现语法抽象。它们允许程序员用新的语法结构扩展语言。

何时使用此技能

  • 构建DSL(领域特定语言)
  • 减少样板代码
  • 实现语言扩展
  • 代码生成
  • 编译时计算

此技能的作用

  1. 宏定义:定义语法转换器
  2. 宏扩展:将宏调用转换为基本语法
  3. 卫生性:防止意外变量捕获
  4. 模式匹配:匹配宏输入模式
  5. 递归扩展:处理嵌套宏

关键概念

概念 描述
语法转换器
卫生性 防止意外变量捕获
模式变量 宏模式中的占位符
扩展 将宏调用转换为基本语法
模板 宏的输出模式

提示

  • 使用卫生性防止捕获
  • 优先使用基于模式的宏以提高清晰度
  • 记录宏的合约
  • 彻底测试宏扩展
  • 考虑编译时错误

常见用例

  • DSL实现
  • 样板代码减少
  • 语言扩展
  • 条件编译
  • 代码生成

相关技能

  • parser-generator - 宏需要AST
  • dsl-embedding - 通过宏实现DSL
  • multi-stage-programming - 分阶段计算

经典参考

参考 重要性
Kohlbecker et al. “Hygienic macro expansion” 原始卫生性论文
Dybvig et al. “Syntactic abstraction in Scheme” Scheme宏
Rust宏文档 现代过程宏

权衡与局限性

方法权衡

方法 优点 缺点
文本宏 简单 非卫生
卫生宏 安全 复杂
过程宏 强大 难以调试

何时不使用此技能

  • 当函数足够时
  • 对于简单的语法糖
  • 当调试很重要时

局限性

  • 卫生性难以正确实现
  • 错误信息可能模糊
  • 宏扩展可能较慢

评估标准

高质量的实现应具备:

标准 应关注的点
卫生性 防止捕获
可组合性 宏扩展宏
错误处理 清晰的错误信息
效率 合理的扩展时间

质量指标

:卫生的,基于模式的,良好的错误处理 ⚠️ 警告:有时会捕获变量 ❌ :非卫生的,模糊的错误信息

研究工具与成果

真实世界的宏系统:

工具 重要性
Racket宏 先进的宏系统
Rust过程宏 Rust宏系统
C预处理器 原始文本宏
Clang/LLVM C的宏系统

关键系统

  • Racket:Scheme宏
  • Julia宏:Lisp风格宏

研究前沿

当前宏研究:

方向 关键论文 挑战
卫生性 “Hygienic Macros” 可靠的卫生性
生成性 “Generative Macros” 类型生成
类型化 “Typed Macros” 类型安全的宏

热门话题

  1. 宏ML:带宏的ML
  2. Wasm宏:WebAssembly宏

实现陷阱

常见宏错误:

陷阱 真实例子 预防
捕获 变量捕获 卫生性
顺序 宏顺序 阶段分离