#pointers #union #enums #thin

无 std ptr-union

通过将标签存储在对齐位中,以指针大小存储指针联合类型。

6 个版本 (稳定)

2.2.2 2022年3月25日
2.2.1 2022年3月16日
2.1.0 2020年5月27日
2.0.0 2020年4月26日
1.0.0 2020年1月31日

#1130 in Rust 模式

每月 42 次下载

MIT/Apache

61KB
939

通过将标签存储在对齐位中,以指针大小存储指针联合类型。

变更列表

2.2.2

修复

  • 该软件包现在在严格的来源模型下工作。(简而言之,它不使用 inttoptr。)
  • 该软件包现在使用更多的严格 Miri 标志进行测试。特别是,
    • -Zmiri-check-number-validity
    • -Zmiri-标签-原始-指针

2.2.0

新增

  • Union8Union16 类型。现在您可以使用最低的四位来作为标签指针。
  • Union* 现在具有安全的 new_$varianttry_deref 方法,而 Enum* 有一个 try_pack 方法。这些方法执行动态对齐检查,以确认指针足够对齐,并允许使用 Union 类型而无需使用 unsafe

2.1.0

新增

  • fn Union*::as_untagged_ptr(&self) ->ErasedPtr

2.0.0

修复

  • 联合类型现在正确地释放其内容。(哎呀!)这主要是由于以下两个原因导致的重大更改

    • 必须将特性界限添加到联合类型中,以便它们在 Drop 上。
    • Copy 无法再为 Copy 指针的联合提供,因为 DropCopy 是相互排斥的。

    我还利用这个机会对构建器证明 API 进行了一点点清理,因为之前的形状比预期的更难使用。

这是如何发生的

我们在这个crate下运行了测试套件[miri]。实际上,miri是用来诊断泄漏并确保其修复的工具。然而,之前的测试套件实际上并没有尝试丢弃任何指针联合体,而作者以为它已经这样做了。这种组合使得没有实现Drop被忽略。

使用旧版本

简而言之,最好不要这样做。但是,如果你有特殊原因必须这样做,请确保每次丢弃指针联合体时都调用unpack。这将确保内部类型被正确丢弃而不是泄漏。

  • erasable:擦除具体类型的指针。
  • rc-borrowRcArc的借用形式。
  • rc-boxRcArc已知唯一的形态。
  • slice-dst:支持自定义基于切片的DST。

最低支持的Rust版本

我们要求最低的Rust版本为1.41.0。这是为了调整本地特质的实现检查。

由于处理依赖项的方式,最低版本的支持仅通过最小版本解析(-Z minimal-versions/--minimal-versions)来保证。Rust的最低版本只有在小版本升级时才会增加,而不是补丁版本升级,并且将在变更说明中明确和明确地注明。

许可证

许可协议为以下之一

根据您的选择。

如果你是任何一家将利润置于人之上,高度付费的工人,你仍然可以使用这个crate。我只希望你会联合起来,抵制你工作场所普遍存在的对增长、控制和权力的痴迷。请为那些收入较低的同事所遭受的糟糕工作条件站出来,更普遍的是,他们对其声称捍卫的人权的不尊重。

贡献

除非你明确表示否则,根据Apache-2.0许可证定义的,你提交的任何有意包含在作品中的贡献,都应如上所述双重许可,没有额外的条款或条件。

依赖项

~22KB