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 |
|
#1130 in Rust 模式
每月 42 次下载
61KB
939 行
通过将标签存储在对齐位中,以指针大小存储指针联合类型。
变更列表
2.2.2
修复
- 该软件包现在在严格的来源模型下工作。(简而言之,它不使用 inttoptr。)
- 该软件包现在使用更多的严格 Miri 标志进行测试。特别是,
-Zmiri-check-number-validity
和-Zmiri-标签-原始-指针
2.2.0
新增
Union8
和Union16
类型。现在您可以使用最低的四位来作为标签指针。Union*
现在具有安全的new_$variant
和try_deref
方法,而Enum*
有一个try_pack
方法。这些方法执行动态对齐检查,以确认指针足够对齐,并允许使用Union
类型而无需使用unsafe
。
2.1.0
新增
fn Union*::as_untagged_ptr(&self) ->ErasedPtr
2.0.0
修复
-
联合类型现在正确地释放其内容。(哎呀!)这主要是由于以下两个原因导致的重大更改
- 必须将特性界限添加到联合类型中,以便它们在
Drop
上。 Copy
无法再为Copy
指针的联合提供,因为Drop
和Copy
是相互排斥的。
我还利用这个机会对构建器证明 API 进行了一点点清理,因为之前的形状比预期的更难使用。
- 必须将特性界限添加到联合类型中,以便它们在
这是如何发生的
我们在这个crate下运行了测试套件[miri]。实际上,miri是用来诊断泄漏并确保其修复的工具。然而,之前的测试套件实际上并没有尝试丢弃任何指针联合体,而作者以为它已经这样做了。这种组合使得没有实现Drop
被忽略。
使用旧版本
简而言之,最好不要这样做。但是,如果你有特殊原因必须这样做,请确保每次丢弃指针联合体时都调用unpack
。这将确保内部类型被正确丢弃而不是泄漏。
相关crate
最低支持的Rust版本
我们要求最低的Rust版本为1.41.0。这是为了调整本地特质的实现检查。
由于处理依赖项的方式,最低版本的支持仅通过最小版本解析(-Z minimal-versions
/--minimal-versions
)来保证。Rust的最低版本只有在小版本升级时才会增加,而不是补丁版本升级,并且将在变更说明中明确和明确地注明。
许可证
许可协议为以下之一
- Apache License,版本2.0(LICENSE/APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE/MIT或http://opensource.org/licenses/MIT)
根据您的选择。
如果你是任何一家将利润置于人之上,高度付费的工人,你仍然可以使用这个crate。我只希望你会联合起来,抵制你工作场所普遍存在的对增长、控制和权力的痴迷。请为那些收入较低的同事所遭受的糟糕工作条件站出来,更普遍的是,他们对其声称捍卫的人权的不尊重。
贡献
除非你明确表示否则,根据Apache-2.0许可证定义的,你提交的任何有意包含在作品中的贡献,都应如上所述双重许可,没有额外的条款或条件。
依赖项
~22KB