3 个版本 (重大更改)
0.2.0 | 2023 年 1 月 24 日 |
---|---|
0.1.0 | 2023 年 1 月 13 日 |
0.0.0 | 2023 年 1 月 12 日 |
在 Rust 模式 中排名 2773
41KB
994 行
编译时类型信息
该包是潜在 ctti 语言功能实验性标准库侧实现的。
想法是提供一个函数 const fn type_info<T: ?Sized>() -> &'static Type
,它编码了底层类型。其他包可以在此基础上构建以提供高级功能,例如
- 稳定的
TypeId
。 - 通过比较库中的 2 个
Type
实现安全动态链接。 - 反射。
以上所有都不需要由标准库实现。所有这些都可基于编译时类型信息构建。
为什么不是这个包呢?
为了有用,类型信息应适用于所有类型。在原始类型上实现它很简单,但是,对于用户类型(结构体、枚举、联合),如果没有
- 使用宏包装每个类型。
- 编译器支持。
1 是许多包的当前状态,例如 abi_stable
、safer_ffi
。参见 impls
模块中我们如何做的示例。它确实有效,但是,它非常侵入式 - 生产代码需要对该包进行重大修改,下游包也不能使用它们进行类型布局检查。
2 成为唯一可行的解决方案。根据其先进程度,它还可以很好地处理诸如自引用结构体等问题,而不需要运行时处理。
许可证:MIT