| //! Additional documentation. |
| //! |
| //! Here we have some more general topics that might be good to know that just don't fit to the |
| //! crate level intro. |
| //! |
| //! Also, there were some previous blog posts about the crate which you might find interesting. |
| //! |
| //! # Atomic orderings |
| //! |
| //! Each operation on the [`ArcSwapAny`] with [`DefaultStrategy`] type callable concurrently (eg. |
| //! [`load`], but not [`into_inner`]) contains at least one [`SeqCst`] atomic read-write operation, |
| //! therefore even operations on different instances have a defined global order of operations. |
| //! |
| //! # Features |
| //! |
| //! The `weak` feature adds the ability to use arc-swap with the [`Weak`] pointer too, |
| //! through the [`ArcSwapWeak`] type. The needed std support is stabilized in rust version 1.45 (as |
| //! of now in beta). |
| //! |
| //! The `experimental-strategies` enables few more strategies that can be used. Note that these |
| //! **are not** part of the API stability guarantees and they may be changed, renamed or removed at |
| //! any time. |
| //! |
| //! The `experimental-thread-local` feature can be used to build arc-swap for `no_std` targets, by |
| //! replacing occurences of [`std::thread_local!`] with the `#[thread_local]` directive. This |
| //! requires a nightly Rust compiler as it makes use of the experimental |
| //! [`thread_local`](https://doc.rust-lang.org/unstable-book/language-features/thread-local.html) |
| //! feature. Using this features, thread-local variables are compiled using LLVM built-ins, which |
| //! have [several underlying modes of |
| //! operation](https://doc.rust-lang.org/beta/unstable-book/compiler-flags/tls-model.html). To add |
| //! support for thread-local variables on a platform that does not have OS or linker support, the |
| //! easiest way is to use `-Ztls-model=emulated` and to implement `__emutls_get_address` by hand, |
| //! as in [this |
| //! example](https://opensource.apple.com/source/clang/clang-800.0.38/src/projects/compiler-rt/lib/builtins/emutls.c.auto.html) |
| //! from Clang. |
| //! |
| //! # Minimal compiler version |
| //! |
| //! The `1` versions will compile on all compilers supporting the 2018 edition. Note that this |
| //! applies only if no additional feature flags are enabled and does not apply to compiling or |
| //! running tests. |
| //! |
| //! [`ArcSwapAny`]: crate::ArcSwapAny |
| //! [`ArcSwapWeak`]: crate::ArcSwapWeak |
| //! [`load`]: crate::ArcSwapAny::load |
| //! [`into_inner`]: crate::ArcSwapAny::into_inner |
| //! [`DefaultStrategy`]: crate::DefaultStrategy |
| //! [`SeqCst`]: std::sync::atomic::Ordering::SeqCst |
| //! [`Weak`]: std::sync::Weak |
| |
| pub mod internal; |
| pub mod limitations; |
| pub mod patterns; |
| pub mod performance; |