Swift *几乎* 做了一件我想要的非常酷的事情

主要观点:作者在玩具编译器中需进行大量 AST 操作,有“parsed”AST、“IR”AST 和“codegen”AST 等,需为它们定义各种遍历。因 AST 较大且节点类型多,不想手动编写映射函数,在 Rust 中通过写“specialized Functor”特质来解决,以简化代码,但仍觉工作量大,于是写了一个宏来帮忙,最终希望能实现类似在 Swift 中通过特定语法定义自动映射的功能,但在 Rust 中由于 Coherence 限制无法做到,尝试用 Swift 的MirrorRuntime库进行反射也遇到困难,虽可能用dynamic关键字等解决,但仍对仅支持运行时反射不满,觉得这是死胡同,考虑尝试 Haskell。

关键信息:

  • 介绍了不同类型的 AST 及需进行的操作。
  • 展示了在 Rust 中“specialized Functor”特质的实现及示例。
  • 提到写宏来简化“Functor”实现的过程。
  • 阐述在 Swift 中尝试实现自动映射的想法及遇到的问题。
  • 提及对仅支持运行时反射的不满及后续可能的尝试。

重要细节:

  • “specialized Functor”特质中不同类型的输入、输出和映射类型的定义及实现。
  • 宏的作用及使用方式。
  • Swift 中MirrorRuntime库的相关情况及遇到的限制。
  • 尝试在 Rust 中实现类似 Swift 语法时遇到的 Coherence 问题及具体表现。
阅读 12
0 条评论