]>
Commit | Line | Data |
---|---|---|
62c5094d FG |
1 | # Change Log |
2 | ||
3 | All notable changes to this project will be documented in this file. | |
4 | ||
5 | The format is based on [Keep a Changelog](https://keepachangelog.com/) | |
6 | and this project adheres to [Semantic Versioning](https://semver.org/). | |
7 | ||
8 | ## [Unreleased] | |
9 | ||
10 | ## [v0.12.3] - 2022-07-17 | |
11 | ||
12 | ## Fixed | |
13 | ||
14 | - Fixed double-drop in `RawTable::clone_from`. (#348) | |
15 | ||
16 | ## [v0.12.2] - 2022-07-09 | |
17 | ||
18 | ## Added | |
19 | ||
20 | - Added `Entry` API for `HashSet`. (#342) | |
21 | - Added `Extend<&'a (K, V)> for HashMap<K, V, S, A>`. (#340) | |
22 | - Added length-based short-circuiting for hash table iteration. (#338) | |
23 | - Added a function to access the `RawTable` of a `HashMap`. (#335) | |
24 | ||
25 | ## Changed | |
26 | ||
27 | - Edited `do_alloc` to reduce LLVM IR generated. (#341) | |
28 | ||
29 | ## [v0.12.1] - 2022-05-02 | |
30 | ||
31 | ## Fixed | |
32 | ||
33 | - Fixed underflow in `RawIterRange::size_hint`. (#325) | |
34 | - Fixed the implementation of `Debug` for `ValuesMut` and `IntoValues`. (#325) | |
35 | ||
36 | ## [v0.12.0] - 2022-01-17 | |
37 | ||
38 | ## Added | |
39 | ||
40 | - Added `From<[T; N]>` and `From<[(K, V); N]>` for `HashSet` and `HashMap` respectively. (#297) | |
41 | - Added an `allocator()` getter to HashMap and HashSet. (#257) | |
42 | - Added `insert_unique_unchecked` to `HashMap` and `HashSet`. (#293) | |
43 | - Added `into_keys` and `into_values` to HashMap. (#295) | |
44 | - Implement `From<array>` on `HashSet` and `HashMap`. (#298) | |
45 | - Added `entry_ref` API to `HashMap`. (#201) | |
46 | ||
47 | ## Changed | |
48 | ||
49 | - Bumped minimum Rust version to 1.56.1 and edition to 2021. | |
50 | - Use u64 for the GroupWord on WebAssembly. (#271) | |
51 | - Optimized `find`. (#279) | |
52 | - Made rehashing and resizing less generic to reduce compilation time. (#282) | |
53 | - Inlined small functions. (#283) | |
54 | - Use `BuildHasher::hash_one` when `feature = "nightly"` is enabled. (#292) | |
55 | - Relaxed the bounds on `Debug` for `HashSet`. (#296) | |
56 | - Rename `get_each_mut` to `get_many_mut` and align API with the stdlib. (#291) | |
57 | - Don't hash the key when searching in an empty table. (#305) | |
58 | ||
59 | ## Fixed | |
60 | ||
61 | - Guard against allocations exceeding isize::MAX. (#268) | |
62 | - Made `RawTable::insert_no_grow` unsafe. (#254) | |
63 | - Inline `static_empty`. (#280) | |
64 | - Fixed trait bounds on Send/Sync impls. (#303) | |
65 | ||
66 | ## [v0.11.2] - 2021-03-25 | |
67 | ||
68 | ## Fixed | |
69 | ||
70 | - Added missing allocator type parameter to `HashMap`'s and `HashSet`'s `Clone` impls. (#252) | |
71 | ||
72 | ## [v0.11.1] - 2021-03-20 | |
73 | ||
74 | ## Fixed | |
75 | ||
76 | - Added missing `pub` modifier to `BumpWrapper`. (#251) | |
77 | ||
78 | ## [v0.11.0] - 2021-03-14 | |
79 | ||
80 | ## Added | |
81 | - Added safe `try_insert_no_grow` method to `RawTable`. (#229) | |
82 | - Added support for `bumpalo` as an allocator without the `nightly` feature. (#231) | |
83 | - Implemented `Default` for `RawTable`. (#237) | |
84 | - Added new safe methods `RawTable::get_each_mut`, `HashMap::get_each_mut`, and | |
85 | `HashMap::get_each_key_value_mut`. (#239) | |
86 | - Added `From<HashMap<T, ()>>` for `HashSet<T>`. (#235) | |
87 | - Added `try_insert` method to `HashMap`. (#247) | |
88 | ||
89 | ## Changed | |
90 | - The minimum Rust version has been bumped to 1.49.0. (#230) | |
91 | - Significantly improved compilation times by reducing the amount of generated IR. (#205) | |
92 | ||
93 | ## Removed | |
94 | - We no longer re-export the unstable allocator items from the standard library, nor the stable shims approximating the same. (#227) | |
95 | - Removed hasher specialization support from `aHash`, which was resulting in inconsistent hashes being generated for a key. (#248) | |
96 | ||
97 | ## Fixed | |
98 | - Fixed union length comparison. (#228) | |
99 | ||
100 | ## ~~[v0.10.0] - 2021-01-16~~ | |
101 | ||
102 | This release was _yanked_ due to inconsistent hashes being generated with the `nightly` feature. (#248) | |
103 | ||
104 | ## Changed | |
105 | - Parametrized `RawTable`, `HashSet` and `HashMap` over an allocator. (#133) | |
106 | - Improved branch prediction hints on stable. (#209) | |
107 | - Optimized hashing of primitive types with AHash using specialization. (#207) | |
108 | - Only instantiate `RawTable`'s reserve functions once per key-value. (#204) | |
109 | ||
110 | ## [v0.9.1] - 2020-09-28 | |
111 | ||
112 | ## Added | |
113 | - Added safe methods to `RawTable` (#202): | |
114 | - `get`: `find` and `as_ref` | |
115 | - `get_mut`: `find` and `as_mut` | |
116 | - `insert_entry`: `insert` and `as_mut` | |
117 | - `remove_entry`: `find` and `remove` | |
118 | - `erase_entry`: `find` and `erase` | |
119 | ||
120 | ## Changed | |
121 | - Removed `from_key_hashed_nocheck`'s `Q: Hash`. (#200) | |
122 | - Made `RawTable::drain` safe. (#201) | |
123 | ||
124 | ## [v0.9.0] - 2020-09-03 | |
125 | ||
126 | ### Fixed | |
127 | - `drain_filter` now removes and yields items that do match the predicate, | |
128 | rather than items that don't. This is a **breaking change** to match the | |
129 | behavior of the `drain_filter` methods in `std`. (#187) | |
130 | ||
131 | ### Added | |
132 | - Added `replace_entry_with` to `OccupiedEntry`, and `and_replace_entry_with` to `Entry`. (#190) | |
133 | - Implemented `FusedIterator` and `size_hint` for `DrainFilter`. (#188) | |
134 | ||
135 | ### Changed | |
136 | - The minimum Rust version has been bumped to 1.36 (due to `crossbeam` dependency). (#193) | |
137 | - Updated `ahash` dependency to 0.4. (#198) | |
138 | - `HashMap::with_hasher` and `HashSet::with_hasher` are now `const fn`. (#195) | |
139 | - Removed `T: Hash + Eq` and `S: BuildHasher` bounds on `HashSet::new`, | |
140 | `with_capacity`, `with_hasher`, and `with_capacity_and_hasher`. (#185) | |
141 | ||
142 | ## [v0.8.2] - 2020-08-08 | |
143 | ||
144 | ### Changed | |
145 | - Avoid closures to improve compile times. (#183) | |
146 | - Do not iterate to drop if empty. (#182) | |
147 | ||
148 | ## [v0.8.1] - 2020-07-16 | |
149 | ||
150 | ### Added | |
151 | - Added `erase` and `remove` to `RawTable`. (#171) | |
152 | - Added `try_with_capacity` to `RawTable`. (#174) | |
153 | - Added methods that allow re-using a `RawIter` for `RawDrain`, | |
154 | `RawIntoIter`, and `RawParIter`. (#175) | |
155 | - Added `reflect_remove` and `reflect_insert` to `RawIter`. (#175) | |
156 | - Added a `drain_filter` function to `HashSet`. (#179) | |
157 | ||
158 | ### Changed | |
159 | - Deprecated `RawTable::erase_no_drop` in favor of `erase` and `remove`. (#176) | |
160 | - `insert_no_grow` is now exposed under the `"raw"` feature. (#180) | |
161 | ||
162 | ## [v0.8.0] - 2020-06-18 | |
163 | ||
164 | ### Fixed | |
165 | - Marked `RawTable::par_iter` as `unsafe`. (#157) | |
166 | ||
167 | ### Changed | |
168 | - Reduced the size of `HashMap`. (#159) | |
169 | - No longer create tables with a capacity of 1 element. (#162) | |
170 | - Removed `K: Eq + Hash` bounds on `retain`. (#163) | |
171 | - Pulled in `HashMap` changes from rust-lang/rust (#164): | |
172 | - `extend_one` support on nightly. | |
173 | - `CollectionAllocErr` renamed to `TryReserveError`. | |
174 | - Added `HashSet::get_or_insert_owned`. | |
175 | - `Default` for `HashSet` no longer requires `T: Eq + Hash` and `S: BuildHasher`. | |
176 | ||
177 | ## [v0.7.2] - 2020-04-27 | |
178 | ||
179 | ### Added | |
180 | - Added `or_insert_with_key` to `Entry`. (#152) | |
181 | ||
182 | ### Fixed | |
183 | - Partially reverted `Clone` optimization which was unsound. (#154) | |
184 | ||
185 | ### Changed | |
186 | - Disabled use of `const-random` by default, which prevented reproducible builds. (#155) | |
187 | - Optimized `repeat` function. (#150) | |
188 | - Use `NonNull` for buckets, which improves codegen for iterators. (#148) | |
189 | ||
190 | ## [v0.7.1] - 2020-03-16 | |
191 | ||
192 | ### Added | |
193 | - Added `HashMap::get_key_value_mut`. (#145) | |
194 | ||
195 | ### Changed | |
196 | - Optimized `Clone` implementation. (#146) | |
197 | ||
198 | ## [v0.7.0] - 2020-01-31 | |
199 | ||
200 | ### Added | |
201 | - Added a `drain_filter` function to `HashMap`. (#135) | |
202 | ||
203 | ### Changed | |
204 | - Updated `ahash` dependency to 0.3. (#141) | |
205 | - Optimized set union and intersection. (#130) | |
206 | - `raw_entry` can now be used without requiring `S: BuildHasher`. (#123) | |
207 | - `RawTable::bucket_index` can now be used under the `raw` feature. (#128) | |
208 | ||
209 | ## [v0.6.3] - 2019-10-31 | |
210 | ||
211 | ### Added | |
212 | - Added an `ahash-compile-time-rng` feature (enabled by default) which allows disabling the | |
213 | `compile-time-rng` feature in `ahash` to work around a Cargo bug. (#125) | |
214 | ||
215 | ## [v0.6.2] - 2019-10-23 | |
216 | ||
217 | ### Added | |
218 | - Added an `inline-more` feature (enabled by default) which allows choosing a tradeoff between | |
219 | runtime performance and compilation time. (#119) | |
220 | ||
221 | ## [v0.6.1] - 2019-10-04 | |
222 | ||
223 | ### Added | |
224 | - Added `Entry::insert` and `RawEntryMut::insert`. (#118) | |
225 | ||
226 | ### Changed | |
227 | - `Group::static_empty` was changed from a `const` to a `static` (#116). | |
228 | ||
229 | ## [v0.6.0] - 2019-08-13 | |
230 | ||
231 | ### Fixed | |
232 | - Fixed AHash accidentally depending on `std`. (#110) | |
233 | ||
234 | ### Changed | |
235 | - The minimum Rust version has been bumped to 1.32 (due to `rand` dependency). | |
236 | ||
237 | ## ~~[v0.5.1] - 2019-08-04~~ | |
238 | ||
239 | This release was _yanked_ due to a breaking change for users of `no-default-features`. | |
240 | ||
241 | ### Added | |
242 | - The experimental and unsafe `RawTable` API is available under the "raw" feature. (#108) | |
243 | - Added entry-like methods for `HashSet`. (#98) | |
244 | ||
245 | ### Changed | |
246 | - Changed the default hasher from FxHash to AHash. (#97) | |
247 | - `hashbrown` is now fully `no_std` on recent Rust versions (1.36+). (#96) | |
248 | ||
249 | ### Fixed | |
250 | - We now avoid growing the table during insertions when it wasn't necessary. (#106) | |
251 | - `RawOccupiedEntryMut` now properly implements `Send` and `Sync`. (#100) | |
252 | - Relaxed `lazy_static` version. (#92) | |
253 | ||
254 | ## [v0.5.0] - 2019-06-12 | |
255 | ||
256 | ### Fixed | |
257 | - Resize with a more conservative amount of space after deletions. (#86) | |
258 | ||
259 | ### Changed | |
260 | - Exposed the Layout of the failed allocation in CollectionAllocErr::AllocErr. (#89) | |
261 | ||
262 | ## [v0.4.0] - 2019-05-30 | |
263 | ||
264 | ### Fixed | |
265 | - Fixed `Send` trait bounds on `IterMut` not matching the libstd one. (#82) | |
266 | ||
267 | ## [v0.3.1] - 2019-05-30 | |
268 | ||
269 | ### Fixed | |
270 | - Fixed incorrect use of slice in unsafe code. (#80) | |
271 | ||
272 | ## [v0.3.0] - 2019-04-23 | |
273 | ||
274 | ### Changed | |
275 | - Changed shrink_to to not panic if min_capacity < capacity. (#67) | |
276 | ||
277 | ### Fixed | |
278 | - Worked around emscripten bug emscripten-core/emscripten-fastcomp#258. (#66) | |
279 | ||
280 | ## [v0.2.2] - 2019-04-16 | |
281 | ||
282 | ### Fixed | |
283 | - Inlined non-nightly lowest_set_bit_nonzero. (#64) | |
284 | - Fixed build on latest nightly. (#65) | |
285 | ||
286 | ## [v0.2.1] - 2019-04-14 | |
287 | ||
288 | ### Changed | |
289 | - Use for_each in map Extend and FromIterator. (#58) | |
290 | - Improved worst-case performance of HashSet.is_subset. (#61) | |
291 | ||
292 | ### Fixed | |
293 | - Removed incorrect debug_assert. (#60) | |
294 | ||
295 | ## [v0.2.0] - 2019-03-31 | |
296 | ||
297 | ### Changed | |
298 | - The code has been updated to Rust 2018 edition. This means that the minimum | |
299 | Rust version has been bumped to 1.31 (2018 edition). | |
300 | ||
301 | ### Added | |
302 | - Added `insert_with_hasher` to the raw_entry API to allow `K: !(Hash + Eq)`. (#54) | |
303 | - Added support for using hashbrown as the hash table implementation in libstd. (#46) | |
304 | ||
305 | ### Fixed | |
306 | - Fixed cargo build with minimal-versions. (#45) | |
307 | - Fixed `#[may_dangle]` attributes to match the libstd `HashMap`. (#46) | |
308 | - ZST keys and values are now handled properly. (#46) | |
309 | ||
310 | ## [v0.1.8] - 2019-01-14 | |
311 | ||
312 | ### Added | |
313 | - Rayon parallel iterator support (#37) | |
314 | - `raw_entry` support (#31) | |
315 | - `#[may_dangle]` on nightly (#31) | |
316 | - `try_reserve` support (#31) | |
317 | ||
318 | ### Fixed | |
319 | - Fixed variance on `IterMut`. (#31) | |
320 | ||
321 | ## [v0.1.7] - 2018-12-05 | |
322 | ||
323 | ### Fixed | |
324 | - Fixed non-SSE version of convert_special_to_empty_and_full_to_deleted. (#32) | |
325 | - Fixed overflow in rehash_in_place. (#33) | |
326 | ||
327 | ## [v0.1.6] - 2018-11-17 | |
328 | ||
329 | ### Fixed | |
330 | - Fixed compile error on nightly. (#29) | |
331 | ||
332 | ## [v0.1.5] - 2018-11-08 | |
333 | ||
334 | ### Fixed | |
335 | - Fixed subtraction overflow in generic::Group::match_byte. (#28) | |
336 | ||
337 | ## [v0.1.4] - 2018-11-04 | |
338 | ||
339 | ### Fixed | |
340 | - Fixed a bug in the `erase_no_drop` implementation. (#26) | |
341 | ||
342 | ## [v0.1.3] - 2018-11-01 | |
343 | ||
344 | ### Added | |
345 | - Serde support. (#14) | |
346 | ||
347 | ### Fixed | |
348 | - Make the compiler inline functions more aggressively. (#20) | |
349 | ||
350 | ## [v0.1.2] - 2018-10-31 | |
351 | ||
352 | ### Fixed | |
353 | - `clear` segfaults when called on an empty table. (#13) | |
354 | ||
355 | ## [v0.1.1] - 2018-10-30 | |
356 | ||
357 | ### Fixed | |
358 | - `erase_no_drop` optimization not triggering in the SSE2 implementation. (#3) | |
359 | - Missing `Send` and `Sync` for hash map and iterator types. (#7) | |
360 | - Bug when inserting into a table smaller than the group width. (#5) | |
361 | ||
362 | ## v0.1.0 - 2018-10-29 | |
363 | ||
364 | - Initial release | |
365 | ||
366 | [Unreleased]: https://github.com/rust-lang/hashbrown/compare/v0.12.3...HEAD | |
367 | [v0.12.3]: https://github.com/rust-lang/hashbrown/compare/v0.12.2...v0.12.3 | |
368 | [v0.12.2]: https://github.com/rust-lang/hashbrown/compare/v0.12.1...v0.12.2 | |
369 | [v0.12.1]: https://github.com/rust-lang/hashbrown/compare/v0.12.0...v0.12.1 | |
370 | [v0.12.0]: https://github.com/rust-lang/hashbrown/compare/v0.11.2...v0.12.0 | |
371 | [v0.11.2]: https://github.com/rust-lang/hashbrown/compare/v0.11.1...v0.11.2 | |
372 | [v0.11.1]: https://github.com/rust-lang/hashbrown/compare/v0.11.0...v0.11.1 | |
373 | [v0.11.0]: https://github.com/rust-lang/hashbrown/compare/v0.10.0...v0.11.0 | |
374 | [v0.10.0]: https://github.com/rust-lang/hashbrown/compare/v0.9.1...v0.10.0 | |
375 | [v0.9.1]: https://github.com/rust-lang/hashbrown/compare/v0.9.0...v0.9.1 | |
376 | [v0.9.0]: https://github.com/rust-lang/hashbrown/compare/v0.8.2...v0.9.0 | |
377 | [v0.8.2]: https://github.com/rust-lang/hashbrown/compare/v0.8.1...v0.8.2 | |
378 | [v0.8.1]: https://github.com/rust-lang/hashbrown/compare/v0.8.0...v0.8.1 | |
379 | [v0.8.0]: https://github.com/rust-lang/hashbrown/compare/v0.7.2...v0.8.0 | |
380 | [v0.7.2]: https://github.com/rust-lang/hashbrown/compare/v0.7.1...v0.7.2 | |
381 | [v0.7.1]: https://github.com/rust-lang/hashbrown/compare/v0.7.0...v0.7.1 | |
382 | [v0.7.0]: https://github.com/rust-lang/hashbrown/compare/v0.6.3...v0.7.0 | |
383 | [v0.6.3]: https://github.com/rust-lang/hashbrown/compare/v0.6.2...v0.6.3 | |
384 | [v0.6.2]: https://github.com/rust-lang/hashbrown/compare/v0.6.1...v0.6.2 | |
385 | [v0.6.1]: https://github.com/rust-lang/hashbrown/compare/v0.6.0...v0.6.1 | |
386 | [v0.6.0]: https://github.com/rust-lang/hashbrown/compare/v0.5.1...v0.6.0 | |
387 | [v0.5.1]: https://github.com/rust-lang/hashbrown/compare/v0.5.0...v0.5.1 | |
388 | [v0.5.0]: https://github.com/rust-lang/hashbrown/compare/v0.4.0...v0.5.0 | |
389 | [v0.4.0]: https://github.com/rust-lang/hashbrown/compare/v0.3.1...v0.4.0 | |
390 | [v0.3.1]: https://github.com/rust-lang/hashbrown/compare/v0.3.0...v0.3.1 | |
391 | [v0.3.0]: https://github.com/rust-lang/hashbrown/compare/v0.2.2...v0.3.0 | |
392 | [v0.2.2]: https://github.com/rust-lang/hashbrown/compare/v0.2.1...v0.2.2 | |
393 | [v0.2.1]: https://github.com/rust-lang/hashbrown/compare/v0.2.0...v0.2.1 | |
394 | [v0.2.0]: https://github.com/rust-lang/hashbrown/compare/v0.1.8...v0.2.0 | |
395 | [v0.1.8]: https://github.com/rust-lang/hashbrown/compare/v0.1.7...v0.1.8 | |
396 | [v0.1.7]: https://github.com/rust-lang/hashbrown/compare/v0.1.6...v0.1.7 | |
397 | [v0.1.6]: https://github.com/rust-lang/hashbrown/compare/v0.1.5...v0.1.6 | |
398 | [v0.1.5]: https://github.com/rust-lang/hashbrown/compare/v0.1.4...v0.1.5 | |
399 | [v0.1.4]: https://github.com/rust-lang/hashbrown/compare/v0.1.3...v0.1.4 | |
400 | [v0.1.3]: https://github.com/rust-lang/hashbrown/compare/v0.1.2...v0.1.3 | |
401 | [v0.1.2]: https://github.com/rust-lang/hashbrown/compare/v0.1.1...v0.1.2 | |
402 | [v0.1.1]: https://github.com/rust-lang/hashbrown/compare/v0.1.0...v0.1.1 |