名称:program-transformer 描述:通过各种语义保持和优化传递来转换程序的技能。 版本:“1.0.0” 标签:[转换,优化,编译器,重构] 难度:中级 语言:[haskell, ocaml, python] 依赖:[cps-transformer, closure-converter]
程序转换器
领域:程序分析 / 编译器工程
概述
一种用于通过各种语义保持和优化传递来转换程序的技能。
能力
- 实现源到源的转换
- 应用语义保持的优化
- 构建程序简化器
- 处理复杂控制流
- 保持程序属性
转换类型
- 反糖化:移除语法糖
- 规范化:将程序置于规范形式
- 优化:改善性能/空间
- 并行化:检测并行机会
- 特化:部分评估,特化
技术
- AST操作:树转换
- 遍历策略:自上而下,自下而上,访问者模式
- 绑定管理:α转换,避免捕获的替换
- 类型保持转换:类型安全的重写
使用案例
- 编译器前端/后端
- 程序优化
- 重构工具
- DSL实现
参考文献
参见:../cps-transformer, ../defunctionalization, ../closure-converter, ../common-subexpression-eliminator
研究工具与工件
现实世界的程序转换工具:
| 工具 | 为什么重要 |
|---|---|
| Rascal | 程序转换 |
| Stratego | 转换语言 |
| XSLT | XML转换 |
| K toolkit | 重写框架 |
关键系统
- StrategoXT:转换工具
- Rascal:源代码分析
研究前沿
当前的转换研究:
| 方向 | 关键论文 | 挑战 |
|---|---|---|
| 正确性 | “验证转换” | 可靠性 |
| 自动化 | “自动转换” | 发现 |
热门话题
- ML转换:学习转换
- Wasm转换:二进制转换
实现陷阱
常见转换错误:
| 陷阱 | 真实例子 | 预防 |
|---|---|---|
| 保持性 | 错误语义 | 证明 |