Commit graph

9991 commits

Author SHA1 Message Date
Andrew Banchich
b7091e4f52 rewrite documentation for unimplemented! 2019-10-06 15:58:34 -04:00
Mazdak Farrokhzad
1486b7f91c
Rollup merge of #64641 - cuviper:extern-rust-ctypes, r=estebank
Exempt extern "Rust" from improper_ctypes

It should be fine for Rust ABIs to involve any Rust type.

Fixes #64593.
2019-09-21 16:01:34 +02:00
bors
5349e69ae2 Auto merge of #64047 - timvermeulen:cmp_min_max_by, r=cuviper
Add `cmp::{min_by, min_by_key, max_by, max_by_key}`

This adds the following functions to `core::cmp`:

- `min_by`
- `min_by_key`
- `max_by`
- `max_by_key`

`min_by` and `max_by` are somewhat trivial to implement, but not entirely because `min_by` returns the first value in case the two are equal (and `max_by` the second). `min` and `max` can be implemented in terms of `min_by` and `max_by`, but not as easily the other way around.

To give an example of why I think these functions could be useful: the `Iterator::{min_by, min_by_key, max_by, max_by_key}` methods all currently hard-code the behavior mentioned above which is an ever so small duplication of logic. If we delegate them to `cmp::{min_by, max_by}` methods instead, we get the correct behavior for free. (edit: this is now included in the PR)

I added `min_by_key` / `max_by_key` for consistency's sake but I wouldn't mind removing them. I don't have a particular use case in mind for them, and `min_by` / `max_by` seem to be more useful.

Tracking issue: #64460
2019-09-21 04:21:25 +00:00
Josh Stone
9f374da467 Exempt extern "Rust" from improper_ctypes
It should be fine for Rust ABIs to involve any Rust type.
2019-09-20 15:39:34 -07:00
Tyler Mandry
05d93a7d06
Rollup merge of #64348 - arnohaase:pr_documentation_spin_loop_hint, r=alexcrichton
PR: documentation spin loop hint

The documentation for 'spin loop hint' explains that yield is better if the lock holder is running on the same CPU. I suggest that 'CPU or core' would be clearer.
2019-09-18 10:58:05 -07:00
Arno Haase
eb48b5d983 broken hyperlinks in documentation 2019-09-18 12:31:34 +02:00
Lzu Tao
bec0a76727 doc: Format some primitives examples 2019-09-18 08:24:24 +00:00
Tyler Mandry
d782f09ae0
Rollup merge of #64529 - taiki-e:docs-pin-as-mut, r=RalfJung
Add an example to Pin::as_mut

https://github.com/taiki-e/pin-project/issues/89#issuecomment-531701172

r? @RalfJung
2019-09-17 14:10:54 -07:00
Tyler Mandry
d6f2205ed8
Rollup merge of #64436 - llogiq:transmute-docs, r=RalfJung
improve Vec example soundness in mem::transmute docs

The previous version of the `Vec` example had a case of questionable soundness, because at one point `v_orig` was aliased.

r? @RalfJung
2019-09-17 14:10:50 -07:00
Andre Bogus
ab6e108644 improve Vec example soundness in mem::transmute docs 2019-09-17 18:31:54 +02:00
Taiki Endo
a22e9ee8d0
Update src/libcore/pin.rs
Co-Authored-By: Ralf Jung <post@ralfj.de>
2019-09-17 20:02:48 +09:00
Taiki Endo
522f4e1f3e Add an example to Pin::as_mut 2019-09-17 19:41:12 +09:00
Arno Haase
f4f136e67b newly phrased documentation for spin loop hints 2019-09-17 12:09:07 +02:00
Mazdak Farrokhzad
a1fd9bae2c
Rollup merge of #64531 - taiki-e:pin-self, r=Centril
Use shorthand syntax in the self parameter of methods of Pin
2019-09-17 03:08:41 +02:00
Mazdak Farrokhzad
52fa593441
Rollup merge of #64530 - taiki-e:docs-pin-lifetimes, r=Centril
Elide lifetimes in `Pin<&(mut) Self>`
2019-09-17 03:08:39 +02:00
Taiki Endo
076e0ce259 Use shorthand syntax in the self parameter of methods of Pin 2019-09-17 08:54:30 +09:00
Taiki Endo
3a046ffa71 Elide lifetimes in Pin<&(mut) Self> 2019-09-17 08:39:34 +09:00
varkor
18b24b718d Make some adjustments to the documentation for std::convert::identity
Fixes some extra blank lines and makes some minor tweaks to the wording.
2019-09-16 15:43:46 +01:00
Tim Vermeulen
72175915d6 Simplify Iterator::{min_by, max_by} using cmp::{min_by, max_by} 2019-09-14 21:52:08 +02:00
Tim Vermeulen
6e5ada43bf Add cmp::{min_by, min_by_key, max_by, max_by_key} 2019-09-14 21:52:08 +02:00
Mazdak Farrokhzad
afc52916f6
Rollup merge of #64203 - alexreg:rush-pr-2, r=centril
A few cosmetic improvements to code & comments in liballoc and libcore

Factored out from hacking on rustc for work on the REPL.

r? @Centril
2019-09-14 16:42:22 +02:00
Mazdak Farrokhzad
4f1d50e65f
Rollup merge of #64349 - arnohaase:pr_documentation_atomicptr, r=cramertj
documentation for AtomicPtr CAS operations

The examples in the documentation for AtomicPtr CAS operations only show code that does *not* perform the CAS operation. I suggest to change them so that they actually do exchange the AtomicPtr's value.
2019-09-11 02:38:10 +02:00
Mazdak Farrokhzad
13726cc444
Rollup merge of #63786 - tspiteri:const-abs, r=alexcrichton
Make `abs`, `wrapping_abs`, `overflowing_abs` const functions

This makes `abs`, `wrapping_abs` and `overflowing_abs` const functions like #58044 makes `wrapping_neg` and `overflowing_neg` const functions.

`abs` is made const by returning `(self ^ -1) - -1` = `!self + 1` = `-self` for negative numbers and `(self ^ 0) - 0` = `self` for non-negative numbers. The subexpression `self >> ($BITS - 1)` evaluates to `-1` for negative numbers and `0` otherwise. The subtraction overflows when `self` is `min_value()`, as we would be subtracting `max_value() - -1`; this is when `abs` should overflow.

`wrapping_abs` and `overflowing_abs` make use of `wrapping_sub` and `overflowing_sub` instead of the subtraction operator.
2019-09-10 17:19:19 +02:00
Arno Haase
51c49e2573 fixed linter error 2019-09-10 14:25:40 +02:00
Arno Haase
7ad44c7c9c documentation for AtomicPtr CAS operations 2019-09-10 14:18:16 +02:00
Arno Haase
66e4b34471 typo fix 2019-09-10 14:04:52 +02:00
Arno Haase
356b4c81a0 documentation enhancement for 'spin loop hint': replace 'CPU' with 'CPU or core' 2019-09-10 14:03:31 +02:00
bors
0b36e9dea3 Auto merge of #64313 - Centril:rollup-7w8b67g, r=Centril
Rollup of 5 pull requests

Successful merges:

 - #63468 (Resolve attributes in several places)
 - #64121 (Override `StepBy::{try_fold, try_rfold}`)
 - #64278 (check git in bootstrap.py)
 - #64306 (Fix typo in config.toml.example)
 - #64312 (Unify escape usage)

Failed merges:

r? @ghost
2019-09-09 16:33:43 +00:00
Mazdak Farrokhzad
7e98ec5079
Rollup merge of #64121 - timvermeulen:iter_step_by_internal, r=scottmcm
Override `StepBy::{try_fold, try_rfold}`

Previous PR: https://github.com/rust-lang/rust/pull/51435

The previous PR was closed in favor of https://github.com/rust-lang/rust/pull/51601, which was later reverted. I don't think these implementations will make it harder to specialize `StepBy<Range<_>>` later, so we should be able to land this without any consequences.

This should fix https://github.com/rust-lang/rust/issues/57517 – in my benchmarks `iter` and `iter.step_by(1)` now perform equally well, provided internal iteration is used.
2019-09-09 17:42:24 +02:00
bors
45859b7ca7 Auto merge of #63118 - Centril:stabilize-bind-by-move, r=matthewjasper
Stabilize `bind_by_move_pattern_guards` in Rust 1.39.0

Closes https://github.com/rust-lang/rust/issues/15287.

After stabilizing `#![feature(bind_by_move_pattern_guards)]`, you can now use bind-by-move bindings in patterns and take references to those bindings in `if` guards of `match` expressions. For example, the following now becomes legal:

```rust
fn main() {
    let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    match array {
        nums
//      ---- `nums` is bound by move.
            if nums.iter().sum::<u8>() == 10
//                 ^------ `.iter()` implicitly takes a reference to `nums`.
        => {
            drop(nums);
//          --------- Legal as `nums` was bound by move and so we have ownership.
        }
        _ => unreachable!(),
    }
}
```

r? @matthewjasper
2019-09-09 12:46:59 +00:00
Mazdak Farrokhzad
0ac09aef84
Rollup merge of #62205 - timvermeulen:iter_order_by, r=KodrAus
Add Iterator comparison methods that take a comparison function

This PR adds `Iterator::{cmp_by, partial_cmp_by, eq_by, ne_by, lt_by, le_by, gt_by, ge_by}`. We already have `Iterator::{cmp, partial_cmp, ...}` which are less general (but not any simpler) than the ones I'm proposing here.

I'm submitting this PR now because #61505 has been merged, so this change should not have a noticeable effect on the `Iterator` docs page size.

The diff is quite messy, here's what I changed:
- The logic of `cmp` / `partial_cmp` / `eq` is moved to `cmp_by` / `partial_cmp_by` / `eq_by` respectively, changing `x.cmp(&y)` to `cmp(&x, &y)` in the `cmp` method where `cmp` is the given comparison function (and similar for `partial_cmp_by` and `eq_by`).
- `ne_by` / `lt_by` / `le_by` / `gt_by` / `ge_by` are each implemented in terms of one of the three methods above.
- The existing comparison methods are each forwarded to their `_by` counterpart, passing one of `Ord::cmp` / `PartialOrd::partial_cmp` / `PartialEq::eq` as the comparison function.

The corresponding `_by_key` methods aren't included because they're not as fundamental as the `_by` methods and can easily be implemented in terms of them. Is that reasonable, or would adding the `_by_key` methods be desirable for the sake of completeness?

I didn't add any tests – I couldn't think of any that weren't already covered by our existing tests. Let me know if there's a particular test that would be useful to add.
2019-09-08 12:11:55 +02:00
Mazdak Farrokhzad
e362ff9feb bootstrap -> boostrap_stdarch_ignore_this 2019-09-08 01:39:24 +02:00
Mazdak Farrokhzad
0356813b27 Dont use gate bind_by_move_pattern_guards internally. 2019-09-08 01:27:10 +02:00
Mazdak Farrokhzad
cd3cb281da
Rollup merge of #64255 - varkor:bool-to-option, r=Centril
Add methods for converting `bool` to `Option<T>`

This provides a reference implementation for https://github.com/rust-lang/rfcs/pull/2757.
2019-09-08 00:07:36 +02:00
Vadim Petrochenkov
f7434aef26 Support "soft" feature-gating using a lint
Use it for feature-gating `#[bench]`
2019-09-07 21:37:51 +03:00
varkor
7b3f72906f Add tracking issue 2019-09-07 17:06:39 +01:00
varkor
0f0e1c1691 Move libcore/bool/mod.rs to libcore/bool.rs 2019-09-07 17:04:19 +01:00
varkor
b73e32c795 Add bool::then and bool::then_with 2019-09-07 15:49:27 +01:00
varkor
f0386a10e0 Add "bool" lang item 2019-09-07 13:16:18 +01:00
Mazdak Farrokhzad
ee54499be4
Rollup merge of #64208 - guanqun:py-is-not-none, r=matklad
it's more pythonic to use 'is not None' in python files
2019-09-06 19:00:52 +02:00
Mazdak Farrokhzad
b0dfc8a6f1
Rollup merge of #63969 - GuillaumeGomez:option-docs-example, r=sfackler
Add missing examples for Option type

cc @rust-lang/docs
2019-09-06 19:00:43 +02:00
Alexander Regueiro
b0006dff10 A few cosmetic improvements to code & comments in liballoc and libcore 2019-09-06 16:02:25 +01:00
Tim Vermeulen
58ba1f51ef Add Iterator comparison methods that take a comparison function 2019-09-06 15:30:17 +02:00
Mazdak Farrokhzad
a852ebb084
Rollup merge of #64174 - GuillaumeGomez:missing-iterator-examples, r=sfackler
Add missing code examples on Iterator trait

Fixes #63865

cc @rust-lang/docs
2019-09-06 09:36:44 +02:00
Guanqun Lu
ba7d1b80d0 it's more pythonic to use 'is not None' in python files 2019-09-06 15:14:25 +08:00
Guillaume Gomez
c9bd2f73a3 Add missing code examples on Iterator trait 2019-09-05 13:38:11 +02:00
Mazdak Farrokhzad
a8d4e4f435
Rollup merge of #62848 - matklad:xid-unicode, r=petrochenkov
Use unicode-xid crate instead of libcore

This PR proposes to remove `char::is_xid_start` and `char::is_xid_continue` functions from `libcore` and use `unicode_xid` crate from crates.io (note that this crate is already present in rust-lang/rust's Cargo.lock).

Reasons to do this:

* removing rustc-binary-specific stuff from libcore
* making sure that, across the ecosystem, there's a single definition of what rust identifier is (`unicode-xid` has almost 10 million downs, as a `proc_macro2` dependency)
* making it easier to share `rustc_lexer` crate with rust-analyzer: no need to `#[cfg]` if we are building as a part of the compiler

Reasons not to do this:

* increased maintenance burden: we'll need to upgrade unicode version both in libcore and in unicode-xid. However, this shouldn't be a too heavy burden: just running `./unicode.py` after new unicode version. I (@matklad) am ready to be a t-compiler side maintainer of unicode-xid. Moreover, given that xid-unicode is an important dependency of syn, *someone* needs to maintain it anyway.
* xid-unicode implementation is significantly slower. It uses a more compact table with binary search, instead of a trie. However, this shouldn't matter in practice, because we have fast-path for ascii anyway, and code size savings is a plus. Moreover, in #59706 not using libcore turned out to be *faster*, presumably beacause checking for whitespace with match is even faster.

<details>

<summary>old description</summary>

Followup to #59706

r? @eddyb

Note that this doesn't actually remove tables from libcore, to avoid conflict with https://github.com/rust-lang/rust/pull/62641.

cc https://github.com/unicode-rs/unicode-xid/pull/11

</details>
2019-09-05 12:11:04 +02:00
Mazdak Farrokhzad
a0f0a96e5d
Rollup merge of #64142 - lzutao:fix-doc-cmp, r=jonas-schievink
Fix doc links in `std::cmp` module

r? @jonas-schievink
2019-09-05 03:59:51 +02:00
Mazdak Farrokhzad
d1d511df8c
Rollup merge of #63985 - ghedo:stabilize_pin_into_inner, r=alexcrichton
Stabilize pin_into_inner in 1.39.0

FCP: https://github.com/rust-lang/rust/issues/60245#issuecomment-522258129

Closes #60245
2019-09-05 03:59:36 +02:00
Mazdak Farrokhzad
38ce68768d
Rollup merge of #63549 - sfanxiang:rev-rposition, r=scottmcm
Rev::rposition counts from the wrong end

Introduced in #43074.

cc @SimonSapin
2019-09-05 03:59:35 +02:00