I just released internment 0.5.2. An interned object is a smart pointer type that ensures that identical objects have identical pointer values, so rather than hashing an object you can hash its pointer, and comparisons for equality reduce to comparison of pointer values.
The most recent feature is that internment now uses
std::ptr::NonNull to introduce a niche, so
Option<LocalIntern<T>> will occupy the same space as
LocalIntern<T>, which is the size of a single pointer (and similarly for
Intern<T> already had this feature because it does not use raw pointers internally (or any unsafe code!) since earlier this year.
Also earlier this year, I have culled a few dependencies, and hid
ArcIntern under a feature ("arc"), so you don't have to pay for its dependencies if you don't use threads.