pub unsafe trait StableOrd: Ord {
const CAN_USE_UNSTABLE_SORT: bool;
}
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 T
and*mut T
because 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.