#type #unique #nightly #no-std

nightly no-std unique-type

独特且匿名类型生成工具

1 个不稳定版本

0.1.0 2022 年 5 月 9 日

#80#nightly

每月 下载 25

MIT/Apache

8KB

独特类型

这是一个(目前)仅限 nightly 版本的 crate,它提供了一些用于生成和操作独特和匿名类型的工具。换句话说,这些是不能命名且保证始终与其他类型不同的类型。

此 crate 的主要功能是宏 new!,可用于生成这些类型的类型。

可以使用 Unique trait 在 trait 约束中要求类型由 new! 宏生成。

这些类型可以用来“标记”其他类型,使其具有唯一标识性。

当前实现

当前实现基于以下事实:从 Rust 参考)闭包表达式产生一个具有独特、匿名类型的闭包值,该类型无法写出

基本上,宏 new! 使用闭包的 TypeId,并将其用作“模板”类型的 const 泛型,该类型实现了 Unique trait。

安全性

此方法的主要问题是,为了在宏内部构造,模板类型及其依赖的所有其他类型都必须是公开可见的。

这意味着可以手动声明此类类型,这可能会破坏唯一性保证。

通过要求在安全性部分明确说明的要求来初始化模板类型,以使用 unsafe 代码解决此问题,使其被视为唯一的。

通过在需要更多关注的项目(理论上不应在 crate 之外可见)上使用 #[doc)] 添加额外的保护。

无运行时依赖