All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased - ReleaseDate
0.7.3 - 2024-08-19
- Bumped MSRV to 1.71.0
- Updated hashbrown to 0.14.0
- Updated dashmap to 0.6.0
0.7.2 - 2023-05-15
0.7.1 - 2023-05-15
0.7.0 - 2023-04-02
- Bumped MSRV to 1.61.0
- Updated to 2021 edition
- Interning empty strings no longer counts towards the memory limit of any interners. Empty strings now take up zero bytes and therefore will neither allocate nor cause methods to return errors or throw panics if the interner is out of memory.
- Changed
ThreadedRodeo
to use a new lockfree interner that no longer requires taking a mutex in order to allocate within it - Updated DashMap and Hashbrown dependencies
- Added blanket implementations of
Reader
andResolver
for&T
and&mut T
references to types that implement those traits, andInterner
likewise for&mut T
- Added
Clone
implementation forRodeo
- Added the
Rodeo::try_clone()
andRodeo::try_clone_from()
functions
0.6.0 - 2021-09-01
- Changed the
Debug
implementations of all key types to be more condensed
- Added an
.into_inner()
method to each key type that exposes the backingNonZeroU*
it's made of
0.5.1 - 2021-06-01
- Fixed compile error in release mode when using the
serialize
feature
0.5.0 - 2021-02-19
- Implemented
Interner
,Reader
andResolver
for&ThreadedRodeo
- Added optional implementations of
Abomonation
for key types under theabomonation
feature flag - Added optional implementations of
DeepSizeOf
for key types under thedeepsize
feature flag - Added iterators for
ThreadedRodeo
- Moved the
.into_reader()
and.into_resolver()
traits fromInterner
andReader
into the newIntoReader
,IntoResolver
andIntoReaderAndResolver
traits - Updated dependencies
- Fixed race condition on key insertion for
ThreadedRodeo
0.4.1 - 2021-01-03
- Updated dependencies to latest versions
- Made
Interner
,Reader
andResolver
default their generic arguments toSpur
0.4.0 - 2021-01-02
- Added the
MemoryLimits
struct for creating memory limits on interners - Gave
Rodeo
&ThreadedRodeo
the ability to be given a hard memory capacity, currently only limiting the amount of memory allocated within the arena it uses - Added the
with_memory_limits
,with_capacity_and_memory_limits
andwith_capacity_memory_limits_and_hasher
methods toRodeo
&ThreadedRodeo
for creating interners with memory limits - Added
set_memory_limits
toRodeo
&ThreadedRodeo
for in-flight modification of memory limits - Added
current_memory_usage
andmax_memory_usage
methods toRodeo
&ThreadedRodeo
for introspection of current memory usage maximum memory usage - Added
FromIterator
,Extend
andIntoIterator
implementations forRodeo
- Added
ExactSizeIterator
implementations forIter
andStrings
- Added
IntoIterator
implementations forRodeoReader
andRodeoResolver
- Added the
inline-more
feature to enable inlining (off by default) - Added
FromIterator
andExtend
implementations toThreadedRodeo
- Added the
.contains()
and the.contains_key()
methods toRodeo
,ThreadedRodeo
,RodeoReader
andRodeoResolver
- Implemented
Serialize
andDeserialize
forRodeo
,ThreadedRodeo
,RodeoReader
andRodeoResolver
- Added
Eq
andPartialEq
implementations through the various interners - Added
Index
implementations for all interners - Added the
Interner
,Reader
andResolver
traits - Loosened trait bounds on
Rodeo
methods
- Debug views of all interners now show their arenas
- Made
Key::into_usize
safe - External apis are no longer
#[inline]
by default, for that use theinline-more
feature .get_or_intern()
and.get_or_intern_static()
now return aResult<T, LassoError>
to allow intelligently handling failure- Bumped MSRV to 1.40.0
- Removed dependency on serde derive
0.3.1 - 2020-07-24
- Added the
get_or_intern_static
andtry_get_or_intern_static
methods toThreadedRodeo
(Thanks to @jonas-schievink)
0.3.0 - 2020-07-12
This version really wouldn't be possible without the amazing work of @CAD97. They were an amazing asset in improving the memory efficiency of lasso and I can't thank them enough
- Added the
get_or_intern_static
andtry_get_or_intern_static
methods for zero-copy static string internment - Added the
Capacity
struct for better internment estimates and more accurate pre-allocation
- Lasso's single-threaded configuration now supports back to Rust 1.34! Thanks to @jyn514 for their hard work!
Rodeo
andRodeoReader
now use less memory since they only store their interned strings' pointers onceRodeo
andRodeoReader
use a different hashing strategy for their maps, instead of using a hashed string and key pair, they now use the key hashed as their paired string. This allows for decreased memory usage- The arena backing all interners now increases the amount of memory it allocates exponentially (The same doubling strategy used by
Vec
is used). This allows for fewer allocations to happen as more strings are interned hashbrown
is now a default dependency due toHashMap
'sraw_api
not being stable- Relaxed trait bounds of many structs and functions
- Made custom
Debug
implementations to cut the excess and unneeded output - Exported the
Strings
andIter
structs - The
with_capacity
methods now use theCapacity
struct
- Removed the
hashbrown-table
andnightly
features
- Added Serde support with the
serialize
feature
- Fixed
Send
forRodeo
- Added single-threaded interner
- Added
try_get_or_intern
- Added feature for
hashbrown
- Added feature for
parking_lot
- Added
no-std
feature - Added
Key::try_from_usize
- Added
MiniSpur
- Added
MicroCord
- Removed blanket impls for
u8
-usize
& the nonzero varieties - Added lifetimes to all
Rodeo
types - Added lifetime to
Key
- Added the ID requirement to
Key
- Added
try_resolve
s andresolve_unchecked
s - Added
strings()
anditer()
methods toRodeo
,RodeoResolver
andRodeoReader
- Strings are now allocated via an arena allocator
- Renamed
Lasso
toThreadedRodeo
- Renamed
ReadOnlyLasso
toRodeoReader
- Renamed
ResolverLasso
toRodeoResolver
- Changed default impl of
Key::from_usize
- Added
Send
andSync
bounds forThreadedRodeo
,RodeoResolver
andRodeoReader
- Changed internals of
get_or_intern
to betry_get_or_intern.expect()
multi-threaded
is now actually disabled by default
- Removed
.intern
from all structs Rodeo
andThreadedRodeo
no longer implementClone
- Fixed memory leaks and possible unsoundness
- Fixed data races on
ThreadedRodeo
- Fixed memory leaks in
ThreadedRodeo
, for real this time