Commit graph

1354 commits

Author SHA1 Message Date
bors
70c33bb8e2 Auto merge of #53080 - hermord:rc-opt, r=alexcrichton
Change `Rc::inc_{weak,strong}` to better hint optimization to LLVM

As discussed in #13018, `Rc::inc_strong` and `Rc::inc_weak` are changed to allow compositions of `clone` and `drop` to be better optimized. Almost entirely as in [this comment](https://github.com/rust-lang/rust/issues/13018#issuecomment-408642184), except that `abort` on zero is added so that a `drop(t.clone())` does not produce a zero check followed by conditional deallocation.

This is different from #21418 in that it doesn't rely on `assume`, avoiding the prohibitive compilation slowdown.

[Before and after IR](https://gist.github.com/hermord/266e55451b7fe0bb8caa6e35d17c86e1).
2018-08-21 06:40:20 +00:00
bors
d5b6b95aef Auto merge of #52553 - Pazzaz:vecdeque-append, r=SimonSapin
Non-naive implementation of `VecDeque.append`

Replaces the old, simple implementation with a more manual (and **unsafe** 😱) one. I've added 1 more test and verified that it covers all 6 code paths in the function.

This new implementation was about 60% faster than the old naive one when I tried benchmarking it.
2018-08-18 08:56:12 +00:00
Pazzaz
b063bd4616 Test VecDeque append not dropping twice 2018-08-15 19:42:07 +02:00
Pazzaz
76625280b2 Clarify unused_as_mut_slices 2018-08-15 18:01:42 +02:00
Corey Farwell
d1193bf95e Add doc examples for std::alloc::{alloc,alloc_zeroed}. 2018-08-14 21:32:11 -04:00
Pazzaz
ae0f254311 Clarify dst condition 2018-08-14 20:56:22 +02:00
Pazzaz
8d3554c48d Don't drop values in other, just move the tail 2018-08-14 20:54:25 +02:00
Corey Farwell
ec18991492 Add links to std::char::REPLACEMENT_CHARACTER from docs.
There are a few places where we mention the replacement character in the
docs, and it could be helpful for users to utilize the constant which is
available in the standard library, so let’s link to it!
2018-08-11 15:42:35 -04:00
Pazzaz
894c9ca1a7 Add benchmark for VecDeque append 2018-08-10 21:52:00 +02:00
memoryruins
ce7f0c483d liballoc: enable feature(nll) for bootstrap 2018-08-09 01:50:49 -04:00
kennytm
3385cae74a
Rollup merge of #53068 - MajorBreakfast:spawn, r=cramertj
Rename Executor trait to Spawn

Renames the `Executor` trait to `Spawn` and the method on `Context` to `spawner`.

Note: Best only merge this after we've the alpha 3 announcement post ready.

r? @cramertj
2018-08-07 16:55:42 +08:00
Josef Reinhard Brandl
60aa11df4c Rename Executor trait to Spawn 2018-08-06 12:18:47 +02:00
varkor
319b052357 Fix stage 2 tests 2018-08-05 15:54:49 +01:00
varkor
a00ba4d71e Correct invalid feature attributes 2018-08-05 15:54:49 +01:00
varkor
64185f205d Remove unnecessary or invalid feature attributes 2018-08-05 15:54:48 +01:00
Dmytro Shynkevych
4e17fbde0b Fixed typo 2018-08-05 02:41:14 -04:00
Dmytro Shynkevych
1553ea2316 Changed Rc::inc_{weak,strong} to better hint optimization to LLVM 2018-08-04 15:41:12 -04:00
bors
03da14ba8c Auto merge of #52949 - Mark-Simulacrum:snap, r=alexcrichton
Switch to bootstrapping from 1.29 beta

r? @alexcrichton
2018-08-02 15:34:21 +00:00
Mark Rousskov
683a3db01f Switch to bootstrapping from 1.29 beta 2018-08-01 11:59:08 -06:00
Laurentiu Nicola
38e311e448 Use SetLenOnDrop in Vec::truncate()
This avoids a redundant length check in some cases when calling
`Vec::truncate` or `Vec::clear`.

Fixes #51802
2018-07-31 20:53:53 +03:00
kennytm
2c088cb03e
Rollup merge of #52769 - sinkuu:stray_test, r=alexcrichton
Incorporate a stray test

`liballoc/repeat-generic-slice.rs` doesn't seem to be tested (I think it was intended to be placed in `run-pass`). This PR incorporates the test into `liballoc/tests`.
2018-07-28 16:25:04 +08:00
bors
4f1e235744 Auto merge of #52336 - ishitatsuyuki:dyn-rollup, r=Mark-Simulacrum
Rollup of bare_trait_objects PRs

All deny attributes were moved into bootstrap so they can be disabled with a line of config.

Warnings for external tools are allowed and it's up to the tool's maintainer to keep it warnings free.

r? @Mark-Simulacrum
cc @ljedrz @kennytm
2018-07-27 20:27:40 +00:00
Shotaro Yamada
b326e71b79 Incorporate a stray test 2018-07-27 18:07:20 +09:00
Tatsuyuki Ishi
e098985939 Deny bare_trait_objects globally 2018-07-25 10:25:29 +09:00
Tatsuyuki Ishi
66c4dc9769 Add missing dyn 2018-07-25 10:24:31 +09:00
tinaun
75d22263c9 Impl Executor for Box<E: Executor> 2018-07-24 17:09:12 -04:00
bors
a1e6bcb208 Auto merge of #52189 - cuviper:static-box-leak, r=bluss
doc: Clarify the lifetime returned by `Box::leak`

`Box::leak` mentions that it can return a `'static` reference, but it
wasn't immediately clear to me why it doesn't always do so.  This is
because of the `T: 'a` constraint needed to form a valid reference, and
in general we want to be more flexible than requiring `T: 'static`.
This patch tries to clarify the relationship between `T` and `'a`.
2018-07-24 10:46:21 +00:00
Ralf Jung
a303741334 typos 2018-07-23 12:53:37 +02:00
Ralf Jung
33b8f6253f Don't use NonNull::dangling as sentinel value
Instead, rely on alignment and use usize::MAX as sentinel.
2018-07-23 11:31:55 +02:00
Pazzaz
6ebd62b8ff Make VecDeque append safer and easier to understand 2018-07-22 22:18:05 +02:00
Pazzaz
9f1fdecb3c Simplify vecdeque append test 2018-07-22 22:15:29 +02:00
kennytm
67cf3ba528
Rollup merge of #51807 - newpavlov:deprecate_str_slice, r=alexcrichton
Deprecation of str::slice_unchecked(_mut)

Closes #51715

I am not sure if 1.28.0 or 1.29.0 should be used for deprecation version, for now it's 1.28.0.

Additionally I've replaced `slice_unchecked` uses with `get_unchecked`. The only places where this method is still used are `src/liballoc/tests/str.rs` and `src/liballoc/tests/str.rs`.
2018-07-22 22:10:09 +08:00
Vadim Petrochenkov
2eb83ee527 data_structures: Add a reference wrapper for pointer-indexed maps/sets
Use `ptr::eq` for comparing pointers
2018-07-20 12:22:24 +03:00
Pazzaz
24bc854b8c Non-naive implementation for VecDeque.append 2018-07-19 23:32:22 +02:00
kennytm
2712fbed24
Rollup merge of #52116 - Pazzaz:match-str-case, r=SimonSapin
Handle array manually in str case conversion methods

Avoiding the overhead incurred from `String.extend(char.to_lowercase())` showed a notable performance improvement when I benchmarked it.

I tested on these strings:
```rust
ALL_LOWER:       "loremipsumdolorsitametduosensibusmnesarchumabcdefgh"
ALL_UPPER:       "LOREMIPSUMDOLORSITAMETDUOSENSIBUSMNESARCHUMABCDEFGH"
REALISTIC_UPPER: "LOREM IPSUM DOLOR SIT AMET, DUO SENSIBUS MNESARCHUM"
SIGMAS:          "ΣΣΣΣΣ ΣΣΣΣΣ ΣΣΣΣΣ ΣΣΣ ΣΣΣΣ, ΣΣΣ ΣΣΣΣΣΣΣΣ ΣΣΣΣΣΣΣΣΣΣ"
WORD_UPPER:      "Lorem Ipsum Dolor Sit Amet, Duo Sensibus Mnesarchum"
```
the performance improvements of `to_lowercase()` were
```
running 10 tests
test tests::all_lower           ... bench:       1,752 ns/iter (+/- 49)
test tests::all_lower_new       ... bench:       1,266 ns/iter (+/- 15)   -28%
test tests::all_upper           ... bench:       1,832 ns/iter (+/- 39)
test tests::all_upper_new       ... bench:       1,337 ns/iter (+/- 18)   -27%
test tests::realistic_upper     ... bench:       1,993 ns/iter (+/- 14)
test tests::realistic_upper_new ... bench:       1,445 ns/iter (+/- 22)   -27%
test tests::sigmas              ... bench:       1,342 ns/iter (+/- 39)
test tests::sigmas_new          ... bench:       1,226 ns/iter (+/- 16)    -9%
test tests::word_upper          ... bench:       1,899 ns/iter (+/- 12)
test tests::word_upper_new      ... bench:       1,381 ns/iter (+/- 26)   -27%
```
and of `to_uppercase()`
```
running 10 tests
test tests::all_lower           ... bench:       1,813 ns/iter (+/- 20)
test tests::all_lower_new       ... bench:       1,321 ns/iter (+/- 16)   -27%
test tests::all_upper           ... bench:       1,629 ns/iter (+/- 22)
test tests::all_upper_new       ... bench:       1,241 ns/iter (+/- 9)    -24%
test tests::realistic_upper     ... bench:       1,670 ns/iter (+/- 24)
test tests::realistic_upper_new ... bench:       1,241 ns/iter (+/- 17)   -26%
test tests::sigmas              ... bench:       2,053 ns/iter (+/- 20)
test tests::sigmas_new          ... bench:       1,753 ns/iter (+/- 23)   -15%
test tests::word_upper          ... bench:       1,873 ns/iter (+/- 30)
test tests::word_upper_new      ... bench:       1,412 ns/iter (+/- 25)   -25%
```
I gave up on the more advanced method from #52061 as it wasn't always a clear improvement and would help in even less cases if this PR was merged.
2018-07-18 22:34:54 +08:00
ljedrz
217f8fbd45 Revert borked changes in last commit. 2018-07-11 10:19:54 +02:00
ljedrz
cd44b3ddad Add missing dyn in liballoc 2018-07-10 22:32:19 +02:00
ljedrz
296e72f11c Deny bare trait objects in in src/liballoc 2018-07-10 20:45:16 +02:00
Josh Stone
6aeeda714e doc: Clarify the lifetime returned by Box::leak
`Box::leak` mentions that it can return a `'static` reference, but it
wasn't immediately clear to me why it doesn't always do so.  This is
because of the `T: 'a` constraint needed to form a valid reference, and
in general we want to be more flexible than requiring `T: 'static`.
This patch tries to clarify the relationship between `T` and `'a`.
2018-07-09 13:25:36 -07:00
bors
c6807bb1b2 Auto merge of #52159 - SimonSapin:alloc-prelude, r=alexcrichton
Add the `alloc::prelude` module

It contains the re-exports that are in `std::prelude::v1` but not in `core::prelude::v1`.

Calling it prelude is somewhat of a misnomer since (unlike those modules in `std` or `core`) its contents are never implicitly imported in modules. Rather it is intended to be used with an explicit glob import like `use alloc::prelude::*;`. However there is precedent for the same misnomer with `std::io::prelude`, for example.

This new module is unstable with the same feature name as the `alloc` care. They are proposed for stabilization together in RFC https://github.com/rust-lang/rfcs/pull/2480.
2018-07-09 14:29:59 +00:00
Orson Peters
e529dfd590 Removed a single trailing space. Oops. 2018-07-09 06:31:24 +02:00
Orson Peters
6faa295cec Reimplemented Vec's swap_remove to not rely on pop. 2018-07-09 06:13:58 +02:00
Orson Peters
295768ae8f Performance improvement of Vec's swap_remove. 2018-07-09 05:01:39 +02:00
Simon Sapin
b842177cfa Add the alloc::prelude module
It contains the re-exports that are in `std::prelude::v1`
but not in `core::prelude::v1`.

Calling it prelude is somewhat of a misnomer since (unlike those modules
in `std` or `core`) its contents are never implicitly imported in modules.
Rather it is intended to be used with an explicit glob import like
`use alloc::prelude::*;`.
However there is precedent for the same misnomer with `std::io::prelude`,
for example.

This new module is unstable with the same feature name as the `alloc` care.
They are proposed for stabilization together in RFC
https://github.com/rust-lang/rfcs/pull/2480
2018-07-07 23:08:43 +02:00
Mark Rousskov
e3823388a8
Rollup merge of #52103 - tmccombs:rc_downcast, r=Mark-Simulacrum
Stabilize rc_downcast

Fixes #44608
2018-07-06 21:29:17 -06:00
Simon Sapin
67202b8b68 Fix is_dangling import when Arc is #[cfg]’ed out 2018-07-07 01:44:57 +02:00
Simon Sapin
5717d99d1b Add some unit tests for dangling Weak references 2018-07-07 01:41:30 +02:00
Simon Sapin
41730b7e2e Rc: remove unused allocation from Weak::new()
Same as https://github.com/rust-lang/rust/pull/50357
2018-07-07 01:41:30 +02:00
Simon Sapin
6e2c49ff0e Use an aligned dangling pointer in Weak::new, rather than address 1 2018-07-07 01:41:30 +02:00
Pazzaz
ad7621d42e Handle array manually in string case conversion methods 2018-07-06 17:20:39 +02:00