Planned once the dust of 1.0.0-beta.1 settles, since 1.0.0-beta.1 ended up being bigger than I’d earlier intended.
-
Fixed the broken
Extendimplementation added in 1.0.0-beta.1. -
Split the hashbrown implementation into a new module,
hashbrown: std and hashbrown can now coexist completely peacefully, withanymap::Mapbeing powered bystd::collections::hash_map, andanymap::hashbrown::Mapbeing powered byhashbrown::hash_map. Theraw_hash_mapalias, provided in 1.0.0-beta.1 because of the ambiguity of what backedanymap::Map, is removed as superfluous and useless.RawMapremains, despite not being required, as an ergonomic improvement. With this, we’re back to proper completely additive Cargo features.
-
Removed
anymap::any::Anyin favour of just plaincore::any::Any, since itsSend/Syncstory is now long stable.- This loses
Any + Sync.CloneAny + Syncis also removed for consistency. (SoAny + Syncis gone, butAny,Any + SendandAny + Send + Syncremain, plus the same set forCloneAny.)
- This loses
-
anymap::any::CloneAnymoved toanymap::CloneAny. With nothing public left inanymap::any, it is removed. -
Relicensed from MIT/Apache-2.0 to BlueOak-1.0.0/MIT/Apache-2.0.
-
Increased the minimum supported version of Rust from 1.7.0 to 1.36.0.
-
no_std is now possible in the usual way (default Cargo feature 'std'), depending on alloc and hashbrown.
-
Removed the
benchCargo feature which was mostly to work around historical Cargo limitations, but was solved by moving benchmarks fromsrc/lib.rstobenches/bench.rseven before those limitations were lifted. The benchmarks still won’t run on anything but nightly, but that don’t signify. -
Implemented
DefaultonMap(not just onRawMap). -
Added
Entry::{or_default, and_modify}(std::collections::hash_map parity). -
Removed the
anymap::rawwrapper layer aroundstd::collections::hash_map, in favour of exposing the rawHashMapdirectly. I think there was a reason I did it that seven years ago, but I think that reason may have dissolved by now, and I can’t think of it and I don’t like the particular safeas_mut/unsafe insert approach that I used. Because of the hashbrown stuff, I have retainedanymap::RawMapis an alias, andanymap::raw_hash_maptoo. The end result of this is that raw access can finally access things that have stabilised since Rust 1.7.0, and we’ll no longer need to play catch-up. -
Worked around the spurious
where_clauses_object_safetyfuture-compatibility lint that has been raised since mid-2018. If you put#![allow(where_clauses_object_safety)]on your binary crates for this reason, you can remove it.
- Remove superfluous Clone bound on Entry methods (#26)
- Consistent application of
#[inline]where it should be - Fix bad performance (see 724f94758def9f71ad27ff49e47e908a431c2728 for details)
- Ungate
drainiterator (stable from Rust 1.6.0) - Ungate efficient hashing (stable from Rust 1.7.0)
- Remove
unstableCargo feature (in favour of abenchfeature for benchmarking)
- Rust warning updates only
- Unstable Rust compatibility updates
- Support concurrent maps (
Send + Syncbound) - Rename
nightlyfeature tounstable - Implement
DebugforMapandRawMap - Replace
cloneCargo feature with arcane DST magicks
I’m not giving a changelog for these artefacts of ancient history. If you really care you can look through the Git history easily enough. Most of the releases were just compensating for changes to the language (that being before Rust 1.0; yes, this crate has been around for a while).
I do think that src/lib.rs in the first commit is a work of art,
a thing of great beauty worth looking at; its simplicity is delightful,
and it doesn’t even need to contain any unsafe code.