3 个版本 (1 个稳定版)

1.0.0 2021 年 8 月 9 日
0.2.0 2021 年 8 月 2 日
0.1.0 2021 年 8 月 1 日

#2419 in 算法

LGPL-2.0

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 中实现

无运行时依赖