Skip to main content

StableHash

Trait StableHash 

Source
pub trait StableHash {
    // Required method
    fn stable_hash<Hcx: StableHashCtxt>(
        &self,
        hcx: &mut Hcx,
        hasher: &mut StableHasher,
    );
}
Expand description

Something that implements StableHash can be hashed in a way that is stable across multiple compilation sessions.

Note that StableHash imposes rather more strict requirements than usual hash functions:

  • Stable hashes are sometimes used as identifiers. Therefore they must conform to the corresponding PartialEq implementations:

    • x == y implies stable_hash(x) == stable_hash(y), and
    • x != y implies stable_hash(x) != stable_hash(y).

    That second condition is usually not required for hash functions (e.g. Hash). In practice this means that stable_hash must feed any information into the hasher that a PartialEq comparison takes into account. See #49300 for an example where violating this invariant has caused trouble in the past.

  • stable_hash() must be independent of the current compilation session. E.g. they must not hash memory addresses or other things that are “randomly” assigned per compilation session.

  • stable_hash() must be independent of the host architecture. The StableHasher takes care of endianness and isize/usize platform differences.

Required Methods§

Source

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

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<K, V> !StableHash for HashMap<K, V>

Source§

impl<V> !StableHash for HashSet<V>

Source§

impl StableHash for Ordering

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl StableHash for bool

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl StableHash for char

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for f32

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl StableHash for f64

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl StableHash for i8

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for i16

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for i32

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for i64

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for i128

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for isize

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for !

Source§

fn stable_hash<Hcx>(&self, _hcx: &mut Hcx, _hasher: &mut StableHasher)

Source§

impl StableHash for str

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl StableHash for u8

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for u16

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for u32

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for u64

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for u128

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for ()

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for usize

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for Hash64

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for Hash128

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for String

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl StableHash for NonZero<u32>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl StableHash for NonZero<usize>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl StableHash for OsStr

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for Path

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for PathBuf

Source§

fn stable_hash<Hcx>(&self, _: &mut Hcx, hasher: &mut StableHasher)

Source§

impl StableHash for [u8]

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<'a, T> StableHash for &'a T
where T: StableHash + ?Sized,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<A, const N: usize> StableHash for SmallVec<[A; N]>
where A: StableHash,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<I: Idx> StableHash for DenseBitSet<I>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, _hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<I: Idx, T> StableHash for IndexSlice<I, T>
where T: StableHash,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<I: Idx, T> StableHash for IndexVec<I, T>
where T: StableHash,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<K> StableHash for BTreeSet<K>
where K: StableHash + StableOrd,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<K, R> StableHash for IndexSet<K, R>
where K: StableHash + Eq + Hash, R: BuildHasher,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<K, V> StableHash for BTreeMap<K, V>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<K, V, R> StableHash for IndexMap<K, V, R>
where K: StableHash + Eq + Hash, V: StableHash, R: BuildHasher,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<R: Idx, C: Idx> StableHash for BitMatrix<R, C>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, _hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T1, T2> StableHash for Result<T1, T2>
where T1: StableHash, T2: StableHash,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T1, T2, T3> StableHash for (T1, T2, T3)
where T1: StableHash, T2: StableHash, T3: StableHash,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T1, T2, T3, T4> StableHash for (T1, T2, T3, T4)
where T1: StableHash, T2: StableHash, T3: StableHash, T4: StableHash,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T1: StableHash> StableHash for (T1,)

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T1: StableHash, T2: StableHash> StableHash for (T1, T2)

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T> StableHash for Option<T>
where T: StableHash,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T> StableHash for PhantomData<T>

Source§

fn stable_hash<Hcx>(&self, _hcx: &mut Hcx, _hasher: &mut StableHasher)

Source§

impl<T> StableHash for Discriminant<T>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, _: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T> StableHash for RangeInclusive<T>
where T: StableHash,

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T: StableHash> StableHash for [T]

Source§

default fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T: StableHash> StableHash for Vec<T>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T: ?Sized + StableHash> StableHash for Box<T>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T: ?Sized + StableHash> StableHash for Rc<T>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Source§

impl<T: ?Sized + StableHash> StableHash for Arc<T>

Source§

fn stable_hash<Hcx: StableHashCtxt>( &self, hcx: &mut Hcx, hasher: &mut StableHasher, )

Implementors§