Commit graph

10977 commits

Author SHA1 Message Date
Trevor Spiteri
0ceacd022c doc: minus (U+2212) instead of dash (U+002D) for negative infinity 2020-05-10 11:24:06 +02:00
Dylan DPC
62374ee4ad
Rollup merge of #70834 - yoshuawuyts:future-pending-ready, r=sfackler
Add core::future::{pending,ready}

Adds two future constructors to `core`: `future::ready` and `future::pending`. These functions enable constructing futures of any type that either immediately resolve, or never resolve which is an incredible useful tool when writing documentation.

These functions have prior art in both the `futures` and `async-std` crates. This implementation has been adapted from the `futures` crate.

## Examples

In https://github.com/rust-lang/rust/pull/70817 we propose adding the `ready!` macro. In the example we use an `async fn` which does not return a future that implements `Unpin`, which leads to the use of `unsafe`. Instead had we had `future::ready` available, we could've written the same example without using `unsafe`:

```rust
use core::task::{Context, Poll};
use core::future::{self, Future};
use core::pin::Pin;

pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> {
    let mut fut = future::ready(42_u8);
    let num = ready!(Pin::new(fut).poll(cx));
    // ... use num

    Poll::Ready(())
}
```

## Why future::ready?

Arguably `future::ready` and `async {}` can be considered equivalent. The main differences are that `future::ready` returns a future that implements `Unpin`, and the returned future is a concrete type. This is useful for traits that require a future as an associated type that can sometimes be a no-op ([example](https://docs.rs/http-service/0.4.0/http_service/trait.HttpService.html#associatedtype.ConnectionFuture)).

The final, minor argument is that `future::ready` and `future::pending` form a counterpart to the enum members of `Poll`: `Ready` and `Pending`. These functions form a conceptual bridge between `Poll` and `Future`, and can be used as a useful teaching device.

## References
- [`futures::future::ready`](https://docs.rs/futures/0.3.4/futures/future/fn.ready.html)
- [`futures::future::pending`](https://docs.rs/futures/0.3.4/futures/future/fn.pending.html)
- [`async_std::future::pending`](https://docs.rs/async-std/1.5.0/async_std/future/fn.pending.html)
- [`async_std::future::ready`](https://docs.rs/async-std/1.5.0/async_std/future/fn.ready.html)
2020-05-09 03:10:01 +02:00
Yoshua Wuyts
029515d916 Add core::future::{pending,ready} 2020-05-07 15:19:27 +02:00
Bastian Kauschke
33324f5a40 rewrite Drop documentation 2020-05-07 09:10:31 +02:00
Dylan DPC
fbb4ccbee6
Rollup merge of #71944 - ldm0:arrordhint, r=sfackler
Add comment for `Ord` implementation for array

Corresponding to `Ord` implementation for slice. It hints new comer the rule of comparing two arrays.
2020-05-06 16:59:04 +02:00
Donough Liu
5087c1ad2b Add comment for Ord implementation for array 2020-05-06 17:02:53 +08:00
Dylan DPC
db7b38181c
Rollup merge of #71845 - steveklabnik:add-const-examples, r=dtolnay
Add const examples

I only added them to `std::f32` to get feedback on this approach before adding the other constants.

When looking at https://github.com/rust-lang/rust/pull/68952, I found the docs a little confusing. Unless you're intimately aware of what's going on here, I don't think it's super clear what is deprecated and what you're supposed to do instead. I think short examples really clarify what's meant here, so that's what I did.
2020-05-05 01:49:41 +02:00
Dylan DPC
fc2837b05a
Rollup merge of #71877 - steveklabnik:small-example-fix, r=Mark-Simulacrum
Use f64 in f64 examples

I believe that this is a copy/paste error; this example was using f32,
but it's the docs for f64.
2020-05-04 16:15:41 +02:00
Steve Klabnik
a028292de5 Use f64 in f64 examples
I believe that this is a copy/paste error; this example was using f32,
but it's the docs for f64.
2020-05-04 08:28:53 -05:00
Steve Klabnik
55e37f9f02 Add examples to int macros 2020-05-04 08:26:39 -05:00
Steve Klabnik
8bef0a3683 f64 examples 2020-05-04 08:17:10 -05:00
Steve Klabnik
d38d429be7 correct -> intended 2020-05-04 08:17:10 -05:00
Steve Klabnik
0768fa461c add some whitespace 2020-05-04 08:17:10 -05:00
Steve Klabnik
a992f95e34 Add examples for std::f32 constants.
And also point people to use the associated constants of f32 instead.
2020-05-04 08:17:02 -05:00
Dylan DPC
6f5de87d3f
Rollup merge of #71398 - ThinkChaos:feat_refcell_take, r=LukasKalbertodt
Add `RefCell::take`

Add `RefCell::take` to match `Cell` and `Option`.
I also changed a couple of calls to `.replace` to `.take`.

Tracking issue is #71395.

This is my first contribution, please tell me if there's anything I could improve, thanks!
2020-05-03 18:34:34 +02:00
ThinkChaos
4a79424b74 Mention RefCell::take can panic in docs 2020-05-03 12:52:23 +02:00
Bastian Kauschke
902aa62d51 slice::fill: take T by value. 2020-05-02 20:15:05 +02:00
LeSeulArtichaut
d61debac64 Document unsafety for *const T and *mut T 2020-05-01 19:49:56 +02:00
Dylan DPC
97a8870022
Rollup merge of #71597 - CohenArthur:refactor-unique-empty, r=shepmaster
Rename Unique::empty() -> Unique::dangling()

A `FIXME` comment in `src/libcore/ptr/unique.rs` suggested refactoring `Unique::empty()` to `Unique::dangling()` which this PR does.
2020-04-30 20:15:28 +02:00
Dylan DPC
8f6eabfbae
Rollup merge of #71692 - dfreese:cfgdocs, r=kennytm
Add clarification on std::cfg macro docs v. #[cfg] attribute

The wording was discussed, to a limited degree in #71679.  This tries to
address some confusion I as well as someone else had independently when
looking at this macro.

Fixes #71679
2020-04-30 14:07:58 +02:00
Dylan DPC
e2333a974a
Rollup merge of #71672 - lcnr:instrinsics-wow, r=Dylan-DPC
document missing stable counterparts of intrinsics

Notes the stable counterpart of each intrinsic in case one exists.

Implements #34338

r? @Dylan-DPC
2020-04-30 14:07:57 +02:00
cohenarthur
eda7f8fdff rename-unique: Rename Unique::empty() to Unique::dangling()
rename-unique: Change calls and doc in raw_vec.rs

rename-unique: Change empty() -> dangling() in const-ptr-unique-rpass.rs
2020-04-30 11:00:45 +02:00
David Freese
610f944231
Update src/libcore/macros/mod.rs
Co-Authored-By: kennytm <kennytm@gmail.com>
2020-04-29 12:16:32 -07:00
David Freese
4813a81432 Add clarification on std::cfg macro docs v. #[cfg] attribute
The wording was discussed, to a limited degree in #71679.  This tries to
address some confusion I as well as someone else had independently when
looking at this macro.

Fixes #71679
2020-04-29 11:50:23 -07:00
Dylan DPC
d11b5597f8
Rollup merge of #71680 - nicholasbishop:bishop-fix-eq-link, r=Mark-Simulacrum
Fix doc link to Eq trait from PartialEq trait

The `Eq` link was incorrectly going to the `eq` method of `PartialEq`
instead of to the `Eq` trait.
2020-04-29 19:39:37 +02:00
Dylan DPC
d9761daa57
Rollup merge of #71507 - CohenArthur:document-unsafe-libcore-ptr, r=Mark-Simulacrum
Document unsafety in core::ptr

Contributes to #66219

I have yet to document all the `unsafe` blocks in the lib and would like to know if I'm headed in the right direction

r? @steveklabnik
2020-04-29 19:39:28 +02:00
Nicholas Bishop
f408a4e9bd Fix doc link to Eq trait from PartialEq trait
The `Eq` link was incorrectly going to the `eq` method of `PartialEq`
instead of to the `Eq` trait.
2020-04-29 12:06:32 -04:00
Bastian Kauschke
827d6f6c3d document stable counterparts of intrinsics 2020-04-29 15:50:21 +02:00
cohenarthur
8558ccd5c4 safety-ptr: Add SAFETY on some unsafe blocks from libcore/ptr
Add documentation example to slice_from_raw_parts_mut()
Add SAFETY explanations to some unsafe blocks in libcore/ptr

* libcore/ptr/mod.rs
* libcore/ptr/unique.rs
* libcore/ptr/non_null.rs

safety-mod.rs: Add SAFETY to slice_from_raw_parts(),
slice_from_raw_parts_mut()

slice_from_raw_parts_mut: Add documentation example

safety-ptr-unique.rs: Add SAFETY to new() and cast()

safety-ptr-non_null.rs: Add SAFETY to new()

safety-ptr-non_null.rs: Add SAFETY to cast()

safety-ptr-non_null.rs: Add SAFETY to from() impls

safety-ptr-unique.rs: Add SAFETY to from() impls

safety-ptr-non_null.rs: Add SAFETY to new()

safety-ptr-unique.rs: Add SAFETY to new()

safety-ptr-mod.rs: Fix safety explanation

https://github.com/rust-lang/rust/pull/71507#discussion_r414488884

safety-prt-non_null.rs: Fix SAFETY comment syntax

safety-ptr-unique.rs: Fix syntax for empty()

safety-ptr-non_null.rs: Fix misuse of non-null for align_of()

safety-ptr-non_null.rs: Remove incorrect SAFETY comment

safety-ptr-unique.rs: Remove unsound SAFETY comment

safety-ptr-mod.rs: Add std comment on slice_from_raw_parts guarantee

safety-ptr-unique.rs: Remove incorrect safety comment

Creating a Unique from a NonNull has strict guarantees that the current
implementation does not guarantee

https://github.com/rust-lang/rust/pull/71507#discussion_r415035952

safety-ptr: Re-adding ignore-tidy directive
2020-04-29 11:18:31 +02:00
Zach Reizner
4b762ec95a
Update link to unstable book for llvm_asm macro 2020-04-27 15:51:51 -07:00
Dylan DPC
cddbed0003
Rollup merge of #71589 - RalfJung:unique-no-shr, r=SimonSapin
remove Unique::from for shared pointer types

r? @SimonSapin
2020-04-27 03:26:18 +02:00
Ralf Jung
7aebdb639a remove Unique::from for shared pointer types 2020-04-26 19:00:57 +02:00
ThinkChaos
f121f094fe Add RefCell::take
In the same vein as `Cell::take` and `Option::take`.
2020-04-26 11:43:34 +02:00
Jonas Platte
4589bd57e9
Fix since attribute for nonzero_bitor impl's 2020-04-26 11:28:44 +02:00
bors
0862458dad Auto merge of #71556 - Dylan-DPC:rollup-9ll4shr, r=Dylan-DPC
Rollup of 7 pull requests

Successful merges:

 - #69041 (proc_macro: Stabilize `Span::resolved_at` and `Span::located_at`)
 - #69813 (Implement BitOr and BitOrAssign for the NonZero integer types)
 - #70712 (stabilize BTreeMap::remove_entry)
 - #71168 (Deprecate `{Box,Rc,Arc}::into_raw_non_null`)
 - #71544 (Replace filter_map().next() calls with find_map())
 - #71545 (Fix comment in docstring example for Error::kind)
 - #71548 (Add missing Send and Sync impls for linked list Cursor and CursorMut.)

Failed merges:

r? @ghost
2020-04-25 17:49:00 +00:00
Dylan DPC
b6e03c464a
Rollup merge of #69813 - thomcc:nonzero-bitor, r=Amanieu
Implement BitOr and BitOrAssign for the NonZero integer types

This provides overloaded operators for `NonZero$Int | NonZero$Int`, `NonZero$Int | $Int`, and `$Int | NonZero$Int`. It also provides `BitOrAssign` where `self` is `NonZero$Int`, for symmetry.

It's a pretty small conceptual addition, but is good becasue but avoids a case where the operation is obviously sound, but you'd otherwise need unsafe to do it.

In crates trying to minimize `unsafe` usage, this is unfortunate and makes working with `NonZero` types often not worth it, even if the operations you're doing are clearly sound.

I've marked these as stable as I've been told in the past that trait impls are automatically stable. I'm happy to change it to unstable if this wasn't correct information.

I'm not entirely confident what version I should have put down, so I followed https://www.whatrustisit.com. Hopefully it's correct for this.

Apologies in advance if this has come up before, but I couldn't find it.
2020-04-25 18:30:24 +02:00
bors
659951c4a0 Auto merge of #71439 - Mark-Simulacrum:stage0-next, r=jonas-schievink
Bump bootstrap compiler

This bumps the bootstrap compiler and the rustfmt that x.py fmt uses.
2020-04-25 14:15:10 +00:00
Mark Rousskov
17a393ee96 Bump rustfmt to most recently shipped 2020-04-25 09:25:33 -04:00
Mark Rousskov
93eed402ad Bump bootstrap compiler 2020-04-25 09:25:33 -04:00
Dylan DPC
a23d8ec8a7
Rollup merge of #71480 - GuillaumeGomez:panic-info-example, r=Dylan-DPC
Improve PanicInfo examples readability

cc @Eijebong

r? @Dylan-DPC
2020-04-25 01:35:57 +02:00
Dylan DPC
08ca447267
Rollup merge of #71476 - RalfJung:miri-test-sizes, r=kennytm
more compact way to adjust test sizes for Miri

Inspired by @dtolnay
2020-04-24 13:14:26 +02:00
Guillaume Gomez
03817ec789 Improve PanicInfo examples readability 2020-04-24 09:46:38 +02:00
Dylan DPC
8a0e88e653
Rollup merge of #71492 - LeSeulArtichaut:document-unsafe-2, r=Mark-Simulacrum
Document unsafety in core::{panicking, alloc::layout, hint, iter::adapters::zip}

Helps with #66219.
r? @Mark-Simulacrum do you want to continue reading safety comments? :D
2020-04-24 02:47:38 +02:00
Dylan DPC
c33deb9fda
Rollup merge of #71068 - pyfisch:unicode-version-stable, r=SimonSapin
Stabilize UNICODE_VERSION (feature unicode_version)

Tracking issue: #49726

r? @sfackler

#71020 changed the definition of `UNICODE_VERSION` just yesterday from a struct to a tuple. Maybe you want to wait some more before stabilizing this constant, on the other hand this is a very small and simple addition.

CC @behnam @SimonSapin @Serentty
2020-04-24 02:47:32 +02:00
Dylan DPC
9ff020e0dd
Rollup merge of #71063 - LeSeulArtichaut:document-unsafe, r=Mark-Simulacrum
Document unsafety in core::{option, hash}

Helps with #66219.
I think that the part that will need reviewing the most is the `hash/sip.rs` file.
r? @LukasKalbertodt (or someone else from the libs team)
2020-04-24 02:47:30 +02:00
LeSeulArtichaut
d515168f3b Document unsafety in core::{panicking, alloc::layout, hint, iter::adapters::zip} 2020-04-24 01:48:48 +02:00
LeSeulArtichaut
a694315ed1 Add a note about fat pointers
Co-Authored-By: Mark-Simulacrum <mark.simulacrum@gmail.com>
2020-04-23 23:05:37 +02:00
cohenarthur
b4a11d4dd9 doc-example: Refactor pointer name to avoid confusion
Changed raw pointer name from ptr to raw_pointer to avoid confusion with
the `use std::ptr` statement a few lines above. This way the crate name
and pointer name are well differenciated.
2020-04-23 22:22:27 +02:00
Dylan DPC
5f9ffb9c02
Rollup merge of #71470 - TyPR124:fix-doc-links, r=jonas-schievink
Fix doc links

This fixes a few doc links which were causing `cargo doc` to fail when using `--document-private-items --document-hidden-items` on libstd. Most of the fixes are just escaping '[' and ']' characters in doc comments, and one change actually fixes a doc link.
2020-04-23 20:35:06 +02:00
Dylan DPC
199f4deef0
Rollup merge of #71446 - Amanieu:transmute_copy, r=sfackler
Only use read_unaligned in transmute_copy if necessary

I've noticed that this causes LLVM to generate poor code on targets that don't support unaligned memory accesses.
2020-04-23 20:35:04 +02:00