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