1# 1.6.0 2 3* Fix a data race reported by MIRI. 4* Avoid violating stacked borrows (AFAIK these are still experimental and not 5 normative, but better safe than sorry). (#80). 6* The `AccessConvert` wrapper is needed less often in practice (#77). 7 8# 1.5.1 9 10* bug: Insufficient synchronization on weak platforms (#76). 11 12 Never observed in practice (it's suspected practical weak platforms like ARM 13 are still stronger than the model), but still technically UB. 14* docs: Mention triomphe's `ThinArc` around the fat-pointer limitations. 15 16# 1.5.0 17 18* Support serde (by a feature). 19 20# 1.4.0 21 22* Allow const-initializing ArcSwapOption (`const_empty` method). 23 24# 1.3.2 25 26* More helpful description of the `AsRaw` trait (isn't implemented for owned 27 `Arc`/`Option<Arc>`). 28 29# 1.3.1 30 31* Cache doc improvements. 32 33# 1.3.0 34 35* Allow mapping of DynAccess. 36* Fix some lints. 37* Don't leave threads running in tests/doctests. It's a bad form and annoys 38 miri. 39 40# 1.2.0 41 42* Miri and 32 bit tests in CI. 43* Making the writers lock-free. Soft-removing the IndependentStrategy, as it is 44 no longer needed (hidden and the same as the DafultStrategy). 45 46# 1.1.0 47 48* Fix soundness bug around access::Map. Technically a breaking change, but 49 unlikely to bite and breaking seems to be the least bad option. #45. 50 51# 1.0.0 52 53* Remove Clone implementation. People are often confused by it and it is easy to 54 emulate by hand in the rare case it is actually needed. 55 56# 1.0.0-rc1 57 58* Get rid of the `load_signal_safe`. It only complicates things and it is niche; 59 signal-hook-registry has its own simplified version. 60* Avoid `from_ptr(as_ptr())`. Slight change in `RefCnt::inc` which technically 61 is API breaking change, but this one should not matter in practice. 62* Extend documentation about clone behaviour. 63* Few more traits for Guard (`From<T: RefCnt>`, `Default`). 64* Get rid of `rcu_unwap`, the whole concept is a trap. 65* Hide the whole gen lock thing. 66* Introduce the `Strategy`, as a high level way to choose how exactly the 67 locking happens. 68 - Not possible to implement by downstream users just yet, or call them. 69 - The CaS is its own trait for flexibility. 70* Adding the SimpleGenLock experimental strategy. 71 - Not part of stability guarantees. 72 73# 0.4.7 74 75* Rename the `unstable-weak` to `weak` feature. The support is now available on 76 1.45 (currently in beta). 77 78# 0.4.6 79 80* Adjust to `Weak::as_ptr` from std (the weak pointer support, relying on 81 unstable features). 82* Support running on miri (without some optimizations), so dependencies may run 83 miri tests. 84* Little optimization when waiting out the contention on write operations. 85 86# 0.4.5 87 88* Added `Guard::from_inner`. 89 90# 0.4.4 91 92* Top-level docs rewrite (less rambling, hopefully more readable). 93 94# 0.4.3 95 96* Fix the `Display` implementation on `Guard` to correctly delegate to the 97 underlying `Display` implementation. 98 99# 0.4.2 100 101* The Access functionality ‒ ability to pass a handle to subpart of held data to 102 somewhere with the ability to update itself. 103* Mapped cache can take `FnMut` as well as `Fn`. 104 105# 0.4.1 106 107* Mapped caches ‒ to allow giving access to parts of config only. 108 109# 0.4.0 110 111* Support for Weak pointers. 112* RefCnt implemented for Rc. 113* Breaking: Big API cleanups. 114 - Peek is gone. 115 - Terminology of getting the data unified to `load`. 116 - There's only one kind of `Guard` now. 117 - Guard derefs to the `Arc`/`Option<Arc>` or similar. 118 - `Cache` got moved to top level of the crate. 119 - Several now unneeded semi-internal traits and trait methods got removed. 120* Splitting benchmarks into a separate sub-crate. 121* Minor documentation improvements. 122 123# 0.3.11 124 125* Prevention against UB due to dropping Guards and overflowing the guard 126 counter (aborting instead, such problem is very degenerate anyway and wouldn't 127 work in the first place). 128 129# 0.3.10 130 131* Tweak slot allocation to take smaller performance hit if some leases are held. 132* Increase the number of lease slots per thread to 8. 133* Added a cache for faster access by keeping an already loaded instance around. 134 135# 0.3.9 136 137* Fix Send/Sync for Guard and Lease (they were broken in the safe but 138 uncomfortable direction ‒ not implementing them even if they could). 139 140# 0.3.8 141 142* `Lease<Option<_>>::unwrap()`, `expect()` and `into_option()` for convenient 143 use. 144 145# 0.3.7 146 147* Use the correct `#[deprecated]` syntax. 148 149# 0.3.6 150 151* Another locking store (`PrivateSharded`) to complement the global and private 152 unsharded ones. 153* Comparison to other crates/approaches in the docs. 154 155# 0.3.5 156 157* Updates to documentation, made it hopefully easier to digest. 158* Added the ability to separate gen-locks of one ArcSwapAny from others. 159* Some speed improvements by inlining. 160* Simplified the `lease` method internally, making it faster in optimistic 161 cases. 162 163# 0.3.4 164 165* Another potentially weak ordering discovered (with even less practical effect 166 than the previous). 167 168# 0.3.3 169 170* Increased potentially weak ordering (probably without any practical effect). 171 172# 0.3.2 173 174* Documentation link fix. 175 176# 0.3.1 177 178* Few convenience constructors. 179* More tests (some randomized property testing). 180 181# 0.3.0 182 183* `compare_and_swap` no longer takes `&Guard` as current as that is a sure way 184 to create a deadlock. 185* Introduced `Lease` for temporary storage, which doesn't suffer from contention 186 like `load`, but doesn't block writes like `Guard`. The downside is it slows 187 down with number of held by the current thread. 188* `compare_and_swap` and `rcu` uses leases. 189* Made the `ArcSwap` as small as the pointer itself, by making the 190 shards/counters and generation ID global. This comes at a theoretical cost of 191 more contention when different threads use different instances. 192 193# 0.2.0 194 195* Added an `ArcSwapOption`, which allows storing NULL values (as None) as well 196 as a valid pointer. 197* `compare_and_swap` accepts borrowed `Arc` as `current` and doesn't consume one 198 ref count. 199* Sharding internal counters, to improve performance on read-mostly contented 200 scenarios. 201* Providing `peek_signal_safe` as the only async signal safe method to use 202 inside signal handlers. This removes the footgun with dropping the `Arc` 203 returned from `load` inside a signal handler. 204 205# 0.1.4 206 207* The `peek` method to use the `Arc` inside without incrementing the reference 208 count. 209* Some more (and hopefully better) benchmarks. 210 211# 0.1.3 212 213* Documentation fix (swap is *not* lock-free in current implementation). 214 215# 0.1.2 216 217* More freedom in the `rcu` and `rcu_unwrap` return types. 218 219# 0.1.1 220 221* `rcu` support. 222* `compare_and_swap` support. 223* Added some primitive benchmarks. 224 225# 0.1.0 226 227* Initial implementation. 228