• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Change Log
2
3All notable changes to this project will be documented in this file.
4
5The format is based on [Keep a Changelog](https://keepachangelog.com/)
6and this project adheres to [Semantic Versioning](https://semver.org/).
7
8## [Unreleased]
9
10## [v0.15.0] - 2024-10-01
11
12This update contains breaking changes that remove the `raw` API with the hope of
13centralising on the `HashTable` API in the future. You can follow the discussion
14and progress in #545 to discuss features you think should be added to this API
15that were previously only possible on the `raw` API.
16
17### Added
18
19- Added `borsh` feature with `BorshSerialize` and `BorshDeserialize` impls. (#525)
20- Added `Assign` impls for `HashSet` operators. (#529)
21- Added `Default` impls for iterator types. (#542)
22- Added `HashTable::iter_hash{,_mut}` methods. (#549)
23- Added `Hash{Table,Map,Set}::allocation_size` methods. (#553)
24- Implemented `Debug` and `FusedIterator` for all `HashTable` iterators. (#561)
25- Specialized `Iterator::fold` for all `HashTable` iterators. (#561)
26
27### Changed
28
29- Changed `hash_set::VacantEntry::insert` to return `OccupiedEntry`. (#495)
30- Improved`hash_set::Difference::size_hint` lower-bound. (#530)
31- Improved `HashSet::is_disjoint` performance. (#531)
32- `equivalent` feature is now enabled by default. (#532)
33- `HashSet` operators now return a set with the same allocator. (#529)
34- Changed the default hasher to foldhash. (#563)
35- `ahash` feature has been renamed to `default-hasher`. (#533)
36- Entry API has been reworked and several methods have been renamed. (#535)
37- `Hash{Map,Set}::insert_unique_unchecked` is now unsafe. (#556)
38- The signature of `get_many_mut` and related methods was changed. (#562)
39
40### Fixed
41
42* Fixed typos, stray backticks in docs. (#558, #560)
43
44### Removed
45
46- Raw entry API is now under `raw-entry` feature, to be eventually removed. (#534, #555)
47- Raw table API has been made private and the `raw` feature is removed;
48  in the future, all code should be using the `HashTable` API instead. (#531, #546)
49- `rykv` feature was removed; this is now provided by the `rykv` crate instead. (#554)
50- `HashSet::get_or_insert_owned` was removed in favor of `get_or_insert_with`. (#555)
51
52## [v0.14.5] - 2024-04-28
53
54### Fixed
55
56- Fixed index calculation in panic guard of `clone_from_impl`. (#511)
57
58## ~~[v0.14.4] - 2024-03-19~~
59
60This release was _yanked_ due to a breaking change.
61
62## [v0.14.3] - 2023-11-26
63
64### Added
65
66- Specialized `fold` implementation of iterators. (#480)
67
68### Fixed
69
70- Avoid using unstable `ptr::invalid_mut` on nightly. (#481)
71
72## [v0.14.2] - 2023-10-19
73
74### Added
75
76- `HashTable` type which provides a low-level but safe API with explicit hashing. (#466)
77
78### Fixed
79
80- Disabled the use of NEON instructions on big-endian ARM. (#475)
81- Disabled the use of NEON instructions on Miri. (#476)
82
83## [v0.14.1] - 2023-09-28
84
85### Added
86
87- Allow serializing `HashMap`s that use a custom allocator. (#449)
88
89### Changed
90
91- Use the `Equivalent` trait from the `equivalent` crate. (#442)
92- Slightly improved performance of table resizing. (#451)
93- Relaxed MSRV to 1.63.0. (#457)
94- Removed `Clone` requirement from custom allocators. (#468)
95
96### Fixed
97
98- Fixed custom allocators being leaked in some situations. (#439, #465)
99
100## [v0.14.0] - 2023-06-01
101
102### Added
103
104- Support for `allocator-api2` crate
105  for interfacing with custom allocators on stable. (#417)
106- Optimized implementation for ARM using NEON instructions. (#430)
107- Support for rkyv serialization. (#432)
108- `Equivalent` trait to look up values without `Borrow`. (#345)
109- `Hash{Map,Set}::raw_table_mut` is added which returns a mutable reference. (#404)
110- Fast path for `clear` on empty tables. (#428)
111
112### Changed
113
114- Optimized insertion to only perform a single lookup. (#277)
115- `DrainFilter` (`drain_filter`) has been renamed to `ExtractIf` and no longer drops remaining
116  elements when the iterator is dropped. #(374)
117- Bumped MSRV to 1.64.0. (#431)
118- `{Map,Set}::raw_table` now returns an immutable reference. (#404)
119- `VacantEntry` and `OccupiedEntry` now use the default hasher if none is
120  specified in generics. (#389)
121- `RawTable::data_start` now returns a `NonNull` to match `RawTable::data_end`. (#387)
122- `RawIter::{reflect_insert, reflect_remove}` are now unsafe. (#429)
123- `RawTable::find_potential` is renamed to `find_or_find_insert_slot` and returns an `InsertSlot`. (#429)
124- `RawTable::remove` now also returns an `InsertSlot`. (#429)
125- `InsertSlot` can be used to insert an element with `RawTable::insert_in_slot`. (#429)
126- `RawIterHash` no longer has a lifetime tied to that of the `RawTable`. (#427)
127- The trait bounds of `HashSet::raw_table` have been relaxed to not require `Eq + Hash`. (#423)
128- `EntryRef::and_replace_entry_with` and `OccupiedEntryRef::replace_entry_with`
129  were changed to give a `&K` instead of a `&Q` to the closure.
130
131### Removed
132
133- Support for `bumpalo` as an allocator with custom wrapper.
134  Use `allocator-api2` feature in `bumpalo` to use it as an allocator
135  for `hashbrown` collections. (#417)
136
137## [v0.13.2] - 2023-01-12
138
139### Fixed
140
141- Added `#[inline(always)]` to `find_inner`. (#375)
142- Fixed `RawTable::allocation_info` for empty tables. (#376)
143
144## [v0.13.1] - 2022-11-10
145
146### Added
147
148- Added `Equivalent` trait to customize key lookups. (#350)
149- Added support for 16-bit targets. (#368)
150- Added `RawTable::allocation_info` which provides information about the memory
151  usage of a table. (#371)
152
153### Changed
154
155- Bumped MSRV to 1.61.0.
156- Upgraded to `ahash` 0.8. (#357)
157- Make `with_hasher_in` const. (#355)
158- The following methods have been removed from the `RawTable` API in favor of
159  safer alternatives:
160  - `RawTable::erase_no_drop` => Use `RawTable::erase` or `RawTable::remove` instead.
161  - `Bucket::read` => Use `RawTable::remove` instead.
162  - `Bucket::drop` => Use `RawTable::erase` instead.
163  - `Bucket::write` => Use `Bucket::as_mut` instead.
164
165### Fixed
166
167- Ensure that `HashMap` allocations don't exceed `isize::MAX`. (#362)
168- Fixed issue with field retagging in scopeguard. (#359)
169
170## [v0.12.3] - 2022-07-17
171
172### Fixed
173
174- Fixed double-drop in `RawTable::clone_from`. (#348)
175
176## [v0.12.2] - 2022-07-09
177
178### Added
179
180- Added `Entry` API for `HashSet`. (#342)
181- Added `Extend<&'a (K, V)> for HashMap<K, V, S, A>`. (#340)
182- Added length-based short-circuiting for hash table iteration. (#338)
183- Added a function to access the `RawTable` of a `HashMap`. (#335)
184
185### Changed
186
187- Edited `do_alloc` to reduce LLVM IR generated. (#341)
188
189## [v0.12.1] - 2022-05-02
190
191### Fixed
192
193- Fixed underflow in `RawIterRange::size_hint`. (#325)
194- Fixed the implementation of `Debug` for `ValuesMut` and `IntoValues`. (#325)
195
196## [v0.12.0] - 2022-01-17
197
198### Added
199
200- Added `From<[T; N]>` and `From<[(K, V); N]>` for `HashSet` and `HashMap` respectively. (#297)
201- Added an `allocator()` getter to HashMap and HashSet. (#257)
202- Added `insert_unique_unchecked` to `HashMap` and `HashSet`. (#293)
203- Added `into_keys` and `into_values` to HashMap. (#295)
204- Implement `From<array>` on `HashSet` and `HashMap`. (#298)
205- Added `entry_ref` API to `HashMap`. (#201)
206
207### Changed
208
209- Bumped minimum Rust version to 1.56.1 and edition to 2021.
210- Use u64 for the GroupWord on WebAssembly. (#271)
211- Optimized `find`. (#279)
212- Made rehashing and resizing less generic to reduce compilation time. (#282)
213- Inlined small functions. (#283)
214- Use `BuildHasher::hash_one` when `feature = "nightly"` is enabled. (#292)
215- Relaxed the bounds on `Debug` for `HashSet`. (#296)
216- Rename `get_each_mut` to `get_many_mut` and align API with the stdlib. (#291)
217- Don't hash the key when searching in an empty table. (#305)
218
219### Fixed
220
221- Guard against allocations exceeding isize::MAX. (#268)
222- Made `RawTable::insert_no_grow` unsafe. (#254)
223- Inline `static_empty`. (#280)
224- Fixed trait bounds on Send/Sync impls. (#303)
225
226## [v0.11.2] - 2021-03-25
227
228### Fixed
229
230- Added missing allocator type parameter to `HashMap`'s and `HashSet`'s `Clone` impls. (#252)
231
232## [v0.11.1] - 2021-03-20
233
234### Fixed
235
236- Added missing `pub` modifier to `BumpWrapper`. (#251)
237
238## [v0.11.0] - 2021-03-14
239
240### Added
241- Added safe `try_insert_no_grow` method to `RawTable`. (#229)
242- Added support for `bumpalo` as an allocator without the `nightly` feature. (#231)
243- Implemented `Default` for `RawTable`. (#237)
244- Added new safe methods `RawTable::get_each_mut`, `HashMap::get_each_mut`, and
245  `HashMap::get_each_key_value_mut`. (#239)
246- Added `From<HashMap<T, ()>>` for `HashSet<T>`. (#235)
247- Added `try_insert` method to `HashMap`. (#247)
248
249### Changed
250- The minimum Rust version has been bumped to 1.49.0. (#230)
251- Significantly improved compilation times by reducing the amount of generated IR. (#205)
252
253### Removed
254- We no longer re-export the unstable allocator items from the standard library, nor the stable shims approximating the same. (#227)
255- Removed hasher specialization support from `aHash`, which was resulting in inconsistent hashes being generated for a key. (#248)
256
257### Fixed
258- Fixed union length comparison. (#228)
259
260## ~~[v0.10.0] - 2021-01-16~~
261
262This release was _yanked_ due to inconsistent hashes being generated with the `nightly` feature. (#248)
263
264### Changed
265- Parametrized `RawTable`, `HashSet` and `HashMap` over an allocator. (#133)
266- Improved branch prediction hints on stable. (#209)
267- Optimized hashing of primitive types with AHash using specialization. (#207)
268- Only instantiate `RawTable`'s reserve functions once per key-value. (#204)
269
270## [v0.9.1] - 2020-09-28
271
272### Added
273- Added safe methods to `RawTable` (#202):
274  - `get`: `find` and `as_ref`
275  - `get_mut`: `find` and `as_mut`
276  - `insert_entry`: `insert` and `as_mut`
277  - `remove_entry`: `find` and `remove`
278  - `erase_entry`: `find` and `erase`
279
280### Changed
281- Removed `from_key_hashed_nocheck`'s `Q: Hash`. (#200)
282- Made `RawTable::drain` safe. (#201)
283
284## [v0.9.0] - 2020-09-03
285
286### Fixed
287- `drain_filter` now removes and yields items that do match the predicate,
288  rather than items that don't.  This is a **breaking change** to match the
289  behavior of the `drain_filter` methods in `std`. (#187)
290
291### Added
292- Added `replace_entry_with` to `OccupiedEntry`, and `and_replace_entry_with` to `Entry`. (#190)
293- Implemented `FusedIterator` and `size_hint` for `DrainFilter`. (#188)
294
295### Changed
296- The minimum Rust version has been bumped to 1.36 (due to `crossbeam` dependency). (#193)
297- Updated `ahash` dependency to 0.4. (#198)
298- `HashMap::with_hasher` and `HashSet::with_hasher` are now `const fn`. (#195)
299- Removed `T: Hash + Eq` and `S: BuildHasher` bounds on `HashSet::new`,
300  `with_capacity`, `with_hasher`, and `with_capacity_and_hasher`.  (#185)
301
302## [v0.8.2] - 2020-08-08
303
304### Changed
305- Avoid closures to improve compile times. (#183)
306- Do not iterate to drop if empty. (#182)
307
308## [v0.8.1] - 2020-07-16
309
310### Added
311- Added `erase` and `remove` to `RawTable`. (#171)
312- Added `try_with_capacity` to `RawTable`. (#174)
313- Added methods that allow re-using a `RawIter` for `RawDrain`,
314  `RawIntoIter`, and `RawParIter`. (#175)
315- Added `reflect_remove` and `reflect_insert` to `RawIter`. (#175)
316- Added a `drain_filter` function to `HashSet`. (#179)
317
318### Changed
319- Deprecated `RawTable::erase_no_drop` in favor of `erase` and `remove`. (#176)
320- `insert_no_grow` is now exposed under the `"raw"` feature. (#180)
321
322## [v0.8.0] - 2020-06-18
323
324### Fixed
325- Marked `RawTable::par_iter` as `unsafe`. (#157)
326
327### Changed
328- Reduced the size of `HashMap`. (#159)
329- No longer create tables with a capacity of 1 element. (#162)
330- Removed `K: Eq + Hash` bounds on `retain`. (#163)
331- Pulled in `HashMap` changes from rust-lang/rust (#164):
332  - `extend_one` support on nightly.
333  - `CollectionAllocErr` renamed to `TryReserveError`.
334  - Added `HashSet::get_or_insert_owned`.
335  - `Default` for `HashSet` no longer requires `T: Eq + Hash` and `S: BuildHasher`.
336
337## [v0.7.2] - 2020-04-27
338
339### Added
340- Added `or_insert_with_key` to `Entry`. (#152)
341
342### Fixed
343- Partially reverted `Clone` optimization which was unsound. (#154)
344
345### Changed
346- Disabled use of `const-random` by default, which prevented reproducible builds. (#155)
347- Optimized `repeat` function. (#150)
348- Use `NonNull` for buckets, which improves codegen for iterators. (#148)
349
350## [v0.7.1] - 2020-03-16
351
352### Added
353- Added `HashMap::get_key_value_mut`. (#145)
354
355### Changed
356- Optimized `Clone` implementation. (#146)
357
358## [v0.7.0] - 2020-01-31
359
360### Added
361- Added a `drain_filter` function to `HashMap`. (#135)
362
363### Changed
364- Updated `ahash` dependency to 0.3. (#141)
365- Optimized set union and intersection. (#130)
366- `raw_entry` can now be used without requiring `S: BuildHasher`. (#123)
367- `RawTable::bucket_index` can now be used under the `raw` feature. (#128)
368
369## [v0.6.3] - 2019-10-31
370
371### Added
372- Added an `ahash-compile-time-rng` feature (enabled by default) which allows disabling the
373  `compile-time-rng` feature in `ahash` to work around a Cargo bug. (#125)
374
375## [v0.6.2] - 2019-10-23
376
377### Added
378- Added an `inline-more` feature (enabled by default) which allows choosing a tradeoff between
379  runtime performance and compilation time. (#119)
380
381## [v0.6.1] - 2019-10-04
382
383### Added
384- Added `Entry::insert` and `RawEntryMut::insert`. (#118)
385
386### Changed
387- `Group::static_empty` was changed from a `const` to a `static` (#116).
388
389## [v0.6.0] - 2019-08-13
390
391### Fixed
392- Fixed AHash accidentally depending on `std`. (#110)
393
394### Changed
395- The minimum Rust version has been bumped to 1.32 (due to `rand` dependency).
396
397## ~~[v0.5.1] - 2019-08-04~~
398
399This release was _yanked_ due to a breaking change for users of `no-default-features`.
400
401### Added
402- The experimental and unsafe `RawTable` API is available under the "raw" feature. (#108)
403- Added entry-like methods for `HashSet`. (#98)
404
405### Changed
406- Changed the default hasher from FxHash to AHash. (#97)
407- `hashbrown` is now fully `no_std` on recent Rust versions (1.36+). (#96)
408
409### Fixed
410- We now avoid growing the table during insertions when it wasn't necessary. (#106)
411- `RawOccupiedEntryMut` now properly implements `Send` and `Sync`. (#100)
412- Relaxed `lazy_static` version. (#92)
413
414## [v0.5.0] - 2019-06-12
415
416### Fixed
417- Resize with a more conservative amount of space after deletions. (#86)
418
419### Changed
420- Exposed the Layout of the failed allocation in CollectionAllocErr::AllocErr. (#89)
421
422## [v0.4.0] - 2019-05-30
423
424### Fixed
425- Fixed `Send` trait bounds on `IterMut` not matching the libstd one. (#82)
426
427## [v0.3.1] - 2019-05-30
428
429### Fixed
430- Fixed incorrect use of slice in unsafe code. (#80)
431
432## [v0.3.0] - 2019-04-23
433
434### Changed
435- Changed shrink_to to not panic if min_capacity < capacity. (#67)
436
437### Fixed
438- Worked around emscripten bug emscripten-core/emscripten-fastcomp#258. (#66)
439
440## [v0.2.2] - 2019-04-16
441
442### Fixed
443- Inlined non-nightly lowest_set_bit_nonzero. (#64)
444- Fixed build on latest nightly. (#65)
445
446## [v0.2.1] - 2019-04-14
447
448### Changed
449- Use for_each in map Extend and FromIterator. (#58)
450- Improved worst-case performance of HashSet.is_subset. (#61)
451
452### Fixed
453- Removed incorrect debug_assert. (#60)
454
455## [v0.2.0] - 2019-03-31
456
457### Changed
458- The code has been updated to Rust 2018 edition. This means that the minimum
459  Rust version has been bumped to 1.31 (2018 edition).
460
461### Added
462- Added `insert_with_hasher` to the raw_entry API to allow `K: !(Hash + Eq)`. (#54)
463- Added support for using hashbrown as the hash table implementation in libstd. (#46)
464
465### Fixed
466- Fixed cargo build with minimal-versions. (#45)
467- Fixed `#[may_dangle]` attributes to match the libstd `HashMap`. (#46)
468- ZST keys and values are now handled properly. (#46)
469
470## [v0.1.8] - 2019-01-14
471
472### Added
473- Rayon parallel iterator support (#37)
474- `raw_entry` support (#31)
475- `#[may_dangle]` on nightly (#31)
476- `try_reserve` support (#31)
477
478### Fixed
479- Fixed variance on `IterMut`. (#31)
480
481## [v0.1.7] - 2018-12-05
482
483### Fixed
484- Fixed non-SSE version of convert_special_to_empty_and_full_to_deleted. (#32)
485- Fixed overflow in rehash_in_place. (#33)
486
487## [v0.1.6] - 2018-11-17
488
489### Fixed
490- Fixed compile error on nightly. (#29)
491
492## [v0.1.5] - 2018-11-08
493
494### Fixed
495- Fixed subtraction overflow in generic::Group::match_byte. (#28)
496
497## [v0.1.4] - 2018-11-04
498
499### Fixed
500- Fixed a bug in the `erase_no_drop` implementation. (#26)
501
502## [v0.1.3] - 2018-11-01
503
504### Added
505- Serde support. (#14)
506
507### Fixed
508- Make the compiler inline functions more aggressively. (#20)
509
510## [v0.1.2] - 2018-10-31
511
512### Fixed
513- `clear` segfaults when called on an empty table. (#13)
514
515## [v0.1.1] - 2018-10-30
516
517### Fixed
518- `erase_no_drop` optimization not triggering in the SSE2 implementation. (#3)
519- Missing `Send` and `Sync` for hash map and iterator types. (#7)
520- Bug when inserting into a table smaller than the group width. (#5)
521
522## v0.1.0 - 2018-10-29
523
524- Initial release
525
526[Unreleased]: https://github.com/rust-lang/hashbrown/compare/v0.15.0...HEAD
527[v0.15.0]: https://github.com/rust-lang/hashbrown/compare/v0.14.5...v0.15.0
528[v0.14.5]: https://github.com/rust-lang/hashbrown/compare/v0.14.4...v0.14.5
529[v0.14.4]: https://github.com/rust-lang/hashbrown/compare/v0.14.3...v0.14.4
530[v0.14.3]: https://github.com/rust-lang/hashbrown/compare/v0.14.2...v0.14.3
531[v0.14.2]: https://github.com/rust-lang/hashbrown/compare/v0.14.1...v0.14.2
532[v0.14.1]: https://github.com/rust-lang/hashbrown/compare/v0.14.0...v0.14.1
533[v0.14.0]: https://github.com/rust-lang/hashbrown/compare/v0.13.2...v0.14.0
534[v0.13.2]: https://github.com/rust-lang/hashbrown/compare/v0.13.1...v0.13.2
535[v0.13.1]: https://github.com/rust-lang/hashbrown/compare/v0.12.3...v0.13.1
536[v0.12.3]: https://github.com/rust-lang/hashbrown/compare/v0.12.2...v0.12.3
537[v0.12.2]: https://github.com/rust-lang/hashbrown/compare/v0.12.1...v0.12.2
538[v0.12.1]: https://github.com/rust-lang/hashbrown/compare/v0.12.0...v0.12.1
539[v0.12.0]: https://github.com/rust-lang/hashbrown/compare/v0.11.2...v0.12.0
540[v0.11.2]: https://github.com/rust-lang/hashbrown/compare/v0.11.1...v0.11.2
541[v0.11.1]: https://github.com/rust-lang/hashbrown/compare/v0.11.0...v0.11.1
542[v0.11.0]: https://github.com/rust-lang/hashbrown/compare/v0.10.0...v0.11.0
543[v0.10.0]: https://github.com/rust-lang/hashbrown/compare/v0.9.1...v0.10.0
544[v0.9.1]: https://github.com/rust-lang/hashbrown/compare/v0.9.0...v0.9.1
545[v0.9.0]: https://github.com/rust-lang/hashbrown/compare/v0.8.2...v0.9.0
546[v0.8.2]: https://github.com/rust-lang/hashbrown/compare/v0.8.1...v0.8.2
547[v0.8.1]: https://github.com/rust-lang/hashbrown/compare/v0.8.0...v0.8.1
548[v0.8.0]: https://github.com/rust-lang/hashbrown/compare/v0.7.2...v0.8.0
549[v0.7.2]: https://github.com/rust-lang/hashbrown/compare/v0.7.1...v0.7.2
550[v0.7.1]: https://github.com/rust-lang/hashbrown/compare/v0.7.0...v0.7.1
551[v0.7.0]: https://github.com/rust-lang/hashbrown/compare/v0.6.3...v0.7.0
552[v0.6.3]: https://github.com/rust-lang/hashbrown/compare/v0.6.2...v0.6.3
553[v0.6.2]: https://github.com/rust-lang/hashbrown/compare/v0.6.1...v0.6.2
554[v0.6.1]: https://github.com/rust-lang/hashbrown/compare/v0.6.0...v0.6.1
555[v0.6.0]: https://github.com/rust-lang/hashbrown/compare/v0.5.1...v0.6.0
556[v0.5.1]: https://github.com/rust-lang/hashbrown/compare/v0.5.0...v0.5.1
557[v0.5.0]: https://github.com/rust-lang/hashbrown/compare/v0.4.0...v0.5.0
558[v0.4.0]: https://github.com/rust-lang/hashbrown/compare/v0.3.1...v0.4.0
559[v0.3.1]: https://github.com/rust-lang/hashbrown/compare/v0.3.0...v0.3.1
560[v0.3.0]: https://github.com/rust-lang/hashbrown/compare/v0.2.2...v0.3.0
561[v0.2.2]: https://github.com/rust-lang/hashbrown/compare/v0.2.1...v0.2.2
562[v0.2.1]: https://github.com/rust-lang/hashbrown/compare/v0.2.0...v0.2.1
563[v0.2.0]: https://github.com/rust-lang/hashbrown/compare/v0.1.8...v0.2.0
564[v0.1.8]: https://github.com/rust-lang/hashbrown/compare/v0.1.7...v0.1.8
565[v0.1.7]: https://github.com/rust-lang/hashbrown/compare/v0.1.6...v0.1.7
566[v0.1.6]: https://github.com/rust-lang/hashbrown/compare/v0.1.5...v0.1.6
567[v0.1.5]: https://github.com/rust-lang/hashbrown/compare/v0.1.4...v0.1.5
568[v0.1.4]: https://github.com/rust-lang/hashbrown/compare/v0.1.3...v0.1.4
569[v0.1.3]: https://github.com/rust-lang/hashbrown/compare/v0.1.2...v0.1.3
570[v0.1.2]: https://github.com/rust-lang/hashbrown/compare/v0.1.1...v0.1.2
571[v0.1.1]: https://github.com/rust-lang/hashbrown/compare/v0.1.0...v0.1.1
572