1个不稳定版本

0.3.0 2019年12月10日

#9#self-reference

MIT/Apache

24KB
343

selfstack

selfstack是一个进程宏,它生成具有安全接口的类似栈的自引用数据结构。这是安全的,因为栈中的层只能引用其下方的层,并且底层层比上层层存在时间更长。这种限制防止了循环、悬垂引用和其他通常与自引用相关的不稳定性。

测试还使用miri运行,以检查生成的不可安全代码是否符合栈借用。

selfstack与rental的比较

rental 是针对类似问题的类似方法,但它有一些不同之处。

  • Rental要求除了最后一个字段外的所有字段实现 StableDeref。通常这意味着你必须 Box 除了最后一个元素之外的所有元素。然而,这允许rental被移动。selfstack不需要字段实现任何特质,但一旦初始化,存储结构就无法移动(尽管用于访问字段的子结构可以移动)。
  • Rental必须在 newtry_new 的1次调用中完全构建。selfstack在连续的调用中增量构建每个字段。selfstack可以在初始化的任何级别安全使用。您可以通过将rental装箱并将其作为另一个rental的第一个字段来在rental中模拟此功能。
  • Rental具有更多便利功能,如 IntoSuffix,它将rental作为最后一个字段解引用,以及 into_head,它丢弃除第一个字段之外的所有字段并返回它。
  • Rental具有更多配置选项(例如可变性、子租赁、协变、解引用)。selfstack始终以相同的方式工作,并且不需要特殊配置。

许可证

根据以下任一许可证授权

  • Apache许可证版本2.0
  • MIT许可证

贡献

除非您明确声明,否则您提交的任何旨在包含在您的工作中的贡献,根据Apache-2.0许可证的定义,应如上所述双授权,不附加任何额外条款或条件。

依赖项

~2MB
~46K SLoC