rust/library
bors 1efd804983 Auto merge of #81126 - oxalica:retain-early-drop, r=m-ou-se
Optimize Vec::retain

Use `copy_non_overlapping` instead of `swap` to reduce memory writes, like what we've done in #44355 and `String::retain`.
#48065 already tried to do this optimization but it is reverted in #67300 due to bad codegen of `DrainFilter::drop`.

This PR re-implement the drop-then-move approach. I did a [benchmark](https://gist.github.com/oxalica/3360eec9376f22533fcecff02798b698) on small-no-drop, small-need-drop, large-no-drop elements with different predicate functions. It turns out that the new implementation is >20% faster in average for almost all cases. Only 2/24 cases are slower by 3% and 5%. See the link above for more detail.

I think regression in may-panic cases is due to drop-guard preventing some optimization. If it's permitted to leak elements when predicate function of element's `drop` panic, the new implementation should be almost always faster than current one.
I'm not sure if we should leak on panic, since there is indeed an issue (#52267) complains about it before.
2021-02-11 04:40:57 +00:00
..
alloc Auto merge of #81126 - oxalica:retain-early-drop, r=m-ou-se 2021-02-11 04:40:57 +00:00
backtrace@af078ecc0b
core Rollup merge of #81904 - jhpratt:const_int_fn-stabilization, r=jyn514 2021-02-10 12:24:23 +09:00
panic_abort
panic_unwind Revert stabilizing integer::BITS. 2021-02-03 22:23:58 +01:00
proc_macro Bump bootstrap compiler to 1.50 beta 2020-12-30 09:27:19 -05:00
profiler_builtins
rtstartup Bump bootstrap compiler to 1.50 beta 2020-12-30 09:27:19 -05:00
rustc-std-workspace-alloc
rustc-std-workspace-core
rustc-std-workspace-std
std Rollup merge of #79849 - Digital-Chaos:sleep-zero, r=m-ou-se 2021-02-10 12:24:18 +09:00
stdarch@9c732a56f6
term Allow/fix non_fmt_panic in tests. 2021-02-03 23:15:45 +01:00
test Rollup merge of #81356 - ehuss:libtest-filters, r=m-ou-se 2021-02-08 19:28:13 +01:00
unwind Support AArch64 ILP32 in libunwind bindings 2021-01-27 22:47:57 +00:00