# Significant feature changes and additions This project follows Rust semantic versioning. ## 0.5.4 (2023-07-13) ### Added - `no_std` support for `TCell`, contributed by [Violet Leonard](https://github.com/geeklint). - `Default` for `TCell`, `TLCell` and `LCell` - Formalize MSRV of 1.60, and test ## 0.5.3 (2023-01-15) ### Added - `Hash`, `Eq` and `PartialEq` implementations for QCellOwnerID. These changes were contributed by [Simon Ask](https://github.com/simonask) and [LegionMammal978](https://github.com/LegionMammal978) ## 0.5.2 (2022-06-11) ### Added - `#[repr(transparent)]` added to `LCell`, `TCell` and `TLCell` - `get_mut` and `into_inner` added to all cell types which better supports beginning/end-of-life of the cell [Troy Hinckley](https://github.com/CeleritasCelery) contributed to this point release. ## 0.5.1 (2022-04-19) ### Added - `LCellOwner` can now be created from a [**generativity**](https://crates.io/crates/generativity) guard, which makes `LCellOwner` creation more convenient. This change was contributed by [Troy Hinckley](https://github.com/CeleritasCelery). ## 0.5.0 (2022-01-23) ### Changed - `QCellOwner` is now based on IDs derived from the addresses of heap-allocated objects. This change was contributed by [Violet Leonard](https://github.com/geeklint). This offloads maintaining lists of in-use IDs to the allocator, which improves `no_std` compatibility. ### Added - `no_std` support in `QCell` and `LCell`, contributed by [Violet Leonard](https://github.com/geeklint). - `QCellOwnerPinned` (contributed by [Violet Leonard](https://github.com/geeklint)), and `QCellOwnerSeq`. These now form a family of ID-based owners along with `QCellOwner`. ### Breaking - `QCellOwner::fast_new` is replaced by `QCellOwnerSeq::new` ## 0.4.3 (2021-09-20) ### Fixed - It is now no longer possible for a malicious coder to cheat the singleton check in `TCellOwner` and `TLCellOwner` by using covariant subtypes. Thanks to [Frank Steffahn](https://github.com/steffahn) for noticing the bug, and for providing the PR to fix the issue. ### Testing - Check common traits using `static_assertions` ## 0.4.2 (2021-08-20) ### Added - `?Sized` / unsized types / DST support, e.g. `QCell` - `cell.rw(owner)` and `cell.ro(owner)` - `TCellOwner::try_new` and `TCellOwner::wait_for_new`, contributed by [Michiel De Muycnk](https://github.com/Migi) ## 0.4.1 (2020-06-25) (internal changes) ## 0.4.0 (2019-12-24) ### Added - `Send` and `Sync` support, with full reasoning, thanks to a contribution from [Michiel de Muycnk](https://github.com/Migi) ### Breaking - `TCell` and `TLCell` are now split into separate types and the previous 'no-thread-local' feature has been removed ### Testing - `trybuild` testing of all compile_fail tests, to ensure that they're failing for the right reasons ## 0.3.0 (2019-07-24) ### Breaking - `TCell` is now thread-local-based by default, with a cargo feature to switch on old global behaviour ## 0.2.0 (2019-03-20) ### Breaking - Switch from `get()` and `get_mut()` to `ro()` and `rw()` to access cell contents - No longer require the owner to be specified when creating `TCell` and `LCell` instances. ### Added - `QCellOwnerID` for creating cells when the owner is not available ## 0.1.2 (2019-03-18) ### Added - `LCell` lifetime-based cell ## 0.1.1 (2019-03-07) ### Fixed - Make `QCellOwner::new()` completely safe. Old code that could be used maliciously to create undefined behaviour is moved to `QCellOwner::fast_new()` and marked as `unsafe`. ## 0.1.0 (2019-02-28) (first public release)