2个不稳定版本

0.2.0 2023年5月8日
0.1.0 2023年5月8日

#1135 in Rust模式

29 下载/月

Apache-2.0

285KB
6K SLoC

Matr

Matr(在Rust中使用关联类型进行元编程,发音类似于"物质")是一个Rust的元编程库。

这是一个Rust元编程的标准库,提供基本类型和算法,但预期用户将定义自己的类型和元函数;元-"类型系统"旨在可扩展。

除了booltype之外,这里定义的所有其他元类型(即src/下的目录)都不访问用户使用此库所能访问之外的内容,因此它们也作为示例,供此库的用户了解如何编写自己的元类型。

还可以定义具有额外限制/功能的Kind的自定义子特质,例如,请参阅EqualityComparableKindEquals作为示例。

此库使用特质(特别是Expr<K>)作为元值,以便Rust类型检查器可以检测元函数中的类型错误(例如,在应该返回Expr<USize>的元函数中尝试返回Expr<Bool>)。由于特质不能有特质参数(只有类型参数,可以通过特质进行约束),每个元类型都有一个关联的Kind结构(例如,布尔值对应于Bool)。

在撰写本文时(2023年3月),这仍然是一个正在进行中的工作,并且由于使用了#![feature(specialization)]#![feature(const_trait_impl)](尚未稳定),因此需要rustc的nightly版本。

这不是一个官方支持的Google产品。

为什么不用const fn进行元编程?

如果您的用例由 const fn 覆盖,那么使用这些比使用这个更简单。然而,const fn 无法计算类型;如果您正在寻找一个用于操作类型的库,那么您来到了正确的位置。

此库还提供了一个 ConstFn 元类型,允许在元计算的结果中也包含一个 const fn

这主要用于那些在计算类型和计算 ConstFn 之间存在共享逻辑的用例。如果您只需要 ConstFn,那么这个库对于您的用例来说就过于强大了,您只需使用普通的 const fn 即可。

为什么不使用宏进行元编程呢?

如果您的用例由宏覆盖,那么使用这些比使用这个更简单。然而,宏只能访问 AST 而不能访问完整的类型信息(这可以通过此库实现)。

无运行时依赖