Commit Graph

8609 Commits

Author SHA1 Message Date
bors
75d937c49b Auto merge of #54668 - RalfJung:use-maybe-uninit, r=SimonSapin
Use MaybeUninit in libcore

All code by @japaric. This re-submits the second half of https://github.com/rust-lang/rust/pull/53508 (the first half is at https://github.com/rust-lang/rust/pull/54667). This is likely the one containing the perf regression.
2018-11-26 22:20:20 +00:00
bors
423291f14b Auto merge of #55705 - ethanboxx:master, r=SimonSapin
Make `ParseIntError` and `IntErrorKind` fully public

Why would you write nice error types if I can't read them?

# Why

It can be useful to use `match` with errors produced when parsing strings to int. This would be useful for the `.err_match()` function in my [new crate](https://crates.io/crates/read_input).

---
I could also do this for `ParseFloatError` if people think it is a good idea.
I am new around hear so please tell me if I am getting anything wrong.
2018-11-26 01:46:18 +00:00
Ethan Brierley
121e5e806e fix missing borrow 2018-11-25 19:44:09 +00:00
Ethan Brierley
07b97a486f Use a reference rather than take ownership 2018-11-25 19:31:35 +00:00
Pietro Albini
d21d510dde
Rollup merge of #56207 - SimonSapin:int_to_from_bytes, r=nagisa
Stabilize the int_to_from_bytes feature

Fixes #52963

FCP to merge completed: https://github.com/rust-lang/rust/issues/52963#issuecomment-416548327
2018-11-25 17:05:10 +01:00
Pietro Albini
6398df1520
Rollup merge of #56101 - frewsxcv:frewsxcv-dyn, r=steveklabnik
Incorporate `dyn` into more comments and docs.

r? @rust-lang/docs
2018-11-25 17:05:03 +01:00
Simon Sapin
68a26ec647 Stabilize the int_to_from_bytes feature
Fixes #52963
2018-11-25 08:29:01 +01:00
Ralf Jung
59786b020b use more inlining, and force some of it 2018-11-23 22:52:18 +01:00
Ralf Jung
5e27ee76b6 use MaybeUninit in core::ptr::swap_nonoverlapping_bytes
Code by @japaric, I just split it into individual commits
2018-11-23 22:50:20 +01:00
Ralf Jung
3fb03d0650 use MaybeUninit in core::ptr::swap
Code by @japaric, I just split it into individual commits
2018-11-23 22:50:20 +01:00
Ralf Jung
0bb2e2d6d4 use MaybeUninit in core::ptr::{read,read_unaligned}
Code by @japaric, I just split it into individual commits
2018-11-23 22:50:20 +01:00
Ralf Jung
525e8f4368 use MaybeUninit in core::slice::rotate
Code by @japaric, I just split it into individual commits
2018-11-23 22:50:20 +01:00
Ralf Jung
f950c2cbd5 use MaybeUninit in core::slice::sort
Code by @japaric, I just split it into individual commits
2018-11-23 22:50:20 +01:00
Ralf Jung
44c135b6a9 use MaybeUninit in core::fmt
Code by @japaric, I just split it into individual commits
2018-11-23 22:50:20 +01:00
Corey Farwell
ebb1a48b41
Merge branch 'master' into frewsxcv-dyn 2018-11-23 14:09:08 -05:00
kennytm
69d4901846
Rollup merge of #56162 - adrianheine:patch-1, r=withoutboats
std::str Adapt documentation to reality
2018-11-24 01:32:01 +08:00
kennytm
ef2cbec5a6
Rollup merge of #55869 - SimonSapin:iterate, r=alexcrichton
Add std::iter::unfold

This adds an **unstable** ~`std::iter::iterate`~ `std::iter::unfold` function and ~`std::iter::Iterate`~ `std::iter::Unfold` type that trivially wrap a ~`FnMut() -> Option<T>`~ `FnMut(&mut State) -> Option<T>` closure to create an iterator. ~Iterator state can be kept in the closure’s environment or captures.~

This is intended to help reduce amount of boilerplate needed when defining an iterator that is only created in one place. Compare the existing example of the `std::iter` module: (explanatory comments elided)

```rust
struct Counter {
    count: usize,
}

impl Counter {
    fn new() -> Counter {
        Counter { count: 0 }
    }
}

impl Iterator for Counter {
    type Item = usize;

    fn next(&mut self) -> Option<usize> {
        self.count += 1;
        if self.count < 6 {
            Some(self.count)
        } else {
            None
        }
    }
}
```

… with the same algorithm rewritten to use this new API:

```rust
fn counter() -> impl Iterator<Item=usize> {
    std::iter::unfold(0, |count| {
        *count += 1;
        if *count < 6 {
            Some(*count)
        } else {
            None
        }
    })
}
```

-----

This also add unstable `std::iter::successors` which takes an (optional) initial item and a closure that takes an item and computes the next one (its successor).

```rust
let powers_of_10 = successors(Some(1_u16), |n| n.checked_mul(10));
assert_eq!(powers_of_10.collect::<Vec<_>>(), &[1, 10, 100, 1_000, 10_000]);
```
2018-11-24 01:31:50 +08:00
kennytm
738afd4f69
Rollup merge of #55838 - dralley:fix-cfg-step, r=Kimundi
Fix #[cfg] for step impl on ranges

```#[cfg(target_pointer_witdth = ...)]``` is misspelled
2018-11-24 01:31:48 +08:00
Adrian Heine né Lang
37f719e0d3
std::str Adapt documentation to reality 2018-11-22 15:26:16 +01:00
bors
93fa2d76bd Auto merge of #56155 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 11 pull requests

Successful merges:

 - #55367 (lint if a private item has doctests)
 - #55485 (Return &T / &mut T in ManuallyDrop Deref(Mut) impl)
 - #55784 (Clarifying documentation for collections::hash_map::Entry::or_insert)
 - #55961 (Fix VecDeque pretty-printer)
 - #55980 (Suggest on closure args count mismatching with pipe span)
 - #56002 (fix #55972: Erroneous self arguments on bare functions emit subpar compilation error)
 - #56063 (Update any.rs documentation using keyword dyn)
 - #56067 (Add SGX target to rustc)
 - #56078 (Fix error message for `-C panic=xxx`.)
 - #56106 (Remove some incorrect doc comments)
 - #56126 (core/benches/num: Add `from_str/from_str_radix()` benchmarks)

Failed merges:

r? @ghost
2018-11-22 10:04:41 +00:00
Guillaume Gomez
61d7b3e9b0
Rollup merge of #56126 - Turbo87:bench-parse, r=alexcrichton
core/benches/num: Add `from_str/from_str_radix()` benchmarks

This was extracted from #55973

/cc @alexcrichton
2018-11-22 10:37:56 +01:00
Guillaume Gomez
1646fc907e
Rollup merge of #56063 - 0xrgb:patch-1, r=joshtriplett
Update any.rs documentation using keyword dyn

This will fix #56062.
2018-11-22 10:37:51 +01:00
Guillaume Gomez
1c57f0ab9c
Rollup merge of #55485 - petertodd:2018-10-manuallydrop-deref, r=TimNN
Return &T / &mut T in ManuallyDrop Deref(Mut) impl

Without this change the generated documentation looks like this:

    fn deref(&self) -> &<ManuallyDrop<T> as Deref>::Target

Returning the actual type directly makes the generated docs more clear:

    fn deref(&self) -> &T

Basically, compare how the impl for `Box<T>` and `ManuallyDrop<T>` looks in this screenshot:

![rust docs for ManuallyDrop as Deref](https://user-images.githubusercontent.com/7042/47673083-fc9dc280-db89-11e8-89b0-c6bde663feef.png)
2018-11-22 10:37:45 +01:00
bors
f3adec65dd Auto merge of #53918 - Havvy:doc-sort-by, r=GuillaumeGomez
Doc total order requirement of sort(_unstable)_by

I took the definition of what a total order is from the Ord trait
docs. I specifically put "elements of the slice" because if you
have a slice of f64s, but know none are NaN, then sorting by
partial ord is total in this case. I'm not sure if I should give
such an example in the docs or not.

r? @GuillaumeGomez
2018-11-22 06:50:18 +00:00
Steve Klabnik
d7b3f5c6ae update various stdlib docs 2018-11-21 06:50:17 -05:00
Tobias Bieniek
e538a4a7de core/benches/num: Add from_str/from_str_radix() benchmarks 2018-11-21 11:48:15 +01:00
Steve Klabnik
57b7d55591 fix more links 2018-11-20 21:25:48 -05:00
Simon Sapin
a4279a07e2 Capitalize 2018-11-20 18:22:40 +01:00
Simon Sapin
8a5bbd9a4e Add tracking issue for unfold and successors 2018-11-20 18:22:40 +01:00
Simon Sapin
641c4909e4 Add std::iter::successors 2018-11-20 18:22:40 +01:00
Simon Sapin
22228186c0 Copy is best avoided on iterators 2018-11-20 18:22:40 +01:00
Simon Sapin
544ad37753 Unfold<St, F>: Debug without F: Debug 2018-11-20 18:22:40 +01:00
Simon Sapin
48aae09e9f Add std::iter::unfold 2018-11-20 18:22:40 +01:00
Corey Farwell
033cbfec4d Incorporate dyn into more comments and docs. 2018-11-20 09:35:03 -05:00
bors
31fa30145e Auto merge of #56049 - newpavlov:revert_51601, r=sfackler
Revert #51601

Closes: #55985

Specialization of `StepBy<Range(Inclusive)>` results in an incorrectly behaving code when `step_by` is combined with `skip` or `nth`.

If this will get merged we probably should reopen issues previously closed by #51601 (if there was any).
2018-11-20 00:02:33 +00:00
Pietro Albini
2a68c0075a
Rollup merge of #56012 - RalfJung:unsafe-cell, r=nikomatsakis
avoid shared ref in UnsafeCell::get

Avoid taking a shared reference in `UnsafeCell::get`. This *should* be taking a raw reference (see https://github.com/rust-lang/rfcs/pull/2582), but that operation is not currently available, so I propose we exploit `repr(transparent)` instead and cast the pointer around.

This is required to make `UnsafeCell::get` pass the [stacked borrows implementation](https://www.ralfj.de/blog/2018/11/16/stacked-borrows-implementation.html) in miri (currently, `UnsafeCell::get` is on a whitelist, but that is of course not very satisfying). It shouldn't affect normal execution/codegen. Would be great if we could get this landed and shrink miri's whitelist!

Cc @nikomatsakis
2018-11-19 22:06:37 +08:00
0xrgb
7c9bcc5266
Update any.rs documentation using keyword dyn 2018-11-19 15:59:21 +09:00
Pietro Albini
5e2ff63e29
Rollup merge of #55919 - Turbo87:num-tests, r=dtolnay
core/tests/num: Simplify `test_int_from_str_overflow()` test code

This commit changes the test code to compare against easier-to-read, static values instead of relying on the result of `wrapping_add()` which may or may not result in the value that we expect.
2018-11-18 23:24:42 +01:00
Артём Павлов [Artyom Pavlov]
6357021294
fix test 2018-11-19 01:01:06 +03:00
Артём Павлов [Artyom Pavlov]
6ad61b9c3b
tests 2018-11-18 23:14:52 +03:00
Артём Павлов [Artyom Pavlov]
126b71f690
revert 2018-11-18 21:39:23 +03:00
Ralf Jung
25d46f3091 add comment explaining why what we do is legal 2018-11-17 10:20:28 +01:00
Ralf Jung
41434e001b avoid shared ref in UnsafeCell::get 2018-11-16 22:17:26 +01:00
Pietro Albini
f40f04bcc1
Rollup merge of #55932 - Turbo87:to_digit, r=alexcrichton
core/char: Speed up `to_digit()` for `radix <= 10`

I noticed that `char::to_digit()` seemed to do a bit of extra work for handling `[a-zA-Z]` characters. Since `to_digit(10)` seems to be the most common case (at least in the `rust` codebase) I thought it might be valuable to create a fast path for that case, and according to the benchmarks that I added in one of the commits it seems to pay off. I also created another fast path for the `radix < 10` case, which also seems to have a positive effect.

It is very well possible that I'm measuring something entirely unrelated though, so please verify these numbers and let me know if I missed something!

### Before

```
# Run 1
test char::methods::bench_to_digit_radix_10      ... bench:      16,265 ns/iter (+/- 1,774)
test char::methods::bench_to_digit_radix_16      ... bench:      13,938 ns/iter (+/- 2,479)
test char::methods::bench_to_digit_radix_2       ... bench:      13,090 ns/iter (+/- 524)
test char::methods::bench_to_digit_radix_36      ... bench:      14,236 ns/iter (+/- 1,949)

# Run 2
test char::methods::bench_to_digit_radix_10      ... bench:      16,176 ns/iter (+/- 1,589)
test char::methods::bench_to_digit_radix_16      ... bench:      13,896 ns/iter (+/- 3,140)
test char::methods::bench_to_digit_radix_2       ... bench:      13,158 ns/iter (+/- 1,112)
test char::methods::bench_to_digit_radix_36      ... bench:      14,206 ns/iter (+/- 1,312)

# Run 3
test char::methods::bench_to_digit_radix_10      ... bench:      16,221 ns/iter (+/- 2,423)
test char::methods::bench_to_digit_radix_16      ... bench:      14,361 ns/iter (+/- 3,926)
test char::methods::bench_to_digit_radix_2       ... bench:      13,097 ns/iter (+/- 671)
test char::methods::bench_to_digit_radix_36      ... bench:      14,388 ns/iter (+/- 1,068)
```

### After

```
# Run 1
test char::methods::bench_to_digit_radix_10      ... bench:      11,521 ns/iter (+/- 552)
test char::methods::bench_to_digit_radix_16      ... bench:      12,926 ns/iter (+/- 684)
test char::methods::bench_to_digit_radix_2       ... bench:      11,266 ns/iter (+/- 1,085)
test char::methods::bench_to_digit_radix_36      ... bench:      14,213 ns/iter (+/- 614)

# Run 2
test char::methods::bench_to_digit_radix_10      ... bench:      11,424 ns/iter (+/- 1,042)
test char::methods::bench_to_digit_radix_16      ... bench:      12,854 ns/iter (+/- 1,193)
test char::methods::bench_to_digit_radix_2       ... bench:      11,193 ns/iter (+/- 716)
test char::methods::bench_to_digit_radix_36      ... bench:      14,249 ns/iter (+/- 3,514)

# Run 3
test char::methods::bench_to_digit_radix_10      ... bench:      11,469 ns/iter (+/- 685)
test char::methods::bench_to_digit_radix_16      ... bench:      12,852 ns/iter (+/- 568)
test char::methods::bench_to_digit_radix_2       ... bench:      11,275 ns/iter (+/- 1,356)
test char::methods::bench_to_digit_radix_36      ... bench:      14,188 ns/iter (+/- 1,501)
```

I ran the benchmark using:

```sh
python x.py bench src/libcore --stage 1 --keep-stage 0 --test-args "bench_to_digit"
```
2018-11-15 11:04:46 +01:00
Pietro Albini
66fcb3ceb2
Rollup merge of #55901 - euclio:speling, r=petrochenkov
fix various typos in doc comments
2018-11-15 11:04:42 +01:00
Pietro Albini
202724cddc
Rollup merge of #55785 - stjepang:unsized-drop-forget, r=alexcrichton
Add mem::forget_unsized() for forgetting unsized values

~~Allows passing values of `T: ?Sized` types to `mem::drop` and `mem::forget`.~~

Adds `mem::forget_unsized()` that accepts `T: ?Sized`.

I had to revert the PR that removed the `forget` intrinsic and replaced it with `ManuallyDrop`: https://github.com/rust-lang/rust/pull/40559
We can't use `ManuallyDrop::new()` here because it needs `T: Sized` and we don't have support for unsized return values yet (will we ever?).

r? @eddyb
2018-11-15 11:04:38 +01:00
Pietro Albini
d7c833b7ef
Rollup merge of #55507 - fhartwig:size_of_intrinsic_docs, r=frewsxcv
Add link to std::mem::size_of to size_of intrinsic documentation

The other intrinsics with safe/stable alternatives already have documentation to this effect.
2018-11-15 11:04:30 +01:00
Tobias Bieniek
cfbae3e194 core/tests/num: Simplify test_int_from_str_overflow() test code
This commit changes the test code to compare against easier-to-read, static values instead of relying on the result of `wrapping_add()` which may or may not result in the value that we expect.
2018-11-14 15:01:27 +01:00
Tobias Bieniek
7843e2792d core/char: Add comment to to_digit() 2018-11-14 11:26:00 +01:00
Tobias Bieniek
64a5172652 core/char: Drop radix == 10 special case
This seems to perform equally well
2018-11-14 08:55:53 +01:00