3 个版本 (重大更改)

0.2.0 2023 年 1 月 24 日
0.1.0 2023 年 1 月 13 日
0.0.0 2023 年 1 月 12 日

Rust 模式 中排名 2773

MIT 许可证

41KB
994

编译时类型信息

该包是潜在 ctti 语言功能实验性标准库侧实现的。

想法是提供一个函数 const fn type_info<T: ?Sized>() -> &'static Type,它编码了底层类型。其他包可以在此基础上构建以提供高级功能,例如

  1. 稳定的 TypeId
  2. 通过比较库中的 2 个 Type 实现安全动态链接。
  3. 反射。

以上所有都不需要由标准库实现。所有这些都可基于编译时类型信息构建。

为什么不是这个包呢?

为了有用,类型信息应适用于所有类型。在原始类型上实现它很简单,但是,对于用户类型(结构体、枚举、联合),如果没有

  1. 使用宏包装每个类型。
  2. 编译器支持。

1 是许多包的当前状态,例如 abi_stablesafer_ffi。参见 impls 模块中我们如何做的示例。它确实有效,但是,它非常侵入式 - 生产代码需要对该包进行重大修改,下游包也不能使用它们进行类型布局检查。

2 成为唯一可行的解决方案。根据其先进程度,它还可以很好地处理诸如自引用结构体等问题,而不需要运行时处理。

许可证:MIT

无运行时依赖