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