Rollup merge of #93109 - JakobDegen:arc-docs, r=m-ou-se
Improve `Arc` and `Rc` documentation This makes two changes (I can split the PR if necessary, but the changes are pretty small): 1. A bunch of trait implementations claimed to be zero cost; however, they use the `Arc<T>: From<Box<T>>` impl which is definitely not free, especially for large dynamically sized `T`. 2. The code in deferred initialization examples unnecessarily used excessive amounts of `unsafe`. This has been reduced.
This commit is contained in:
commit
9474c74fb6
5 changed files with 55 additions and 65 deletions
|
@ -451,12 +451,10 @@ impl<T> Rc<T> {
|
|||
///
|
||||
/// let mut five = Rc::<u32>::new_uninit();
|
||||
///
|
||||
/// let five = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Rc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);
|
||||
/// // Deferred initialization:
|
||||
/// Rc::get_mut(&mut five).unwrap().write(5);
|
||||
///
|
||||
/// five.assume_init()
|
||||
/// };
|
||||
/// let five = unsafe { five.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*five, 5)
|
||||
/// ```
|
||||
|
@ -543,12 +541,10 @@ impl<T> Rc<T> {
|
|||
///
|
||||
/// let mut five = Rc::<u32>::try_new_uninit()?;
|
||||
///
|
||||
/// let five = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Rc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);
|
||||
/// // Deferred initialization:
|
||||
/// Rc::get_mut(&mut five).unwrap().write(5);
|
||||
///
|
||||
/// five.assume_init()
|
||||
/// };
|
||||
/// let five = unsafe { five.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*five, 5);
|
||||
/// # Ok::<(), std::alloc::AllocError>(())
|
||||
|
@ -660,14 +656,13 @@ impl<T> Rc<[T]> {
|
|||
///
|
||||
/// let mut values = Rc::<[u32]>::new_uninit_slice(3);
|
||||
///
|
||||
/// let values = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Rc::get_mut_unchecked(&mut values)[0].as_mut_ptr().write(1);
|
||||
/// Rc::get_mut_unchecked(&mut values)[1].as_mut_ptr().write(2);
|
||||
/// Rc::get_mut_unchecked(&mut values)[2].as_mut_ptr().write(3);
|
||||
/// // Deferred initialization:
|
||||
/// let data = Rc::get_mut(&mut values).unwrap();
|
||||
/// data[0].write(1);
|
||||
/// data[1].write(2);
|
||||
/// data[2].write(3);
|
||||
///
|
||||
/// values.assume_init()
|
||||
/// };
|
||||
/// let values = unsafe { values.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*values, [1, 2, 3])
|
||||
/// ```
|
||||
|
@ -738,12 +733,10 @@ impl<T> Rc<mem::MaybeUninit<T>> {
|
|||
///
|
||||
/// let mut five = Rc::<u32>::new_uninit();
|
||||
///
|
||||
/// let five = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Rc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);
|
||||
/// // Deferred initialization:
|
||||
/// Rc::get_mut(&mut five).unwrap().write(5);
|
||||
///
|
||||
/// five.assume_init()
|
||||
/// };
|
||||
/// let five = unsafe { five.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*five, 5)
|
||||
/// ```
|
||||
|
@ -777,14 +770,13 @@ impl<T> Rc<[mem::MaybeUninit<T>]> {
|
|||
///
|
||||
/// let mut values = Rc::<[u32]>::new_uninit_slice(3);
|
||||
///
|
||||
/// let values = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Rc::get_mut_unchecked(&mut values)[0].as_mut_ptr().write(1);
|
||||
/// Rc::get_mut_unchecked(&mut values)[1].as_mut_ptr().write(2);
|
||||
/// Rc::get_mut_unchecked(&mut values)[2].as_mut_ptr().write(3);
|
||||
/// // Deferred initialization:
|
||||
/// let data = Rc::get_mut(&mut values).unwrap();
|
||||
/// data[0].write(1);
|
||||
/// data[1].write(2);
|
||||
/// data[2].write(3);
|
||||
///
|
||||
/// values.assume_init()
|
||||
/// };
|
||||
/// let values = unsafe { values.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*values, [1, 2, 3])
|
||||
/// ```
|
||||
|
|
|
@ -437,12 +437,10 @@ impl<T> Arc<T> {
|
|||
///
|
||||
/// let mut five = Arc::<u32>::new_uninit();
|
||||
///
|
||||
/// let five = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Arc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);
|
||||
/// // Deferred initialization:
|
||||
/// Arc::get_mut(&mut five).unwrap().write(5);
|
||||
///
|
||||
/// five.assume_init()
|
||||
/// };
|
||||
/// let five = unsafe { five.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*five, 5)
|
||||
/// ```
|
||||
|
@ -545,12 +543,10 @@ impl<T> Arc<T> {
|
|||
///
|
||||
/// let mut five = Arc::<u32>::try_new_uninit()?;
|
||||
///
|
||||
/// let five = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Arc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);
|
||||
/// // Deferred initialization:
|
||||
/// Arc::get_mut(&mut five).unwrap().write(5);
|
||||
///
|
||||
/// five.assume_init()
|
||||
/// };
|
||||
/// let five = unsafe { five.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*five, 5);
|
||||
/// # Ok::<(), std::alloc::AllocError>(())
|
||||
|
@ -652,14 +648,13 @@ impl<T> Arc<[T]> {
|
|||
///
|
||||
/// let mut values = Arc::<[u32]>::new_uninit_slice(3);
|
||||
///
|
||||
/// let values = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Arc::get_mut_unchecked(&mut values)[0].as_mut_ptr().write(1);
|
||||
/// Arc::get_mut_unchecked(&mut values)[1].as_mut_ptr().write(2);
|
||||
/// Arc::get_mut_unchecked(&mut values)[2].as_mut_ptr().write(3);
|
||||
/// // Deferred initialization:
|
||||
/// let data = Arc::get_mut(&mut values).unwrap();
|
||||
/// data[0].write(1);
|
||||
/// data[1].write(2);
|
||||
/// data[2].write(3);
|
||||
///
|
||||
/// values.assume_init()
|
||||
/// };
|
||||
/// let values = unsafe { values.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*values, [1, 2, 3])
|
||||
/// ```
|
||||
|
@ -730,12 +725,10 @@ impl<T> Arc<mem::MaybeUninit<T>> {
|
|||
///
|
||||
/// let mut five = Arc::<u32>::new_uninit();
|
||||
///
|
||||
/// let five = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Arc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);
|
||||
/// // Deferred initialization:
|
||||
/// Arc::get_mut(&mut five).unwrap().write(5);
|
||||
///
|
||||
/// five.assume_init()
|
||||
/// };
|
||||
/// let five = unsafe { five.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*five, 5)
|
||||
/// ```
|
||||
|
@ -770,14 +763,13 @@ impl<T> Arc<[mem::MaybeUninit<T>]> {
|
|||
///
|
||||
/// let mut values = Arc::<[u32]>::new_uninit_slice(3);
|
||||
///
|
||||
/// let values = unsafe {
|
||||
/// // Deferred initialization:
|
||||
/// Arc::get_mut_unchecked(&mut values)[0].as_mut_ptr().write(1);
|
||||
/// Arc::get_mut_unchecked(&mut values)[1].as_mut_ptr().write(2);
|
||||
/// Arc::get_mut_unchecked(&mut values)[2].as_mut_ptr().write(3);
|
||||
/// // Deferred initialization:
|
||||
/// let data = Arc::get_mut(&mut values).unwrap();
|
||||
/// data[0].write(1);
|
||||
/// data[1].write(2);
|
||||
/// data[2].write(3);
|
||||
///
|
||||
/// values.assume_init()
|
||||
/// };
|
||||
/// let values = unsafe { values.assume_init() };
|
||||
///
|
||||
/// assert_eq!(*values, [1, 2, 3])
|
||||
/// ```
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue