The Wayback Machine - https://web.archive.org/web/20201114235138/https://github.com/rust-lang/rust/commits/master
Skip to content
Permalink
master

Commits on Nov 14, 2020

  1. Auto merge of #78809 - vn-ki:fix-issue-76064, r=oli-obk

    add error_occured field to ConstQualifs,
    
    fix #76064
    
    I wasn't sure what `in_return_place` actually did and not sure why it returns `ConstQualifs` while it's sibling functions return `bool`. So I tried to make as minimal changes to the structure as possible. Please point out whether I have to refactor it or not.
    
    r? `@oli-obk`
    cc `@RalfJung`
    bors committed Nov 14, 2020
  2. Auto merge of #75272 - the8472:spec-copy, r=KodrAus

    specialize io::copy to use copy_file_range, splice or sendfile
    
    Fixes #74426.
    Also covers #60689 but only as an optimization instead of an official API.
    
    The specialization only covers std-owned structs so it should avoid the problems with #71091
    
    Currently linux-only but it should be generalizable to other unix systems that have sendfile/sosplice and similar.
    
    There is a bit of optimization potential around the syscall count. Right now it may end up doing more syscalls than the naive copy loop when doing short (<8KiB) copies between file descriptors.
    
    The test case executes the following:
    
    ```
    [pid 103776] statx(3, "", AT_STATX_SYNC_AS_STAT|AT_EMPTY_PATH, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0644, stx_size=17, ...}) = 0
    [pid 103776] write(4, "wxyz", 4)        = 4
    [pid 103776] write(4, "iklmn", 5)       = 5
    [pid 103776] copy_file_range(3, NULL, 4, NULL, 5, 0) = 5
    
    ```
    
    0-1 `stat` calls to identify the source file type. 0 if the type can be inferred from the struct from which the FD was extracted
    𝖬 `write` to drain the `BufReader`/`BufWriter` wrappers. only happen when buffers are present. 𝖬 ≾ number of wrappers present. If there is a write buffer it may absorb the read buffer contents first so only result in a single write. Vectored writes would also be an option but that would require more invasive changes to `BufWriter`.
    𝖭 `copy_file_range`/`splice`/`sendfile` until file size, EOF or the byte limit from `Take` is reached. This should generally be *much* more efficient than the read-write loop and also have other benefits such as DMA offload or extent sharing.
    
    ## Benchmarks
    
    ```
    
    OLD
    
    test io::tests::bench_file_to_file_copy         ... bench:      21,002 ns/iter (+/- 750) = 6240 MB/s    [ext4]
    test io::tests::bench_file_to_file_copy         ... bench:      35,704 ns/iter (+/- 1,108) = 3671 MB/s  [btrfs]
    test io::tests::bench_file_to_socket_copy       ... bench:      57,002 ns/iter (+/- 4,205) = 2299 MB/s
    test io::tests::bench_socket_pipe_socket_copy   ... bench:     142,640 ns/iter (+/- 77,851) = 918 MB/s
    
    NEW
    
    test io::tests::bench_file_to_file_copy         ... bench:      14,745 ns/iter (+/- 519) = 8889 MB/s    [ext4]
    test io::tests::bench_file_to_file_copy         ... bench:       6,128 ns/iter (+/- 227) = 21389 MB/s   [btrfs]
    test io::tests::bench_file_to_socket_copy       ... bench:      13,767 ns/iter (+/- 3,767) = 9520 MB/s
    test io::tests::bench_socket_pipe_socket_copy   ... bench:      26,471 ns/iter (+/- 6,412) = 4951 MB/s
    ```
    bors committed Nov 14, 2020
  3. Auto merge of #78959 - petrochenkov:likeuefi, r=nagisa

    rustc_target: Mark UEFI targets as `is_like_windows`/`is_like_msvc`
    
    And document what `is_like_windows` and `is_like_msvc` actually mean in more detail.
    
    Addresses FIXMEs left from #71030.
    r? `@nagisa`
    bors committed Nov 14, 2020
  4. Auto merge of #78951 - petrochenkov:unknown, r=ehuss

    rustc_target: Change os and vendor values to "none" and "unknown" for some targets
    
    Closes #77730
    r? `@ehuss`
    bors committed Nov 14, 2020
  5. Auto merge of #78736 - petrochenkov:lazyenum, r=Aaron1011

    rustc_parse: Remove optimization for 0-length streams in `collect_tokens`
    
    The optimization conflates empty token streams with unknown token stream, which is at least suspicious, and doesn't affect performance because 0-length token streams are very rare.
    
    r? `@Aaron1011`
    bors committed Nov 14, 2020

Commits on Nov 13, 2020

  1. Auto merge of #78683 - Nemo157:issue-78673, r=lcnr

    Check predicates from blanket trait impls while testing if they apply
    
    fixes #78673
    bors committed Nov 13, 2020
  2. Always handle EOVERFLOW by falling back to the generic copy loop

    Previously EOVERFLOW handling was only applied for io::copy specialization
    but not for fs::copy sharing the same code.
    
    Additionally we lower the chunk size to 1GB since we have a user report
    that older kernels may return EINVAL when passing 0x8000_0000
    but smaller values succeed.
    the8472 committed Nov 13, 2020
  3. do direct splice syscall and probe availability to get android builds…

    … to work
    
    Android builds use feature level 14, the libc wrapper for splice is gated
    on feature level 21+ so we have to invoke the syscall directly.
    Additionally the emulator doesn't seem to support it so we also have to
    add ENOSYS checks.
    the8472 committed Nov 13, 2020
  4. Auto merge of #78888 - richkadel:llvm-coverage-tests, r=tmandry

    Fix and re-enable two coverage tests on MacOS
    
    Note, in the coverage-reports test, the comment about MacOS was wrong.
    The setting is based on config.toml llvm `optimize` setting. There
    doesn't appear to be any environment variable I can check, and I
    don't think we should add one. Testing the binary itself is a more
    reliable way to check anyway.
    
    For the coverage-spanview test, I removed the dependency on sed
    altogether, which is much less ugly than trying to work around the
    MacOS sed differences.
    
    I tested these changes on Linux, Windows, and Mac.
    
    r? `@tmandry`
    FYI `@wesleywiser`
    bors committed Nov 13, 2020
  5. add benchmarks

    the8472 committed Nov 13, 2020
  6. reduce syscalls by inferring FD types based on source struct instead …

    …of calling stat()
    
    also adds handling for edge-cases involving large sparse files where sendfile could fail with EOVERFLOW
    the8472 committed Nov 13, 2020
  7. add forwarding specializations for &mut variants

    `impl Write for &mut T where T: Write`, thus the same should
    apply to the specialization traits
    the8472 committed Nov 13, 2020
  8. prioritize sendfile over splice since it results in fewer context swi…

    …tches when sending to pipes
    
    splice returns to userspace when the pipe is full, sendfile
    just blocks until it's done, this can achieve much higher throughput
    the8472 committed Nov 13, 2020
  9. specialize io::copy to use copy_file_range, splice or sendfile

    Currently it only applies to linux systems. It can be extended to make use
    of similar syscalls on other unix systems.
    the8472 committed Nov 13, 2020
  10. Auto merge of #79011 - ehuss:update-cargo, r=ehuss

    Update cargo
    
    Fixing an important publish bug.
    
    2 commits in 8662ab427a8d6ad8047811cc4d78dbd20dd07699..2af662e22177a839763ac8fb70d245a680b15214
    2020-11-12 03:47:53 +0000 to 2020-11-12 19:04:56 +0000
    - Fix publishing with optional dependencies. (rust-lang/cargo#8853)
    - Minor typo in features.md (rust-lang/cargo#8851)
    bors committed Nov 13, 2020
  11. Auto merge of #79017 - GuillaumeGomez:rollup-5orhudd, r=GuillaumeGomez

    Rollup of 6 pull requests
    
    Successful merges:
    
     - #77151 (Add regression test for issue #76042)
     - #77996 (Doc change: Remove mention of `fnv` in HashMap)
     - #78463 (Add type to `ConstKind::Placeholder`)
     - #78984 (Rustdoc check option)
     - #78985 (add dropck test for const params)
     - #78996 (add explicit test for const param promotion)
    
    Failed merges:
    
    r? `@ghost`
    `@rustbot` modify labels: rollup
    bors committed Nov 13, 2020
  12. Rollup merge of #78996 - lcnr:cg-promotion, r=RalfJung

    add explicit test for const param promotion
    
    r? `@RalfJung`
    GuillaumeGomez committed Nov 13, 2020
  13. Rollup merge of #78985 - lcnr:cg-drop-test, r=nikomatsakis

    add dropck test for const params
    
    r? `@nikomatsakis` or `@varkor`
    GuillaumeGomez committed Nov 13, 2020
  14. Rollup merge of #78984 - GuillaumeGomez:rustdoc-check-option, r=jyn514

    Rustdoc check option
    
    The ultimate goal behind this option would be to have `rustdoc --check` being run when you use `cargo check` as a second step.
    
    r? `@jyn514`
    GuillaumeGomez committed Nov 13, 2020
  15. Rollup merge of #78463 - varkor:placeholder-const, r=nikomatsakis

    Add type to `ConstKind::Placeholder`
    
    I simply threaded `<'tcx>` through everything that required it. I'm not sure whether this is the correct thing to do, but it seems to work.
    
    r? `@nikomatsakis`
    GuillaumeGomez committed Nov 13, 2020
  16. Rollup merge of #77996 - tkaitchuck:master, r=m-ou-se

    Doc change: Remove mention of `fnv` in HashMap
    
    Disclaimer: I am the author of [aHash](https://github.com/tkaitchuck/aHash).
    
    This changes the Rustdoc in `HashMap` from mentioning the `fnv` crate to mentioning the `aHash` crate, as an alternative `Hasher` implementation.
    
    ### Why
    
    Fnv [has poor hash quality](https://github.com/rurban/smhasher), is [slow for larger keys](https://github.com/tkaitchuck/aHash/blob/master/compare/readme.md#speed), and does not provide dos resistance, because it is unkeyed (this can also cause [other problems](https://accidentallyquadratic.tumblr.com/post/153545455987/rust-hash-iteration-reinsertion)).
    
    Fnv has acceptable performance for integers and has very poor performance with keys >32 bytes. This is the reason it was removed from the standard library in #37229 .
    
    Because regardless of which dimension you value, there are better alternatives, it does not make sense for anyone to consider using `fnv`.
    
    The text mentioning `fnv` in the standard library continues to create confusion: rust-lang/hashbrown#153  rust-lang/hashbrown#9 . There are also a number of [crates using it](https://crates.io/crates/fnv/reverse_dependencies) a great many of which are hashing strings (Which is when Fnv is the [worst](https://github.com/cbreeden/fxhash#benchmarks), [possible](https://github.com/tkaitchuck/aHash#speed), [choice](http://cglab.ca/~abeinges/blah/hash-rs/).)
    
    I think aHash makes the most sense to mention as an alternative because it is the most credible option (in my obviously biased opinion). It offers [good performance on numbers and strings](https://github.com/tkaitchuck/aHash/blob/master/compare/readme.md#speed), is [of high quality](https://github.com/tkaitchuck/aHash#hash-quality), and [provides dos resistance](https://github.com/tkaitchuck/aHash/wiki/How-aHash-is-resists-DOS-attacks). It is popular (see [stats](https://crates.io/crates/ahash)) and is the default hasher for [hashbrown](https://crates.io/crates/hashbrown) and [dashmap](https://crates.io/crates/dashmap) which are the most popular alternative hashmaps. Finally it does not have any of the [`gotcha` cases](https://github.com/tkaitchuck/aHash#fxhash) that `FxHash` suffers from. (Which is the other popular hashing option when DOS attacks are not a concern)
    
    Signed-off-by: Tom Kaitchuck <tom.kaitchuck@emc.com>
    GuillaumeGomez committed Nov 13, 2020
  17. Rollup merge of #77151 - rust-lang:LeSeulArtichaut-patch-1, r=pnkfelix

    Add regression test for issue #76042
    
    Originally posted in #76042 (comment).
    r? `@pnkfelix`
    GuillaumeGomez committed Nov 13, 2020
  18. Auto merge of #77990 - bugadani:copies, r=lcnr

    Eliminate some temporary vectors
    
    This PR changes `get_item_attrs` and `get_item_variances` to return iterator impls instead of vectors. On top of that, this PR replaces some seemingly unnecessary vectors with iterators or SmallVec, and also reserves space where we know (the minimum) number of elements that will be inserted. This change hopes to remove a few heap allocations and unnecessary copies.
    bors committed Nov 13, 2020
  19. update clippy test ouput

    vn-ki committed Nov 13, 2020
  20. Push to result vector instead of allocating

    Co-authored-by: lcnr <bastian_kauschke@hotmail.de>
    bugadani and lcnr committed Nov 13, 2020
  21. Reuse vector

    bugadani committed Nov 13, 2020
  22. Reserve space in advance

    bugadani committed Nov 13, 2020
Older
You can’t perform that action at this time.