用于开发强大的程序性宏的编译时反射 API(概念验证)
我以为 Rust 没有反射 ... ?
我现有的 syn 和 quote 库以超级通用的方式处理程序宏的问题空间,非常适合大约 95% 的用例。然而,通用性带来了运行在相对低层次抽象的代价。宏作者负责每个单个的尖括号、生命周期、类型参数、特性约束和虚拟数据的位置。涉及大量的领域知识,很少有人能够使用这种方法可靠地生成稳健的宏。
这里探讨的设计重点在于如何让所有的边缘情况消失 — 也就是说,如果您的宏递归方法适用于最基本的情况,那么它也适用于任何棘手的情况。
宏作者使用此 API 来表达其宏的逻辑,使用 reflect::Value 等类型来检索函数参数,访问数据结构的字段,调用函数等。重要的是,在该模型中没有通用类型或虚拟数据。一切都只是一个 reflect::Value,其类型在运行时是其概念上的单形类型。
与此同时,库正在跟踪控制流和函数调用,以构建作者宏的一个完全通用和可靠的过程实现。最终的代码将在正确的位置包含所有的小括号、生命周期、边界和虚拟类型,而不需要作者考虑这些问题。反射 API 只是定义过程宏的一种手段。库会将其全部消除,并生成无任何实际错误的清晰的 Rust 源代码。
暂无开放 Issues,或尚未同步最近议题。