1个不稳定版本
0.3.0 | 2019年12月10日 |
---|
#9 在 #self-reference
24KB
343 行
selfstack
selfstack是一个进程宏,它生成具有安全接口的类似栈的自引用数据结构。这是安全的,因为栈中的层只能引用其下方的层,并且底层层比上层层存在时间更长。这种限制防止了循环、悬垂引用和其他通常与自引用相关的不稳定性。
测试还使用miri运行,以检查生成的不可安全代码是否符合栈借用。
selfstack与rental的比较
rental 是针对类似问题的类似方法,但它有一些不同之处。
- Rental要求除了最后一个字段外的所有字段实现
StableDeref
。通常这意味着你必须Box
除了最后一个元素之外的所有元素。然而,这允许rental被移动。selfstack不需要字段实现任何特质,但一旦初始化,存储结构就无法移动(尽管用于访问字段的子结构可以移动)。 - Rental必须在
new
或try_new
的1次调用中完全构建。selfstack在连续的调用中增量构建每个字段。selfstack可以在初始化的任何级别安全使用。您可以通过将rental装箱并将其作为另一个rental的第一个字段来在rental中模拟此功能。 - Rental具有更多便利功能,如
IntoSuffix
,它将rental作为最后一个字段解引用,以及into_head
,它丢弃除第一个字段之外的所有字段并返回它。 - Rental具有更多配置选项(例如可变性、子租赁、协变、解引用)。selfstack始终以相同的方式工作,并且不需要特殊配置。
许可证
根据以下任一许可证授权
- Apache许可证版本2.0
- MIT许可证
贡献
除非您明确声明,否则您提交的任何旨在包含在您的工作中的贡献,根据Apache-2.0许可证的定义,应如上所述双授权,不附加任何额外条款或条件。
依赖项
~2MB
~46K SLoC