Commit graph

10846 commits

Author SHA1 Message Date
Linus Färnstrand
a88b36b93b Stop importing int/float modules in libcore 2020-04-05 11:22:01 +02:00
Mazdak Farrokhzad
9b22fdc121
Rollup merge of #69860 - faern:use-assoc-int-consts, r=dtolnay
Use associated numeric consts in documentation

Now when the associated constants on int/float types are stabilized and the recommended way of accessing said constants (#68952). We can start using it in this repository, and recommend it via documentation example code.

This PR is the reincarnation of #67913 minus the actual adding + stabilization of said constants. (EDIT: Now it's only changing the documentation. So users will see the new consts, but we don't yet update the internal code)

Because of how fast bit rot happens to PRs that touch this many files, it does not try to replace 100% of the old usage of the constants in the entire repo, but a good chunk of them.
2020-04-03 22:55:02 +02:00
Dylan DPC
04824f302a
Rollup merge of #70731 - JohnTitor:follow-up-rustc-middle, r=eddyb
Minor follow-up after renaming librustc(_middle)

Fixes #70537
r? @Centril @eddyb
2020-04-03 13:31:30 +02:00
Dylan DPC
53d786f404
Rollup merge of #70728 - TimDiekmann:allocref-doc, r=Amanieu
Minor doc improvements on `AllocRef`

r? @Amanieu
2020-04-03 13:31:27 +02:00
Yuki Okushi
99e0d8ed79
Minor follow-up after renaming librustc(_middle) 2020-04-03 19:03:13 +09:00
Linus Färnstrand
c831265940 Replace float module consts with assoc consts in documentation 2020-04-03 09:33:10 +02:00
Linus Färnstrand
c0ec0a27b3 Replace max/min_value() with MAX/MIN assoc consts 2020-04-03 09:33:10 +02:00
Linus Färnstrand
e9ce03648d Make documentation examples use new integer assoc consts 2020-04-03 09:33:10 +02:00
Tim Diekmann
c061ff4b69
Update mod.rs 2020-04-03 08:22:31 +02:00
Tim Diekmann
d8b0c5fb37 Minor doc improvements on AllocRef 2020-04-03 07:28:23 +02:00
Mazdak Farrokhzad
2f28058a34
Rollup merge of #70708 - Pocakking:fix-ascii-case-conv-typo, r=sfackler
Fix typo in u8::to_ascii_uppercase and u8::to_ascii_lowercase

Corrects misspelling of fifth.
2020-04-03 00:32:07 +02:00
Mazdak Farrokhzad
28084a1f36
Rollup merge of #70700 - jrvidal:include-macro-paths, r=Dylan-DPC
Expand on platform details of `include_xxx` macros

This is a small detail that is not explicitly mentioned, but it left me scratching my head for a while until I looked into its implementation details. Maybe worth mentioning.
2020-04-03 00:32:06 +02:00
Mazdak Farrokhzad
e07f57c51c
Rollup merge of #70691 - TimDiekmann:allocref-docs, r=RalfJung
Improve docs in `AllocRef`

r? @RalfJung
2020-04-03 00:32:03 +02:00
Mazdak Farrokhzad
1eabbd024c
Rollup merge of #70487 - Mark-Simulacrum:float-unchecked-casts, r=SimonSapin
Stabilize float::to_int_unchecked

This renames and stabilizes unsafe floating point to integer casts, which are intended to be the substitute for the currently unsound `as` behavior, once that changes to safe-but-slower saturating casts. As such, I believe this also likely unblocks #10184 (our oldest I-unsound issue!), as once this rolls out to stable it would be far easier IMO to change the behavior of `as` to be safe by default.

This does not stabilize the trait or the associated method, as they are deemed internal implementation details (and consumers should not, generally, want to expose them, as in practice all callers likely know statically/without generics what the return type is).

Closes #67058
2020-04-03 00:32:00 +02:00
Pocakking
354ddbfb3f Fix typo in u8::to_ascii_uppercase and u8::to_ascii_lowercase
fith => fifth
2020-04-02 20:01:29 +02:00
Roberto Vidal
65fcc3f1cd Expand on platform details of include_xxx macros 2020-04-02 16:34:43 +02:00
Mazdak Farrokhzad
cb81b41c9a
Rollup merge of #70281 - xfix:infallible-hash, r=dtolnay
Implement Hash for Infallible

https://www.reddit.com/r/rust/comments/fmllgx/never_crate_stable_alternative_to/ lists not implementing `Hash` as a reason for the `never` crate. I see no reason not to implement `Hash` for `Infallible`, so might as well do it.

No changes necessary for `!`, because `!` already implements `Hash` (see https://github.com/rust-lang/rust/pull/51404).
2020-04-02 14:27:52 +02:00
Tim Diekmann
0b61239936 Improve docs in AllocRef 2020-04-02 14:20:35 +02:00
bors
127a11a344 Auto merge of #70362 - TimDiekmann:alloc-overhaul, r=Amanieu
Overhaul of the `AllocRef` trait to match allocator-wg's latest consens; Take 2

GitHub won't let me reopen #69889 so I make a new PR.

In addition to #69889 this fixes the unsoundness of `RawVec::into_box` when using allocators supporting overallocating. Also it uses `MemoryBlock` in `AllocRef` to unify `_in_place` methods by passing `&mut MemoryBlock`. Additionally, `RawVec` now checks for `size_of::<T>()` again and ignore every ZST. The internal capacity of `RawVec` isn't used by ZSTs anymore, as `into_box` now requires a length to be specified.

r? @Amanieu

fixes rust-lang/wg-allocators#38
fixes rust-lang/wg-allocators#41
fixes rust-lang/wg-allocators#44
fixes rust-lang/wg-allocators#51
2020-04-02 06:08:35 +00:00
Dylan DPC
8993358e77
Rollup merge of #70081 - lcnr:issue68387, r=varkor
add `unused_braces` lint

Add the lint `unused_braces` which is warn by default.

`unused_parens` is also extended and now checks anon consts.

closes #68387

r? @varkor
2020-04-01 00:27:20 +02:00
Bastian Kauschke
21c5ccab10 fix internal lint fallout 2020-03-31 19:01:48 +02:00
Mazdak Farrokhzad
4aeeb81db5
Rollup merge of #70588 - Coder-256:str-split-at-docs, r=Dylan-DPC
Fix incorrect documentation for `str::{split_at, split_at_mut}`

The documentation for each method currently states:

> Panics if `mid` is not on a UTF-8 code point boundary, or if it is beyond the last code point of the string slice.

However, this is not consistent with the real behavior, or that of the corresponding methods for `[T]` slices. A comment inside each of the `str` methods states:

> is_char_boundary checks that the index is in [0, .len()]

That is what I would expect the behavior to be, and in fact this seems to be the real behavior. For example ([playground](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8e03dcc209d4dd176df2297523f9fee1)):

```rust
fn main() {
    // Prints ("abc", "") and doesn't panic
    println!("{:?}", "abc".split_at(3));
}
```

In this case, I would interpret "the last code point of the string slice" to mean the byte at index 2 in UTF-8. However, it is possible to pass an index of 3, which is definitely "beyond the last code point of the string slice".

I think that this is much clearer, but feel free to bikeshed.
2020-03-31 15:59:50 +02:00
Mazdak Farrokhzad
9ee373fd94
Rollup merge of #69784 - benesch:fast-strip-prefix-suffix, r=kennytm
Optimize strip_prefix and strip_suffix with str patterns

As mentioned in https://github.com/rust-lang/rust/issues/67302#issuecomment-585639226.
I'm not sure whether adding these methods to `Pattern` is desirable—but they have default implementations so the change is backwards compatible. Plus it seems like they're slated for wholesale replacement soon anyway? #56345

----

Constructing a Searcher in strip_prefix and strip_suffix is
unnecessarily slow when the pattern is a fixed-length string. Add
strip_prefix and strip_suffix methods to the Pattern trait, and add
optimized implementations of these methods in the str implementation.
The old implementation is retained as the default for these methods.
2020-03-31 15:59:40 +02:00
Jacob Greenfield
fcab1f947b
Fix incorrect documentation for str::{split_at, split_at_mut} 2020-03-30 15:48:52 -04:00
Nikhil Benesch
ac478f2f61
Optimize strip_prefix and strip_suffix with str patterns
Constructing a Searcher in strip_prefix and strip_suffix is
unnecessarily slow when the pattern is a fixed-length string. Add
strip_prefix and strip_suffix methods to the Pattern trait, and add
optimized implementations of these methods in the str implementation.
The old implementation is retained as the default for these methods.
2020-03-30 11:10:21 -04:00
Mazdak Farrokhzad
0cb9e36090 rustc -> rustc_middle part 2 2020-03-30 07:16:56 +02:00
Mazdak Farrokhzad
7710f2dd5c rustc -> rustc_middle part 1 2020-03-30 07:02:56 +02:00
Mazdak Farrokhzad
8212a1c7dc
Rollup merge of #70140 - Nemo157:result-flatten, r=Amanieu
Add Result<Result<T, E>, E>::flatten -> Result<T, E>

This PR makes this possible (modulo type inference):

```rust
assert_eq!(Ok(6), Ok(Ok(6)).flatten());
```

Tracking issue: #70142

<sub>largely cribbed directly from <https://github.com/rust-lang/rust/pull/60256></sub>
2020-03-29 16:48:21 +02:00
Mark Rousskov
56147219a5 Stabilize float::to_int_unchecked
This renames and stabilizes unsafe floating point to integer casts, which are
intended to be the substitute for the currently unsound `as` behavior, once that
changes to safe-but-slower saturating casts.
2020-03-29 10:27:07 -04:00
Tim Diekmann
c49f28005d Fix links for AllocInit methods 2020-03-29 12:00:51 +02:00
Tim Diekmann
fcd7092ae1 Revert "Fix links for AllocInit methods"
This reverts commit d241db2d4e.
2020-03-29 11:57:25 +02:00
Mazdak Farrokhzad
873bf46dc1
Rollup merge of #70101 - tmiasko:intrinsics-copy, r=eddyb
Add copy bound to atomic & numeric intrinsics
2020-03-29 11:50:12 +02:00
bors
8045865873 Auto merge of #70370 - petrochenkov:nosmatch, r=Centril
Remove attribute `#[structural_match]` and any references to it

A small remaining part of https://github.com/rust-lang/rust/issues/63438.
2020-03-29 06:33:42 +00:00
Tim Diekmann
d241db2d4e Fix links for AllocInit methods 2020-03-29 03:16:23 +01:00
Tim Diekmann
4309f6d9a1 Minor doc fixes in AllocInit::init 2020-03-29 01:52:21 +01:00
Tim Diekmann
3ade8ae660 Implement init and init_offset on AllocInit and mark it unsafe 2020-03-29 01:47:05 +01:00
Tim Diekmann
bf6a46db31 Make fields in MemoryBlock public 2020-03-28 20:22:07 +01:00
Dylan DPC
7f1e6261bf
Rollup merge of #70486 - Mark-Simulacrum:unicode-shrink, r=dtolnay
Shrink Unicode tables (even more)

This shrinks the Unicode tables further, building upon the wins in #68232 (the previous counts differ due to an interim Unicode version update, see #69929.

The new data structure is slower by around 3x, on the benchmark of looking up every Unicode scalar value in each data set sequentially in every data set included. Note that for ASCII, the exposed functions on `char` optimize with direct branches, so ASCII will retain the same performance regardless of internal optimizations (or the reverse). Also, note that the size reduction due to the skip list (from where the performance losses come) is around 40%, and, as a result, I believe the performance loss is acceptable, as the routines are still quite fast. Anywhere where this is hot, should probably be using a custom data structure anyway (e.g., a raw bitset) or something optimized for frequently seen values, etc.

This PR updates both the bitset data structure, and introduces a new data structure similar to a skip list. For more details, see the [main.rs] of the table generator, which describes both. The commits mostly work individually and document size wins.

As before, this is tested on all valid chars to have the same results as nightly (and the canonical Unicode data sets), happily, no bugs were found.

[main.rs]: fb4a715e18/src/tools/unicode-table-generator/src/main.rs

Set             | Previous |  New  |  % of old  | Codepoints | Ranges |
----------------|---------:|------:|-----------:|-----------:|-------:|
Alphabetic      |     3055 |  1599 |        52% |     132875 |    695 |
Case Ignorable  |     2136 |   949 |        44% |       2413 |    410 |
Cased           |      934 |   359 |        38% |       4286 |    141 |
Cc              |       43 |     9 |        20% |         65 |      2 |
Grapheme Extend |     1774 |   813 |        46% |       1979 |    344 |
Lowercase       |      985 |   867 |        88% |       2344 |    652 |
N               |     1266 |   419 |        33% |       1781 |    133 |
Uppercase       |      934 |   777 |        83% |       1911 |    643 |
White_Space     |      140 |    37 |        26% |         25 |     10 |
----------------|----------|-------|------------|------------|--------|
Total           |    11267 |  5829 |        51% |     -      |   -    |
2020-03-28 15:22:00 +01:00
Mark Rousskov
b6bc906004 Remove separate encoding for a single nonzero-mapping byte
In practice, for the two data sets that still use the bitset encoding (uppercase
and lowercase) this is not a significant win, so just drop it entirely. It costs
us about 5 bytes, and the complexity is nontrivial.
2020-03-27 19:02:23 -04:00
Mark Rousskov
9c1ceece20 Add skip list based implementation for smaller encoding
This arranges for the sparser sets (everything except lower and uppercase) to be
encoded in a significantly smaller context. However, it is also a performance
trade-off (roughly 3x slower than the bitset encoding). The 40% size reduction
is deemed to be sufficiently important to merit this performance loss,
particularly as it is unlikely that this code is hot anywhere (and if it is,
paying the memory cost for a bitset that directly represents the data seems
worthwhile).

Alphabetic     : 1599 bytes     (- 937 bytes)
Case_Ignorable : 949 bytes      (- 822 bytes)
Cased          : 359 bytes      (- 429 bytes)
Cc             : 9 bytes        (-  15 bytes)
Grapheme_Extend: 813 bytes      (- 675 bytes)
Lowercase      : 863 bytes
N              : 419 bytes      (- 619 bytes)
Uppercase      : 776 bytes
White_Space    : 37 bytes       (-  46 bytes)
Total table sizes: 5824 bytes   (-3543 bytes)
2020-03-27 19:02:23 -04:00
Dylan DPC
87fdf35572
Rollup merge of #65222 - Lucretiel:fold_self, r=kodrAus
Proposal: `fold_self` and `try_fold_self` for Iterators

This pull request proposes & implements two new methods on Iterators: `fold_self` and `try_fold_self`. These are variants of `fold` and `try_fold` that use the first element in the iterator as the initial accumulator.

Let me know if a public feature like this requires an RFC, or if this pull request is sufficient as place for discussion.
2020-03-27 15:09:48 +01:00
dylan_DPC
268408f495 remove unused import 2020-03-27 03:21:15 +01:00
dylan_DPC
7e7c2f19a3 simplify test 2020-03-27 02:45:56 +01:00
dylan_DPC
a9a2a319af fix docs 2020-03-26 23:18:37 +01:00
Nathan West
9b429fd121 Add fold_self
- Added `Iterator::fold_first`, which is like `fold`, but uses the first element in the iterator as the initial accumulator
- Includes doc and doctest
- Rebase commit; see #65222 for details

Co-Authored-By: Tim Vermeulen <tvermeulen@me.com>
2020-03-26 20:41:57 +01:00
Tim Diekmann
db15fe6b38 Mark Layout::dangling inline 2020-03-26 17:14:34 +01:00
Tim Diekmann
717e0c7b9d Apply suggestions from code review
Co-Authored-By: Amanieu d'Antras <amanieu@gmail.com>
2020-03-26 17:14:23 +01:00
Tim Diekmann
03b055b0b4 Remove alignment from MemoryBlock 2020-03-26 17:14:12 +01:00
Tim Diekmann
bfbdb5f06f Remove unused import from libcore/alloc 2020-03-26 17:13:57 +01:00
Tim Diekmann
2f215b61b6 Use NonNull instead of Unique in MemoryBlock 2020-03-26 17:12:12 +01:00