pub trait StableOrd: Ord {
const CAN_USE_UNSTABLE_SORT: bool;
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: ();
}Expand description
Trait for marking a type as having a sort order that is stable across compilation session boundaries. More formally:
Ord::cmp(a1, b1) == Ord::cmp(a2, b2)
where a2 = decode(encode(a1, context1), context2)
b2 = decode(encode(b1, context1), context2)i.e. the result of Ord::cmp is not influenced by encoding
the values in one session and then decoding them in another
session.
This is trivially true for types where encoding and decoding don’t change the bytes of the values that are used during comparison and comparison only depends on these bytes (as opposed to some non-local state). Examples are u32, String, Path, etc.
But it is not true for:
*const Tand*mut Tbecause the values of these pointers will change between sessions.DefIndex,CrateNum,LocalDefId, because their concrete values depend on state that might be different between compilation sessions.
The associated constant CAN_USE_UNSTABLE_SORT denotes whether
unstable sorting can be used for this type. Set to true if and
only if a == b implies a and b are fully indistinguishable.
Required Associated Constants§
const CAN_USE_UNSTABLE_SORT: bool
Sourceconst THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: ()
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: ()
Marker to ensure that implementors have carefully considered
whether their Ord implementation obeys this trait’s contract.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl StableOrd for &str
impl StableOrd for &str
const CAN_USE_UNSTABLE_SORT: bool = true
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
Source§impl StableOrd for ()
impl StableOrd for ()
const CAN_USE_UNSTABLE_SORT: bool = true
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
Source§impl StableOrd for Hash64
impl StableOrd for Hash64
const CAN_USE_UNSTABLE_SORT: bool = true
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
Source§impl StableOrd for Hash128
impl StableOrd for Hash128
const CAN_USE_UNSTABLE_SORT: bool = true
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
Source§impl StableOrd for OsStr
impl StableOrd for OsStr
const CAN_USE_UNSTABLE_SORT: bool = true
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
Source§impl StableOrd for Path
impl StableOrd for Path
Source§const CAN_USE_UNSTABLE_SORT: bool = true
const CAN_USE_UNSTABLE_SORT: bool = true
FIXME(Zalathar): Unstably sorting paths is pre-existing behavior, but potentially wrong.
Source§const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
Stdlib path sorting should (hopefully) not change.
Source§impl StableOrd for PathBuf
impl StableOrd for PathBuf
Source§const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ()
Stdlib path sorting should (hopefully) not change.