3 个版本 (1 个稳定版)
1.0.0 | 2021 年 8 月 9 日 |
---|---|
0.2.0 | 2021 年 8 月 2 日 |
0.1.0 | 2021 年 8 月 1 日 |
#2419 in 算法
33KB
713 行
Misfortunate
Misfortunate 是一组不寻常的安全 Rust 特性的实现
不寻常?
Rust 的安全特性包含了一些关于它们预期如何工作的合理预期。但与 unsafe 特性不同,语言承诺即使你不遵守,你的程序也不会出现未定义行为。
Misfortunate 提供的实现符合任何特性的函数签名,因此确实可以用作该特性的实现,但它们违背了标准中设定的预期。
示例:std::cmp::Eq 是一个特性,承诺该类型表现出等价性,而 std:#️⃣:Hash 是一个特性,承诺该类型可以以一致的方式哈希。Misfortunate 的 [Maxwell] 类型实现了这两个特性,但每个实例的哈希值都相同,而它们彼此之间或与自身都不相等。
C++
如果你有丰富的 C++ 经验,这可能会让你觉得这是一个奇怪的想法。与 Rust 的特性不同,每个 C++ 概念只由其语法定义。任何语义都是程序员需要考虑的问题。例如,在 C++ 中,float 是 std::totally_ordered,程序员有责任在使用需要 std::totally_ordered 类型浮点数的算法时确保它们永远不会是 NaN。而在 Rust 中,f32 不是 Ord,所以你不会错误地尝试对 NaN 的 Vec 进行排序。
因此,这样的类型集合在 C++ 中几乎没有意义。然而,在 Rust 中,不具备所需特性的类型通常根本不会实现特性,这里展示的类型是为了娱乐和启迪。
特性列表
Eq 在 Always、Funhouse、Maxwell、Mirror、Oneway{Equal、Greater、Less}、Reverse 中实现
Ord 在 Always、Oneway{Equal、Greater、Less}、Reverse 中实现
std:#️⃣:Hash 在 Maxwell 中实现
std::io::{Read、Write} 在 BlackHole、LoadLetter 中实现
std::fmt::Write 在 BlackHole、Pristine 中实现
std::borrow::{Borrow、BorrowMut} 在 Loaner 中实现
ExactSizeIterator 在 Comte 中实现
Clone 在 Multiplicity 中实现
Extend 在 BlackHole 中实现
std::iter::FromIterator 在 BlackHole 中实现
std::ops::{Deref、DerefMut} 在 Double 中实现