1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
# 0.4.8
* Backport of fix to soundness issue in #45 (access::Map from Constant can lead
to dangling references).
# 0.4.7
* Rename the `unstable-weak` to `weak` feature. The support is now available on
1.45 (currently in beta).
# 0.4.6
* Adjust to `Weak::as_ptr` from std (the weak pointer support, relying on
unstable features).
* Support running on miri (without some optimizations), so dependencies may run
miri tests.
* Little optimization when waiting out the contention on write operations.
# 0.4.5
* Added `Guard::from_inner`.
# 0.4.4
* Top-level docs rewrite (less rambling, hopefully more readable).
# 0.4.3
* Fix the `Display` implementation on `Guard` to correctly delegate to the
underlying `Display` implementation.
# 0.4.2
* The Access functionality ‒ ability to pass a handle to subpart of held data to
somewhere with the ability to update itself.
* Mapped cache can take `FnMut` as well as `Fn`.
# 0.4.1
* Mapped caches ‒ to allow giving access to parts of config only.
# 0.4.0
* Support for Weak pointers.
* RefCnt implemented for Rc.
* Breaking: Big API cleanups.
- Peek is gone.
- Terminology of getting the data unified to `load`.
- There's only one kind of `Guard` now.
- Guard derefs to the `Arc`/`Option<Arc>` or similar.
- `Cache` got moved to top level of the crate.
- Several now unneeded semi-internal traits and trait methods got removed.
* Splitting benchmarks into a separate sub-crate.
* Minor documentation improvements.
# 0.3.11
* Prevention against UB due to dropping Guards and overflowing the guard
counter (aborting instead, such problem is very degenerate anyway and wouldn't
work in the first place).
# 0.3.10
* Tweak slot allocation to take smaller performance hit if some leases are held.
* Increase the number of lease slots per thread to 8.
* Added a cache for faster access by keeping an already loaded instance around.
# 0.3.9
* Fix Send/Sync for Guard and Lease (they were broken in the safe but
uncomfortable direction ‒ not implementing them even if they could).
# 0.3.8
* `Lease<Option<_>>::unwrap()`, `expect()` and `into_option()` for convenient
use.
# 0.3.7
* Use the correct `#[deprecated]` syntax.
# 0.3.6
* Another locking store (`PrivateSharded`) to complement the global and private
unsharded ones.
* Comparison to other crates/approaches in the docs.
# 0.3.5
* Updates to documentation, made it hopefully easier to digest.
* Added the ability to separate gen-locks of one ArcSwapAny from others.
* Some speed improvements by inlining.
* Simplified the `lease` method internally, making it faster in optimistic
cases.
# 0.3.4
* Another potentially weak ordering discovered (with even less practical effect
than the previous).
# 0.3.3
* Increased potentially weak ordering (probably without any practical effect).
# 0.3.2
* Documentation link fix.
# 0.3.1
* Few convenience constructors.
* More tests (some randomized property testing).
# 0.3.0
* `compare_and_swap` no longer takes `&Guard` as current as that is a sure way
to create a deadlock.
* Introduced `Lease` for temporary storage, which doesn't suffer from contention
like `load`, but doesn't block writes like `Guard`. The downside is it slows
down with number of held by the current thread.
* `compare_and_swap` and `rcu` uses leases.
* Made the `ArcSwap` as small as the pointer itself, by making the
shards/counters and generation ID global. This comes at a theoretical cost of
more contention when different threads use different instances.
# 0.2.0
* Added an `ArcSwapOption`, which allows storing NULL values (as None) as well
as a valid pointer.
* `compare_and_swap` accepts borrowed `Arc` as `current` and doesn't consume one
ref count.
* Sharding internal counters, to improve performance on read-mostly contented
scenarios.
* Providing `peek_signal_safe` as the only async signal safe method to use
inside signal handlers. This removes the footgun with dropping the `Arc`
returned from `load` inside a signal handler.
# 0.1.4
* The `peek` method to use the `Arc` inside without incrementing the reference
count.
* Some more (and hopefully better) benchmarks.
# 0.1.3
* Documentation fix (swap is *not* lock-free in current implementation).
# 0.1.2
* More freedom in the `rcu` and `rcu_unwrap` return types.
# 0.1.1
* `rcu` support.
* `compare_and_swap` support.
* Added some primitive benchmarks.
# 0.1.0
* Initial implementation.
|