主要观点:作者在玩具编译器中需进行大量 AST 操作,有“parsed”AST、“IR”AST 和“codegen”AST 等,需为它们定义各种遍历。因 AST 较大且节点类型多,不想手动编写映射函数,在 Rust 中通过写“specialized Functor”特质来解决,以简化代码,但仍觉工作量大,于是写了一个宏来帮忙,最终希望能实现类似在 Swift 中通过特定语法定义自动映射的功能,但在 Rust 中由于 Coherence 限制无法做到,尝试用 Swift 的Mirror和Runtime库进行反射也遇到困难,虽可能用dynamic关键字等解决,但仍对仅支持运行时反射不满,觉得这是死胡同,考虑尝试 Haskell。
关键信息:
- 介绍了不同类型的 AST 及需进行的操作。
- 展示了在 Rust 中“specialized Functor”特质的实现及示例。
- 提到写宏来简化“Functor”实现的过程。
- 阐述在 Swift 中尝试实现自动映射的想法及遇到的问题。
- 提及对仅支持运行时反射的不满及后续可能的尝试。
重要细节:
- “specialized Functor”特质中不同类型的输入、输出和映射类型的定义及实现。
- 宏的作用及使用方式。
- Swift 中
Mirror和Runtime库的相关情况及遇到的限制。 - 尝试在 Rust 中实现类似 Swift 语法时遇到的 Coherence 问题及具体表现。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。