1. 31 3月, 2021 25 次提交
  2. 30 3月, 2021 15 次提交
    • G
    • B
      Auto merge of #83170 - joshtriplett:spawn-cleanup, r=kennytm · 7b6fc5a3
      bors 提交于
      Simplify Command::spawn (no semantic change)
      
      This minimizes the size of an unsafe block, and allows outdenting some
      complex code.
      7b6fc5a3
    • B
      Auto merge of #83674 - Dylan-DPC:rollup-bcuc1hl, r=Dylan-DPC · 16156fb2
      bors 提交于
      Rollup of 7 pull requests
      
      Successful merges:
      
       - #83568 (update comment at MaybeUninit::uninit_array)
       - #83571 (Constantify some slice methods)
       - #83579 (Improve pointer arithmetic docs)
       - #83645 (Wrap non-pre code blocks)
       - #83656 (Add a regression test for issue-82865)
       - #83662 (Update books)
       - #83667 (Suggest box/pin/arc ing receiver on method calls)
      
      Failed merges:
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      16156fb2
    • D
      Rollup merge of #83667 - estebank:cool-bears-hot-tip, r=lcnr · 5b467787
      Dylan DPC 提交于
      Suggest box/pin/arc ing receiver on method calls
      
      _Extracted from https://fasterthanli.me/articles/pin-and-suffering_
      5b467787
    • D
      Rollup merge of #83662 - ehuss:update-books, r=ehuss · 36eee62c
      Dylan DPC 提交于
      Update books
      
      ## reference
      
      4 commits in d10a0af8dca25d9d548ca6a369fd66ad06acb3c9..fd97729e2d82f8b08d68a31c9bfdf0c37a7fd542
      2021-03-21 11:14:06 -0700 to 2021-03-28 14:29:19 -0700
      - Editorial cleanup on expressions (part 1) (rust-lang-nursery/reference#967)
      - Update type casts section (rust-lang-nursery/reference#961)
      - Add missing "?" notion (rust-lang-nursery/reference#989)
      - Fix typo (rust-lang-nursery/reference#988)
      
      ## book
      
      8 commits in fc2f690fc16592abbead2360cfc0a42f5df78052..b54090a99ec7c4b46a5203a9c927fdbc311bb1f5
      2021-03-05 14:03:22 -0500 to 2021-03-24 11:21:46 -0500
      - correct the signature of the `deref` method (rust-lang/book#2658)
      - Clarify the immutability of a reference (rust-lang/book#2646)
      - Tweak wording around Windows representation of enter
      - Ch. 02 note - Enter results in CRLF on Windows (rust-lang/book#2648)
      - Added an example of slicing result (rust-lang/book#2649)
      - Fix word wrapping, mention dictionary.txt is also in the ci dir
      - README: note that spellcheck.sh is in ci directory (rust-lang/book#2652)
      - Change someurl.com to example.org (rust-lang/book#2655)
      
      ## rust-by-example
      
      12 commits in eead22c6c030fa4f3a167d1798658c341199e2ae..29d91f591c90dd18fdca6d23f1a9caf9c139d0d7
      2021-03-04 16:26:43 -0300 to 2021-03-23 09:03:39 -0300
      - Unwrap some drinks. (rust-lang/rust-by-example#1431)
      - doc(testcase_linked_list): add a little extra note about pattern (rust-lang/rust-by-example#1408)
      - Update function name in comment (rust-lang/rust-by-example#1413)
      - Fixes minor typo in src/types/cast.md (rust-lang/rust-by-example#1414)
      - Add destructuring example to generics new type (rust-lang/rust-by-example#1416)
      - update struct.md (rust-lang/rust-by-example#1419)
      - fix name from rectangle to Rectangle (rust-lang/rust-by-example#1420)
      - Typo "incures" in code comment (rust-lang/rust-by-example#1422)
      - Changed impl to use Self::Item (rust-lang/rust-by-example#1425)
      - Fix code highlighting in some places (rust-lang/rust-by-example#1427)
      - Update multi_bounds.md (rust-lang/rust-by-example#1428)
      - Reformulated text for redability (rust-lang/rust-by-example#1429)
      
      ## rustc-dev-guide
      
      3 commits in 67ebd4b55dba44edfc351621cef6e5e758169c55..0687daac28939c476df51778f5a1d1aff1a3fddf
      2021-03-11 13:36:25 -0800 to 2021-03-28 13:33:56 -0400
      - Add notes about nightly rustc version for the rustc-driver examples
      - Update rustc-driver-*.rs examples (rust-lang/rustc-dev-guide#1095)
      - Fix rust compiler meeting info (rust-lang/rustc-dev-guide#1087)
      
      ## embedded-book
      
      1 commits in f61685755fad7d3b88b4645adfbf461d500563a2..d3f2ace94d51610cf3e3c265705bb8416d37f8e4
      2021-03-08 01:06:44 +0000 to 2021-03-17 07:53:09 +0000
      - Add binary attribute to .jpeg files, closes rust-embedded/book#287  (rust-embedded/book#288)
      36eee62c
    • D
      Rollup merge of #83656 - JohnTitor:resolve-test, r=petrochenkov · 55171e42
      Dylan DPC 提交于
      Add a regression test for issue-82865
      
      Closes #82865
      r? `@petrochenkov`
      55171e42
    • D
      Rollup merge of #83645 - pickfire:patch-3, r=GuillaumeGomez · 9f9577c1
      Dylan DPC 提交于
      Wrap non-pre code blocks
      
      Fix #83550 regression
      
      ```
      $ cargo new --lib whitespace && cd whitespace && echo '//! `"   foo   "`' > src/lib.rs && cargo doc --open
      ```
      
      Before
      
      ![](https://user-images.githubusercontent.com/89623/112713498-c0dfc200-8ed5-11eb-8c57-efdf26372e74.png)
      
      After
      
      ![](https://user-images.githubusercontent.com/89623/112713538-f08eca00-8ed5-11eb-8a98-675179f60ae2.png)
      
      r? ``@GuillaumeGomez``
      cc ``@mgeisler``
      9f9577c1
    • D
      Rollup merge of #83579 - RalfJung:ptr-arithmetic, r=dtolnay · 5b67543c
      Dylan DPC 提交于
      Improve pointer arithmetic docs
      
      * Add slightly more detailed definition of "allocated object" to the module docs, and link it from everywhere.
      * Clarify the "remains attached" wording a bit (at least I hope this is clearer).
      * Remove the sentence about using integer arithmetic; this seems to confuse people even if it is technically correct.
      
      As usual, the edit needs to be done in a dozen places to remain consistent, I hope I got them all.
      5b67543c
    • D
      Rollup merge of #83571 - a1phyr:feature_const_slice_first_last, r=dtolnay · ad2a80e4
      Dylan DPC 提交于
      Constantify some slice methods
      
      Tracking issue: #83570
      
      This PR constantifies the following functions under feature `const_slice_first_last`:
      - `slice::first`
      - `slice::split_first`
      - `slice::last`
      - `slice::split_last`
      
      Blocking on `#![feature(const_mut_refs)]`:
      - `slice::first_mut`
      - `slice::split_first_mut`
      - `slice::last_mut`
      - `slice::split_last_mut`
      ad2a80e4
    • D
      Rollup merge of #83568 - RalfJung:uninit_array, r=dtolnay · 9ab5f7db
      Dylan DPC 提交于
      update comment at MaybeUninit::uninit_array
      
      https://github.com/rust-lang/rust/issues/49147 is closed; this now instead needs inline const expressions (#76001).
      9ab5f7db
    • B
      Auto merge of #83458 - saethlin:improve-vec-benches, r=dtolnay · 689e8470
      bors 提交于
      Clean up Vec's benchmarks
      
      The Vec benchmarks need a lot of love. I sort of noticed this in https://github.com/rust-lang/rust/pull/83357 but the overall situation is much less awesome than I thought at the time. The first commit just removes a lot of asserts and does a touch of other cleanup.
      
      A number of these benchmarks are poorly-named. For example, `bench_map_fast` is not in fact fast, `bench_rev_1` and `bench_rev_2` are vague, `bench_in_place_zip_iter_mut` doesn't call `zip`, `bench_in_place*` don't do anything in-place... Should I fix these, or is there tooling that depend on the names not changing?
      
      I've also noticed that `bench_rev_1` and `bench_rev_2` are remarkably fragile. It looks like poking other code in `Vec` can cause the codegen of this benchmark to switch to a version that has almost exactly half its current throughput and I have absolutely no idea why.
      
      Here's the fast version:
      ```asm
        0.69 │110:   movdqu -0x20(%rbx,%rdx,4),%xmm0
        1.76 │       movdqu -0x10(%rbx,%rdx,4),%xmm1
        0.71 │       pshufd $0x1b,%xmm1,%xmm1
        0.60 │       pshufd $0x1b,%xmm0,%xmm0
        3.68 │       movdqu %xmm1,-0x30(%rcx)
       14.36 │       movdqu %xmm0,-0x20(%rcx)
       13.88 │       movdqu -0x40(%rbx,%rdx,4),%xmm0
        6.64 │       movdqu -0x30(%rbx,%rdx,4),%xmm1
        0.76 │       pshufd $0x1b,%xmm1,%xmm1
        0.77 │       pshufd $0x1b,%xmm0,%xmm0
        1.87 │       movdqu %xmm1,-0x10(%rcx)
       13.01 │       movdqu %xmm0,(%rcx)
       38.81 │       add    $0x40,%rcx
        0.92 │       add    $0xfffffffffffffff0,%rdx
        1.22 │     ↑ jne    110
      ```
      And the slow one:
      ```asm
        0.42 │9a880:   movdqa     %xmm2,%xmm1
        4.03 │9a884:   movq       -0x8(%rbx,%rsi,4),%xmm4
        8.49 │9a88a:   pshufd     $0xe1,%xmm4,%xmm4
        2.58 │9a88f:   movq       -0x10(%rbx,%rsi,4),%xmm5
        7.02 │9a895:   pshufd     $0xe1,%xmm5,%xmm5
        4.79 │9a89a:   punpcklqdq %xmm5,%xmm4
        5.77 │9a89e:   movdqu     %xmm4,-0x18(%rdx)
       15.74 │9a8a3:   movq       -0x18(%rbx,%rsi,4),%xmm4
        3.91 │9a8a9:   pshufd     $0xe1,%xmm4,%xmm4
        5.04 │9a8ae:   movq       -0x20(%rbx,%rsi,4),%xmm5
        5.29 │9a8b4:   pshufd     $0xe1,%xmm5,%xmm5
        4.60 │9a8b9:   punpcklqdq %xmm5,%xmm4
        9.81 │9a8bd:   movdqu     %xmm4,-0x8(%rdx)
       11.05 │9a8c2:   paddq      %xmm3,%xmm0
        0.86 │9a8c6:   paddq      %xmm3,%xmm2
        5.89 │9a8ca:   add        $0x20,%rdx
        0.12 │9a8ce:   add        $0xfffffffffffffff8,%rsi
        1.16 │9a8d2:   add        $0x2,%rdi
        2.96 │9a8d6: → jne        9a880 <<alloc::vec::Vec<T,A> as core::iter::traits::collect::Extend<&T>>::extend+0xd0>
      ```
      689e8470
    • J
      Add a regression test for issue-75801 · 4f2c25a9
      JohnTitor 提交于
      4f2c25a9
    • B
      Auto merge of #83649 - bjorn3:dedup_providers, r=petrochenkov · a0e229ab
      bors 提交于
      Don't duplicate the extern providers once for each crate
      
      This should give a small perf improvement for small crates by avoiding a memcpy of a pretty big struct for each loaded crate. In addition would be useful for replacing the sequential `CrateNum` everywhere with the hash based `StableCrateId` introduced in #81635, which would allow avoiding remapping of `CrateNum`'s when loading crate metadata. While this PR is not strictly needed for that, it is necessary to prevent a performance loss due to it.
      
      I think this duplication was done in https://github.com/rust-lang/rust/pull/40008 (which introduced the query system) to make it possible to compile multiple crates in a single session in the future. I think this is unlikely to be implemented any time soon. In addition this PR can easily be reverted if necessary to implement this.
      a0e229ab
    • A
      Apply review feedback · cad9b6b6
      Amanieu d'Antras 提交于
      cad9b6b6
    • B
      Auto merge of #83357 - saethlin:vec-reserve-inlining, r=dtolnay · 32d32765
      bors 提交于
      Reduce the impact of Vec::reserve calls that do not cause any allocation
      
      I think a lot of callers expect `Vec::reserve` to be nearly free when no resizing is required, but unfortunately that isn't the case. LLVM makes remarkably poor inlining choices (along the path from `Vec::reserve` to `RawVec::grow_amortized`), so depending on the surrounding context you either get a huge blob of `RawVec`'s resizing logic inlined into some seemingly-unrelated function, or not enough inlining happens and/or the actual check in `needs_to_grow` ends up behind a function call. My goal is to make the codegen for `Vec::reserve` match the mental that callers seem to have: It's reliably just a `sub cmp ja` if there is already sufficient capacity.
      
      This patch has the following impact on the serde_json benchmarks: https://github.com/serde-rs/json-benchmark/tree/ca3efde8a5b75ff59271539b67452911860248c7 run with `cargo +stage1 run --release -- -n 1024`
      
      Before:
      ```
                                      DOM                  STRUCT
      ======= serde_json ======= parse|stringify ===== parse|stringify ====
      data/canada.json         340 MB/s   490 MB/s   630 MB/s   370 MB/s
      data/citm_catalog.json   460 MB/s   540 MB/s  1010 MB/s   550 MB/s
      data/twitter.json        330 MB/s   840 MB/s   640 MB/s   630 MB/s
      
      ======= json-rust ======== parse|stringify ===== parse|stringify ====
      data/canada.json         580 MB/s   990 MB/s
      data/citm_catalog.json   720 MB/s   660 MB/s
      data/twitter.json        570 MB/s   960 MB/s
      ```
      
      After:
      ```
                                      DOM                  STRUCT
      ======= serde_json ======= parse|stringify ===== parse|stringify ====
      data/canada.json         330 MB/s   510 MB/s   610 MB/s   380 MB/s
      data/citm_catalog.json   450 MB/s   640 MB/s   970 MB/s   830 MB/s
      data/twitter.json        330 MB/s   880 MB/s   670 MB/s   960 MB/s
      
      ======= json-rust ======== parse|stringify ===== parse|stringify ====
      data/canada.json         560 MB/s  1130 MB/s
      data/citm_catalog.json   710 MB/s   880 MB/s
      data/twitter.json        530 MB/s  1230 MB/s
      
      ```
      
      That's approximately a one-third increase in throughput on two of the benchmarks, and no effect on one (The benchmark suite has sufficient jitter that I could pick a run where there are no regressions, so I'm not convinced they're meaningful here).
      
      This also produces perf increases on the order of 3-5% in a few other microbenchmarks that I'm tracking. It might be useful to see if this has a cascading effect on inlining choices in some large codebases.
      
      Compiling this simple program demonstrates the change in codegen that causes the perf impact:
      ```rust
      fn main() {
          reserve(&mut Vec::new());
      }
      
      #[inline(never)]
      fn reserve(v: &mut Vec<u8>) {
          v.reserve(1234);
      }
      ```
      
      Before:
      ```rust
      00000000000069b0 <scratch::reserve>:
          69b0:       53                      push   %rbx
          69b1:       48 83 ec 30             sub    $0x30,%rsp
          69b5:       48 8b 47 08             mov    0x8(%rdi),%rax
          69b9:       48 8b 4f 10             mov    0x10(%rdi),%rcx
          69bd:       48 89 c2                mov    %rax,%rdx
          69c0:       48 29 ca                sub    %rcx,%rdx
          69c3:       48 81 fa d1 04 00 00    cmp    $0x4d1,%rdx
          69ca:       77 73                   ja     6a3f <scratch::reserve+0x8f>
          69cc:       48 81 c1 d2 04 00 00    add    $0x4d2,%rcx
          69d3:       72 75                   jb     6a4a <scratch::reserve+0x9a>
          69d5:       48 89 fb                mov    %rdi,%rbx
          69d8:       48 8d 14 00             lea    (%rax,%rax,1),%rdx
          69dc:       48 39 ca                cmp    %rcx,%rdx
          69df:       48 0f 47 ca             cmova  %rdx,%rcx
          69e3:       48 83 f9 08             cmp    $0x8,%rcx
          69e7:       be 08 00 00 00          mov    $0x8,%esi
          69ec:       48 0f 47 f1             cmova  %rcx,%rsi
          69f0:       48 85 c0                test   %rax,%rax
          69f3:       74 17                   je     6a0c <scratch::reserve+0x5c>
          69f5:       48 8b 0b                mov    (%rbx),%rcx
          69f8:       48 89 0c 24             mov    %rcx,(%rsp)
          69fc:       48 89 44 24 08          mov    %rax,0x8(%rsp)
          6a01:       48 c7 44 24 10 01 00    movq   $0x1,0x10(%rsp)
          6a08:       00 00
          6a0a:       eb 08                   jmp    6a14 <scratch::reserve+0x64>
          6a0c:       48 c7 04 24 00 00 00    movq   $0x0,(%rsp)
          6a13:       00
          6a14:       48 8d 7c 24 18          lea    0x18(%rsp),%rdi
          6a19:       48 89 e1                mov    %rsp,%rcx
          6a1c:       ba 01 00 00 00          mov    $0x1,%edx
          6a21:       e8 9a fe ff ff          call   68c0 <alloc::raw_vec::finish_grow>
          6a26:       48 8b 7c 24 20          mov    0x20(%rsp),%rdi
          6a2b:       48 8b 74 24 28          mov    0x28(%rsp),%rsi
          6a30:       48 83 7c 24 18 01       cmpq   $0x1,0x18(%rsp)
          6a36:       74 0d                   je     6a45 <scratch::reserve+0x95>
          6a38:       48 89 3b                mov    %rdi,(%rbx)
          6a3b:       48 89 73 08             mov    %rsi,0x8(%rbx)
          6a3f:       48 83 c4 30             add    $0x30,%rsp
          6a43:       5b                      pop    %rbx
          6a44:       c3                      ret
          6a45:       48 85 f6                test   %rsi,%rsi
          6a48:       75 08                   jne    6a52 <scratch::reserve+0xa2>
          6a4a:       ff 15 38 c4 03 00       call   *0x3c438(%rip)        # 42e88 <_GLOBAL_OFFSET_TABLE_+0x490>
          6a50:       0f 0b                   ud2
          6a52:       ff 15 f0 c4 03 00       call   *0x3c4f0(%rip)        # 42f48 <_GLOBAL_OFFSET_TABLE_+0x550>
          6a58:       0f 0b                   ud2
          6a5a:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
      ```
      
      After:
      ```asm
      0000000000006910 <scratch::reserve>:
          6910:       48 8b 47 08             mov    0x8(%rdi),%rax
          6914:       48 8b 77 10             mov    0x10(%rdi),%rsi
          6918:       48 29 f0                sub    %rsi,%rax
          691b:       48 3d d1 04 00 00       cmp    $0x4d1,%rax
          6921:       77 05                   ja     6928 <scratch::reserve+0x18>
          6923:       e9 e8 fe ff ff          jmp    6810 <alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle>
          6928:       c3                      ret
          6929:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
      ```
      32d32765