Commit graph

9258 commits

Author SHA1 Message Date
Jean-Marie Comets
70fa616a23 Stabilize refcell_replace_swap feature, closes #43570 2019-03-31 10:54:14 +02:00
Geoffry Song
7ce0b67272
Fix OnceWith docstring.
This was incorrectly copypasta'd from RepeatWith.
2019-03-29 15:03:14 -07:00
Mazdak Farrokhzad
a92d689b12
Rollup merge of #59371 - dlrobertson:rename_va_list_copy, r=joshtriplett
ffi: rename VaList::copy to VaList::with_copy

Rename `VaList::copy` to `VaList::with_copy`

r? @joshtriplett
2019-03-28 13:35:40 +01:00
Mazdak Farrokhzad
f90ac4f04a
Rollup merge of #58717 - hellow554:nonzero_parse, r=oli-obk
Add FromStr impl for NonZero types

This is a WIP implementation because I do have some questions regarding the solution.

Somebody should ping the lang team on this I guess.
Please see the annotations on the code for more details.

Closes #58604
2019-03-28 13:35:29 +01:00
bors
237bf3244f Auto merge of #59478 - Centril:rollup, r=Centril
Rollup of 12 pull requests

Successful merges:

 - #57987 (Fix some AArch64 typos)
 - #58581 (Refactor generic parameter encoder functions)
 - #58803 (fs::copy() unix: set file mode early)
 - #58848 (Prevent cache issues on version updates)
 - #59198 (Do not complain about unmentioned fields in recovered patterns)
 - #59351 (Include llvm-ar with llvm-tools component)
 - #59413 (HirIdify hir::ItemId)
 - #59441 (Remove the block on natvis for lld-link.)
 - #59448 (Use consistent phrasing for all macro summaries)
 - #59456 (Add documentation about `for` used as higher ranked trait bounds)
 - #59472 (Document that `std::io::BufReader` discards contents on drop)
 - #59474 (Fix link capitalization in documentation of std::io::BufWriter.)

Failed merges:

r? @ghost
2019-03-28 08:56:34 +00:00
Mazdak Farrokhzad
2ee038af8c
Rollup merge of #59448 - benesch:macro-doc, r=Centril
Use consistent phrasing for all macro summaries

None
2019-03-28 08:43:39 +01:00
Mazdak Farrokhzad
c313647a95
Rollup merge of #57987 - parched:va-args, r=joshtriplett
Fix some AArch64 typos

cc @dlrobertson
2019-03-28 08:43:23 +01:00
bors
6bfe4b7b51 Auto merge of #59336 - gnzlbg:hint_black_box, r=alexcrichton
Moves test::black_box to core::hint and fix black_box on wasm32 and asm.js

This changes removes a cyclic dependency between the "test" and "libtest"
crates, where "libtest" depends on "test" for "black_box", but "test" depends on
"libtest" for everything else.

I've chosen the "hint" module because there seems to be enough consensus in the
discussion of RFC2360 that this module is where such an intrinsic would belong,
but this PR does not implement that RFC! If that RFC ever gets merged, the API, docs,
etc. of this API will need to change. This PR just move the implementation of the
already existing API.

For backwards compatibility reasons I've chosen to also keep the "test" feature
gate for these instead of adding a new feature gate. If we change the feature
gate, we'll potentially all benchmarks, and while that's something that we could
do, it seems unnecessary to do that now - if RFC2360 gets merged, we'll need to
do that anyways. Backwards compatibility is also why we continue to re-export
"black_box" from the "test" crate.

This PR also fixes black_box on the wasm32 target, which now supports inline assembly, and uses volatile loads on the asm.js target.

r? @Amanieu (cc @rust-lang/libs)
2019-03-28 05:44:01 +00:00
Josh Stone
413aaf3227
Rollup merge of #59393 - czipperz:refactor_tuple_comparison_tests, r=shepmaster
Refactor tuple comparison tests
2019-03-27 18:15:32 -07:00
Josh Stone
35b339bd5f
Rollup merge of #59390 - czipperz:ptr_eq_smart_pointer, r=Centril,steveklabnik
Make `ptr::eq` documentation mention fat-pointer behavior

Resolves #59214
2019-03-27 18:15:30 -07:00
Josh Stone
a4bf8557b2
Rollup merge of #59372 - euclio:rename-trim, r=rkruppe
add rustfix-able suggestions to trim_{left,right} deprecations

Fixes #53802 (technically already fixed by #58002, but that issue is about these methods).
2019-03-27 18:15:28 -07:00
Josh Stone
ad5bbf01c0
Rollup merge of #59284 - RalfJung:maybe-uninit, r=sfackler
adjust MaybeUninit API to discussions

uninitialized -> uninit
into_initialized -> assume_init
read_initialized -> read
set -> write
2019-03-27 18:15:27 -07:00
Josh Stone
c70cdc0ed4
Rollup merge of #59283 - SimonSapin:branchless-ascii-case, r=joshtriplett
Make ASCII case conversions more than 4× faster

Reformatted output of `./x.py bench src/libcore --test-args ascii` below. The `libcore` benchmark calls `[u8]::make_ascii_lowercase`. `lookup` has code (effectively) identical to that before this PR, and ~~`branchless`~~ `mask_shifted_bool_match_range` after this PR.

~~See [code comments](https://github.com/rust-lang/rust/pull/59283/commits/ce933f77c865a15670855ac5941fe200752b739f#diff-01076f91a26400b2db49663d787c2576R3796) in `u8::to_ascii_uppercase` in `src/libcore/num/mod.rs` for an explanation of the branchless algorithm.~~

**Update:** the algorithm was simplified while keeping the performance. See `branchless` v.s. `mask_shifted_bool_match_range` benchmarks.

Credits to @raphlinus for the idea in https://twitter.com/raphlinus/status/1107654782544736261, which extends this algorithm to “fake SIMD” on `u32` to convert four bytes at a time. The `fake_simd_u32` benchmarks implements this with [`let (before, aligned, after) = bytes.align_to_mut::<u32>()`](https://doc.rust-lang.org/std/primitive.slice.html#method.align_to_mut). Note however that this is buggy when addition carries/overflows into the next byte (which does not happen if the input is known to be ASCII).

This could be fixed (to optimize `[u8]::make_ascii_lowercase` and `[u8]::make_ascii_uppercase` in `src/libcore/slice/mod.rs`) either with some more bitwise trickery that I didn’t quite figure out, or by using “real” SIMD intrinsics for byte-wise addition. I did not pursue this however because the current (incorrect) fake SIMD algorithm is only marginally faster than the one-byte-at-a-time branchless algorithm. This is because LLVM auto-vectorizes the latter, as can be seen on https://rust.godbolt.org/z/anKtbR.

Benchmark results on Linux x64 with Intel i7-7700K: (updated from https://github.com/rust-lang/rust/pull/59283#issuecomment-474146863)

```rust
6830 bytes string:

alloc_only                          ... bench:    112 ns/iter (+/- 0) = 62410 MB/s
black_box_read_each_byte            ... bench:  1,733 ns/iter (+/- 8) = 4033 MB/s
lookup_table                        ... bench:  1,766 ns/iter (+/- 11) = 3958 MB/s
branch_and_subtract                 ... bench:    417 ns/iter (+/- 1) = 16762 MB/s
branch_and_mask                     ... bench:    401 ns/iter (+/- 1) = 17431 MB/s
branchless                          ... bench:    365 ns/iter (+/- 0) = 19150 MB/s
libcore                             ... bench:    367 ns/iter (+/- 1) = 19046 MB/s
fake_simd_u32                       ... bench:    361 ns/iter (+/- 2) = 19362 MB/s
fake_simd_u64                       ... bench:    361 ns/iter (+/- 1) = 19362 MB/s
mask_mult_bool_branchy_lookup_table ... bench:  6,309 ns/iter (+/- 19) = 1107 MB/s
mask_mult_bool_lookup_table         ... bench:  4,183 ns/iter (+/- 29) = 1671 MB/s
mask_mult_bool_match_range          ... bench:    339 ns/iter (+/- 0) = 20619 MB/s
mask_shifted_bool_match_range       ... bench:    339 ns/iter (+/- 1) = 20619 MB/s

32 bytes string:

alloc_only                          ... bench:     15 ns/iter (+/- 0) = 2133 MB/s
black_box_read_each_byte            ... bench:     29 ns/iter (+/- 0) = 1103 MB/s
lookup_table                        ... bench:     24 ns/iter (+/- 4) = 1333 MB/s
branch_and_subtract                 ... bench:     16 ns/iter (+/- 0) = 2000 MB/s
branch_and_mask                     ... bench:     16 ns/iter (+/- 0) = 2000 MB/s
branchless                          ... bench:     16 ns/iter (+/- 0) = 2000 MB/s
libcore                             ... bench:     15 ns/iter (+/- 0) = 2133 MB/s
fake_simd_u32                       ... bench:     17 ns/iter (+/- 0) = 1882 MB/s
fake_simd_u64                       ... bench:     16 ns/iter (+/- 0) = 2000 MB/s
mask_mult_bool_branchy_lookup_table ... bench:     42 ns/iter (+/- 0) = 761 MB/s
mask_mult_bool_lookup_table         ... bench:     35 ns/iter (+/- 0) = 914 MB/s
mask_mult_bool_match_range          ... bench:     16 ns/iter (+/- 0) = 2000 MB/s
mask_shifted_bool_match_range       ... bench:     16 ns/iter (+/- 0) = 2000 MB/s

7 bytes string:

alloc_only                          ... bench:     14 ns/iter (+/- 0) = 500 MB/s
black_box_read_each_byte            ... bench:     22 ns/iter (+/- 0) = 318 MB/s
lookup_table                        ... bench:     16 ns/iter (+/- 0) = 437 MB/s
branch_and_subtract                 ... bench:     16 ns/iter (+/- 0) = 437 MB/s
branch_and_mask                     ... bench:     16 ns/iter (+/- 0) = 437 MB/s
branchless                          ... bench:     19 ns/iter (+/- 0) = 368 MB/s
libcore                             ... bench:     20 ns/iter (+/- 0) = 350 MB/s
fake_simd_u32                       ... bench:     18 ns/iter (+/- 0) = 388 MB/s
fake_simd_u64                       ... bench:     21 ns/iter (+/- 0) = 333 MB/s
mask_mult_bool_branchy_lookup_table ... bench:     20 ns/iter (+/- 0) = 350 MB/s
mask_mult_bool_lookup_table         ... bench:     19 ns/iter (+/- 0) = 368 MB/s
mask_mult_bool_match_range          ... bench:     19 ns/iter (+/- 0) = 368 MB/s
mask_shifted_bool_match_range       ... bench:     19 ns/iter (+/- 0) = 368 MB/s
```
2019-03-27 18:15:25 -07:00
Josh Stone
e5fa59735b
Rollup merge of #59268 - estebank:from-string, r=QuietMisdreavus
Add suggestion to use `&*var` when `&str: From<String>` is expected

Fix #53879.
2019-03-27 18:15:24 -07:00
Chris Gregory
61b6c56f50 Minor rewordings and add dyn keyword 2019-03-27 01:46:24 -04:00
Nikhil Benesch
d339b89644
Use consistent phrasing for all macro summaries 2019-03-26 18:22:25 -04:00
Guillaume Gomez
616ee876c1
Rollup merge of #59427 - czipperz:non_null_doc_links, r=Mark-Simulacrum
Link to PhantomData in NonNull documentation
2019-03-26 22:26:45 +01:00
Guillaume Gomez
4e19b7a0e9
Rollup merge of #59330 - DevQps:improve-std-convert-documentation, r=steveklabnik
Improve the documentation for std::convert (From, Into, AsRef and AsMut)

# Description
In this PR I updated the documentation of From, Into, AsRef and AsMut, as well as the general std::convert module documentation. The discussion in #59163 provided information that was not yet present in the docs, or was not expressed clearly enough. I tried to clarify the examples that were already present in the docs as well as add more information about considered best-practices that came out of the discussion in #59163

@steveklabnik I hope I didn't change too much. This is an initial version! I will scan through everything tomorrow as well again to see if I made any typo's or errors, and maybe make some small changes here and there.

All suggestions are welcome!

closes #59163
2019-03-26 22:26:42 +01:00
bors
fbd34efb32 Auto merge of #59433 - Centril:rollup, r=Centril
Rollup of 10 pull requests

Successful merges:

 - #59150 (Expand suggestions for type ascription parse errors)
 - #59232 (Merge `Promoted` and `Static` in `mir::Place`)
 - #59267 (Provide suggestion when using field access instead of path)
 - #59315 (Add no_hash to query macro and move some queries over)
 - #59334 (Update build instructions in README.md)
 - #59362 (Demo `FromIterator` short-circuiting)
 - #59374 (Simplify checked_duration_since)
 - #59389 (replace redundant note in deprecation warning)
 - #59410 (Clarify `{Ord,f32,f64}::clamp` docs a little)
 - #59419 (Utilize `?` instead of `return None`.)

Failed merges:

r? @ghost
2019-03-26 17:25:16 +00:00
gnzlbg
0c127e8494 Life's too short not to use cfg_if 2019-03-26 16:14:32 +01:00
gnzlbg
3b6b4899bf Document why the volatile read is used 2019-03-26 13:43:57 +01:00
gnzlbg
d189cab027 Use fallback on emscripten targets 2019-03-26 12:17:03 +01:00
Mazdak Farrokhzad
0b46f0e649 bump bootstrap; adjust stage0 uses in core::ptr. 2019-03-26 09:57:25 +01:00
Ralf Jung
0e0383abc6 adjust MaybeUninit API to discussions
uninitialized -> uninit
into_initialized -> assume_init
read_initialized -> read
set -> write
2019-03-26 09:21:32 +01:00
Mazdak Farrokhzad
822b4fcb3b
Rollup merge of #59419 - frewsxcv:frewsxcv-qu, r=varkor
Utilize `?` instead of `return None`.

None
2019-03-26 09:05:53 +01:00
Mazdak Farrokhzad
0677eb1eaa
Rollup merge of #59410 - tbu-:pr_doc_clarifyclamp, r=joshtriplett
Clarify `{Ord,f32,f64}::clamp` docs a little

Explicitly call out when it returns NaN, adhere to the panic doc
guidelines.
2019-03-26 09:05:52 +01:00
Mazdak Farrokhzad
0616b73c2f
Rollup merge of #59362 - pnkfelix:demo-from-iterator-short-circuiting, r=Centril
Demo `FromIterator` short-circuiting

while looking at a FIXME in `FromIterator for Option` and `FromIterator for Result`, I realized that the current documentation does not have example code showing exactly what is meant by "no further elements are taken."

The code snippets provided here are meant to correct that.
2019-03-26 09:05:47 +01:00
Corey Farwell
28c602a94e Utilize ? instead of return None. 2019-03-25 23:29:49 +01:00
Chris Gregory
fd42918a41 Link to PhantomData in NonNull documentation 2019-03-25 18:04:42 -04:00
Christian
6c479c3d02 Formatting changes, including better wrapping and creating short summary lines. 2019-03-25 22:21:05 +01:00
Chris Gregory
fbfc8082b4 Rework documentation into examples 2019-03-25 17:20:54 -04:00
Chris Gregory
e91689cd97 Rework documentation to be about fat pointers 2019-03-25 16:38:21 -04:00
gnzlbg
24db517419 black_box should use inline assembly on wasm32 2019-03-25 18:43:51 +01:00
Chris Gregory
c709a10434 Refactor tuple comparison tests 2019-03-25 13:00:57 -04:00
Tobias Bucher
0bb36a2f90 Clarify {Ord,f32,f64}::clamp docs a little
Explicitly call out when it returns NaN, adhere to the panic doc
guidelines.
2019-03-25 12:52:42 +01:00
Felix S Klock II
0e83e96852
add missing braces
add missing braces analogous to those suggested by killercup
2019-03-25 11:50:11 +01:00
gnzlbg
cfa76c438a black_box should inhibit optimizations on platforms without inline assembly 2019-03-25 11:49:08 +01:00
Pascal Hertleif
6315221b39
Update src/libcore/option.rs
Co-Authored-By: pnkfelix <pnkfelix@pnkfx.org>
2019-03-25 11:48:08 +01:00
gnzlbg
f2443831e9 Remove dupplicated config 2019-03-25 11:44:06 +01:00
gnzlbg
f5d6b3af69 Moves test::black_box to core::hint
This changes removes a cyclic dependency between the "test" and "libtest"
crates, where "libtest" depends on "test" for "black_box", but "test" depends on
"libtest" for everything else.

I've chosen the "hint" module because there seems to be enough consensus in the
discussion of RFC2360 that this module is where such an intrinsic would belong,
but this PR does not implement that RFC! (note: if that RFC ever gets merged,
the API, docs, etc. of this API will need to change).

For backwards compatibility reasons I've chosen to also keep the "test" feature
gate for these instead of adding a new feature gate. If we change the feature
gate, we'll potentially all benchmarks, and while that's something that we could
do, it seems unnecessary to do that now - if RFC2360 gets merged, we'll need to
do that anyways.
2019-03-25 11:44:06 +01:00
kennytm
cb2dde63d5
Rollup merge of #59328 - koalatux:iter-nth-back, r=scottmcm
Implement specialized nth_back() for Box and Windows.

Hi there, this is my first pull request to rust :-)

I started implementing some specializations for DoubleEndedIterator::nth_back() and these are the first two. The problem has been discussed in #54054 and nth_back() is tracked in #56995.

I'm stuck with the next implementation so I though I do a PR for the ones I'm confident with to get some feedback.
2019-03-24 19:00:10 +08:00
kennytm
48dc8efc85
Rollup merge of #59239 - gnzlbg:fix_spin_loop, r=nagisa
Remove inline assembly from hint::spin_loop

This PR removes the inline assembly which was not required since these
instructions are available in core::arch, and extends support of
the spin_loop hint to arm targets with the v6 feature which also
support the yield instruction.
2019-03-24 15:32:45 +08:00
Chris Gregory
00716b480f Make ptr::eq documentation mention smart-pointer behavior
Resolves #59214
2019-03-23 19:43:32 -04:00
Esteban Küber
e929d19edc review comments 2019-03-22 21:54:19 -07:00
Esteban Küber
ac3290e8d9 Add suggestion to use &*var when &str: From<String> is expected 2019-03-22 20:38:14 -07:00
Dan Robertson
8ea435caf8
ffi: rename VaList::copy to VaList::with_copy
Rename `VaList::copy` to `VaList::with_copy`.
2019-03-22 22:28:07 +00:00
Andy Russell
b34a71b7da
add suggestions to trim_{left,right} deprecations 2019-03-22 14:56:08 -04:00
Mazdak Farrokhzad
225b6baae7
Rollup merge of #59190 - greg-kargin:master, r=sanxiyn
consistent naming for Rhs type parameter in libcore/ops

Rename RHS type parameter occurrences RHS->Rhs to make it consistent throughout files and follow naming conventions.
2019-03-22 19:31:21 +01:00
Felix S. Klock II
d5a61c0be2 Expand impl FromIterator for Result doc to include examples of Err and early termination. 2019-03-22 12:44:08 +01:00
Felix S. Klock II
48af7189c2 Expand impl FromIterator for Option doc to include example of early termination. 2019-03-22 12:44:08 +01:00