Commit Graph

92 Commits

Author SHA1 Message Date
Mazdak Farrokhzad dee08ba55a Rollup merge of #61797 - Thomasdezeeuw:stablise-weak_ptr_eq, r=RalfJung
Stabilise weak_ptr_eq

Implemented in #55987.

Closes #55981.
2019-09-14 22:16:03 +02:00
Alexander Regueiro b0006dff10 A few cosmetic improvements to code & comments in liballoc and libcore 2019-09-06 16:02:25 +01:00
Thomas de Zeeuw 307804a00d Update {rc, sync}::Weak::ptr_eq doc about comparing Weak::new 2019-08-25 13:07:54 +02:00
Thomas de Zeeuw d86516d91e Stabilise weak_ptr_eq 2019-08-25 13:06:57 +02:00
Mazdak Farrokhzad 4486c02695 Rollup merge of #63252 - nrc:arc-doc, r=alexcrichton
Remove recommendation about idiomatic syntax for Arc::clone

I believe we should not make this recommendation. I don't want to argue that `Arc::clone` is less idiomatic than `arc.clone`, but that the choice is not clear cut and that we should not be making this kind of call in the docs.

The `.clone()` form has advantages too: it is more succinct, it is more likely to be understood by beginners, and it is more uniform with other `clone` calls, indeed with most other method calls.

Whichever approach is better, I think that this discussion belongs in a style guide or textbook, rather than the library docs. We don't talk much about idiomatic code in the docs, this place is pretty exceptional.

The recommendation is also not followed in this repo. It is hard to figure out how many calls there are of the `.clone()` form, but there are 1550 uses of `Arc` and only 65 uses of `Arc::clone`. The recommendation has existed for over two years.

The recommendation was added in https://github.com/rust-lang/rust/pull/42137, as a result of https://github.com/rust-lang/rfcs/pull/1954. However, note that that RFC was closed because it was not necessary to change the docs (the original RFC proposed a new function instead). So I don't think an RFC is necessary here (and I'm not trying to re-litigate the discussion on that RFC (which favoured `Arc::clone` as idiomatic) in any case).

cc @nical (who added the docs in the first place; sorry :-) )

r? @alexcrichton (or someone else on @rust-lang/libs )
2019-08-19 22:48:52 +02:00
Simon Sapin b79ce1b1b1 Rename private helper method allocate_for_unsized to allocate_for_layout 2019-08-17 17:01:04 +02:00
Simon Sapin ba0328327c Doc nits
Co-Authored-By: Ralf Jung <post@ralfj.de>
2019-08-17 15:42:05 +02:00
Simon Sapin 7a641f7c51 Relax the safety condition for get_mut_unchecked 2019-08-16 17:45:44 +02:00
Simon Sapin 810dfd7cd4 Reuse more internal Rc and Arc methods 2019-08-16 17:45:08 +02:00
Simon Sapin ae1e201a0c Add a comment on the usage of Layout::new::<RcBox<()>>() 2019-08-16 17:11:18 +02:00
Simon Sapin 78264f5e3c Add tracking issue numbers 2019-08-16 17:11:18 +02:00
Simon Sapin 1141136b90 Use ManuallyDrop instead of mem::forget
Per https://github.com/rust-lang/rust/pull/62451#discussion_r303197278
2019-08-16 17:11:18 +02:00
Simon Sapin 4eeb623e9e Fix intra-rustdoc links 2019-08-16 17:11:18 +02:00
Simon Sapin 170d933d2f Move constructors of boxed/rc’ed slices to matching impl blocks 2019-08-16 17:11:18 +02:00
Simon Sapin bde1924059 Add new_uninit_slice and assume_init on Box, Rc, and Arc of [T] 2019-08-16 17:11:18 +02:00
Simon Sapin 7b02b9f8ec Add new_uninit and assume_init on Box, Rc, and Arc 2019-08-16 17:11:18 +02:00
Simon Sapin 1613fdae37 Add Rc::get_mut_unchecked, Arc::get_mut_unchecked 2019-08-16 17:11:18 +02:00
Jake Goulding 32324d22c3 Add implementations for converting boxed slices into boxed arrays
This mirrors the implementations of reference slices into arrays.
2019-08-05 10:26:53 -04:00
Nick Cameron 47b16b6563 Remove recommendation about idiomatic syntax for Arc::Clone
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2019-08-04 21:50:05 +12:00
Vadim Petrochenkov 3d0d6ee271 liballoc: Unconfigure tests during normal build
Remove additional libcore-like restrictions from liballoc, turns out the testing works ok if the tests are a part of liballoc itself.
2019-08-02 01:59:01 +03:00
Mateusz Mikuła f93032c818 Fix clippy::clone_on_copy warnings 2019-07-18 15:14:56 +02:00
bors 4a95e9704d Auto merge of #61953 - Centril:shared-from-iter, r=RalfJung
Add `impl<T> FromIterator<T> for Arc/Rc<[T]>`

Add implementations of `FromIterator<T> for Arc/Rc<[T]>` with symmetrical logic.

This also takes advantage of specialization in the case of iterators with known length (`TrustedLen`) to elide the final allocation/copying from a `Vec<T>` into `Rc<[T]>` because we can allocate the space for the `Rc<[T]>` directly when the size is known. This is the primary motivation and why this is to be preferred over `iter.collect::<Vec<_>>().into(): Rc<[T]>`.

Moreover, this PR does some refactoring in some places.

r? @RalfJung for the code
cc @alexcrichton from T-libs
2019-07-13 06:49:02 +00:00
Mazdak Farrokhzad 296e825afa Rollup merge of #61862 - vorner:weak-into-raw-methods, r=sfackler
Make the Weak::{into,as}_raw methods

Because Weak doesn't Deref, so there's no reason for them to be only
associated methods.

As kindly pointed out here https://github.com/rust-lang/rust/pull/60766#issuecomment-501706422 by @chpio.
2019-07-06 22:14:35 +02:00
Mazdak Farrokhzad 85def307fc shared_from_iter: Polish internal docs. 2019-06-21 23:01:48 +02:00
Mazdak Farrokhzad 6b8417b55c shared_from_iter: Clarify slice::Iter specialization impl. 2019-06-20 23:20:21 +02:00
Mazdak Farrokhzad 85978d028a data_offset_align: add inline attribute. 2019-06-20 23:13:06 +02:00
Mazdak Farrokhzad 4b44ad9038 deduplicate slice_from_raw_parts_mut. 2019-06-20 09:28:13 +02:00
Mazdak Farrokhzad b1dbf15bb5 shared_from_iter/Arc: Use specialization to elide allocation. 2019-06-20 09:28:13 +02:00
Mazdak Farrokhzad 59ecff915c Arc: refactor data_offset{_sized}. 2019-06-20 09:28:13 +02:00
Mazdak Farrokhzad 27f5d0f208 Arc: refactor away PhantomData noise. 2019-06-20 09:28:12 +02:00
Mazdak Farrokhzad 689c64c469 Add basic 'shared_from_iter' impls. 2019-06-20 09:28:12 +02:00
Thomas Heck 387ac060d2 make Weak::ptr_eqs into methods 2019-06-16 14:05:44 +02:00
Michal 'vorner' Vaner 49fbd76a76 Make the Weak::{into,as}_raw methods
Because Weak doesn't Deref, so there's no reason for them to be only
associated methods.
2019-06-15 08:47:19 +02:00
Michal 'vorner' Vaner 79e5839992 docs: Use String in Rc::into_raw examples
It is unclear if accessing an integer after `drop_in_place` has been
called on it is undefined behaviour or not, as demonstrated by the
discussion in
https://github.com/rust-lang/rust/pull/60766#pullrequestreview-243414222.

Avoid these uncertainties by using String which frees memory in its
`drop_in_place` to make sure this is undefined behaviour. The message in
the docs should be to watch out and not access the data after that, not
discussing when one maybe could get away with it O:-).
2019-06-13 13:18:59 +02:00
Michal 'vorner' Vaner f9d328d7ff sync::Weak::{as,from,into}_raw
Methods on the Weak to access it as raw pointer to the data.
2019-05-26 08:53:59 +02:00
Thomas Heck 740a8dabb4 add comment to Rc/Arc's Eq specialization 2019-05-11 11:03:28 +02:00
Ralf Jung 29eed6b931 make liballoc internal test suite mostly pass in Miri 2019-04-18 13:37:14 +02:00
Alexander Regueiro 99ed06eb88 libs: doc comments 2019-02-10 23:57:25 +00:00
Mazdak Farrokhzad 2396780cda liballoc: revert nested imports style changes. 2019-02-03 08:27:44 +01:00
Mazdak Farrokhzad 857530cef1 liballoc: fix some idiom lints. 2019-02-02 12:48:12 +01:00
Mazdak Farrokhzad e70c2fbd5c liballoc: elide some lifetimes. 2019-02-02 12:23:15 +01:00
Mazdak Farrokhzad f09f62f62c liballoc: adjust abolute imports + more import fixes. 2019-02-02 10:34:36 +01:00
Mazdak Farrokhzad 7693e3e666 liballoc: refactor & fix some imports. 2019-02-02 10:14:40 +01:00
Mazdak Farrokhzad e6e27924e1 liballoc: cargo check passes on 2018 2019-02-02 08:36:45 +01:00
bors f29b4fbd74 Auto merge of #56696 - jonas-schievink:weak-counts, r=alexcrichton
Implement Weak::{strong_count, weak_count}

The counters are also useful on `Weak`, not just on strong references (`Rc` or `Arc`).

In situations where there are still strong references around, you can also get these counts by temporarily upgrading and adjusting the values accordingly. Using the methods introduced here is simpler to do, less error-prone (since you can't forget to adjust the counts), can also be used when no strong references are around anymore, and might be more efficient due to not having to temporarily create an `Rc`.

This is mainly useful in assertions or tests of complex data structures. Data structures might have internal invariants that make them the sole owner of a `Weak` pointer, and an assertion on the weak count could be used to ensure that this indeed happens as expected. Due to the presence of `Weak::upgrade`, the `strong_count` becomes less useful, but it still seems worthwhile to mirror the API of `Rc`.

TODO:
* [X] Tracking issue - https://github.com/rust-lang/rust/issues/57977

Closes https://github.com/rust-lang/rust/issues/50158
2019-01-31 19:20:14 +00:00
Jonas Schievink 0d314f08af Add tracking issue to unstable attribute 2019-01-29 22:34:35 +01:00
Jonas Schievink b664341d91 Make weak_count return an Option<usize> 2019-01-29 21:58:17 +01:00
Jonas Schievink 7e0edb39ba Implement a slightly racy sync::Weak::weak_count 2019-01-29 21:07:35 +01:00
Jonas Schievink 2fe3b3b486 Implement Weak::{strong_count, weak_count} 2019-01-29 21:07:35 +01:00
Dale Wijnand 1e577269da Introduce into_raw_non_null on Rc and Arc 2019-01-28 22:24:26 +00:00