I’m decently “functional” on my term project for my CS Seminar, which is an implementation of A Wait-Free Hash Map (Laborde).
(“Functional” as in I have a single-threaded test that a insert followed by get gives the value back, and that get doesn’t conjure values out of nowhere, but I’m missing the two other “major” operations of update and delete. (They’re next to be implemented.))
I’m not sure exactly how much of the std HashMap API I’ll be able to replicate, but a decent amount should be possible within the timeframe of the rest of the semester. The original paper also seems to assume perfect hashing unless I’ve sorely misunderstood (which would be fun), so I’m actually not sure what happens in case of a hash collision.
TL;DR this was interesting academically but I unfortunately won’t be able to recommend it practically 
Maybe I’ll feel inclined to revisit it at some point and actually try to write it like I’m writing Rust and not translating obtuse pseudocode algorithms.
The bounds I ended up with are pretty interesting:
pub struct HashMap<K, V, B = RandomState>
where
K: Hash + Eq + Clone,
V: Clone,
for<'a> &'a V: PartialEq,
B: BuildHasher,
though I could remove the Clone bound since it’s only used for attempted entry, and just forget it if the attempted entry fails…
(The actual items end up behind an Arc because they need to be atomically swappable so this was a decent solution to giving out references to it when it could then be deleted out of the hashmap from right underneath you)