Utilize PGO for windows x64 rustc dist builds by lqd · Pull Request #96978 · rust-lang/rust (original) (raw)
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Conversation169 Commits4 Checks0 Files changed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
[ Show hidden characters]({{ revealButtonHref }})
Member
lqd commented
• Loading
cristaloleg, janroudaut, jk-gan, duyet, bernaferrari, lumenian, mominul, Paulo-21, Kobzol, CYBAI, and briansmith reacted with heart emoji Kobzol, michaelwoerister, wesleywiser, Noratrieb, rgwood, ptondereau, FilipAndersson245, PersonBelowRocks, Nerixyz, zohnannor, and 29 more reacted with rocket emoji
⌛ Trying commit de0a53ad00db52cc21c031b27202fe312896c25e with merge 36167224f1306544c5a9c050ef151c0e6d81b745...
bors added the S-waiting-on-author
Status: This is awaiting some action (such as code changes or more information) from the author.
label
This comment has been minimized.
⌛ Trying commit e006ba81940512f2f255b32594e34197c022d8ea with merge 57b5bac113c6e1100592c1bf7d5a7fc61d74e332...
This comment has been minimized.
⌛ Trying commit 588de49ce861165222eb39ce14942ea158bef945 with merge 031d87645f5dacc484cc4590a1aa9abc7409a80e...
This comment has been minimized.
⌛ Trying commit 721a71042f995816fad00e609f727c5f710895e1 with merge 083263b570c1aa26f2f148f0e329beb40695f37e...
This comment has been minimized.
⌛ Trying commit 532f6e1803caa381874b41893a70142b662ce399 with merge e695e58c53b8f4126b9e0d7cf3f060a9e6fd8fac...
This comment has been minimized.
⌛ Trying commit 95a6d33169202e3185e9155474c7afa7a371d1f7 with merge 2e3c4fb4d1c201ad85cf7cad3e5ff0ab57635b53...
The version 14.0.2 we currently use is busted on windows at the very least.
When building LLVM/LLD as part of a build that asks LLVM to generate profiles, e.g. when doing PGO, cmake or clang-cl don't automatically link clang's profiler runtime in, causing undefined reference errors at link-time.
We do that manually, by adding clang's resource library folder to the library search path:
- for LLVM itself, by extending the linker args that
rustc_llvm
's build script uses, to avoid the linker errors when linkingrustc_driver
. - for LLD, by extending cmake's linker flags during the LLD build step.
This extracts the linux-isms into variables, so that the script can be extended to do PGO on windows. These variables will be overriden in a few spots, in windows-specific blocks.
This adds windows-specific behavior into the PGO script, and enables it on CI.
I've added the comment about disk space and reworked the commit history as requested, and will wait for PR CI to be green.
let's see how it goes :)
@bors r=Mark-Simulacrum rollup=never
📌 Commit 9027f82 has been approved by Mark-Simulacrum
It is now in the queue for this repository.
bors added S-waiting-on-bors
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
and removed S-waiting-on-author
Status: This is awaiting some action (such as code changes or more information) from the author.
labels
Great work @lqd! I think that it would be nice to let people know about this. Maybe a Rust/Rust inside blog post or a reddit post? I can draft up the latter.
Edit: created a Reddit post.
This was referenced
Jul 12, 2022
wesleywiser added the relnotes
Marks issues that should be documented in the release notes of the next release.
label
Finished benchmarking commit (8a33254): comparison url.
Instruction count
- Primary benchmarks: no relevant changes found
- Secondary benchmarks: 😿 relevant regressions found
mean1 | max | count2 | |
---|---|---|---|
Regressions 😿 (primary) | N/A | N/A | 0 |
Regressions 😿 (secondary) | 1.5% | 1.6% | 6 |
Improvements 🎉 (primary) | N/A | N/A | 0 |
Improvements 🎉 (secondary) | N/A | N/A | 0 |
All 😿🎉 (primary) | N/A | N/A | 0 |
Max RSS (memory usage)
Results
- Primary benchmarks: no relevant changes found
- Secondary benchmarks: 😿 relevant regression found
mean1 | max | count2 | |
---|---|---|---|
Regressions 😿 (primary) | N/A | N/A | 0 |
Regressions 😿 (secondary) | 3.2% | 3.2% | 1 |
Improvements 🎉 (primary) | N/A | N/A | 0 |
Improvements 🎉 (secondary) | N/A | N/A | 0 |
All 😿🎉 (primary) | N/A | N/A | 0 |
Cycles
Results
- Primary benchmarks: mixed results
- Secondary benchmarks: 🎉 relevant improvements found
mean1 | max | count2 | |
---|---|---|---|
Regressions 😿 (primary) | 2.6% | 2.8% | 2 |
Regressions 😿 (secondary) | N/A | N/A | 0 |
Improvements 🎉 (primary) | -3.4% | -3.4% | 1 |
Improvements 🎉 (secondary) | -5.3% | -8.3% | 2 |
All 😿🎉 (primary) | 0.6% | -3.4% | 3 |
If you disagree with this performance assessment, please file an issue in rust-lang/rustc-perf.
@rustbot label: -perf-regression
Footnotes
lqd deleted the win_pgo2 branch
I think ctfe-stress-5 has been noisy recently (possibly #96267 but this time this benchmark feels jumpy at +/- 1.6%) and is probably unrelated.
I’ll re-check the CI artifacts with cachegrind to make sure it’s indeed similar to #97841 (comment) and try to find the inverse perf win in another PR, much like happened in this other PR’s try build for example.
@wesleywiser I don't think we've announced linux PGO on the Inside Rust blog when it landed (we did for mw's initial explorations), but I'm happy to draft something if we want one. Relnotes may be the expected, or better, venue ?
@Kobzol if you want to do a reddit post, that would be sweet. But if we want an Inside Rust post, I'll ping you on zulip and we can collaborate on that.
I think it would be totally appropriate to write an Inside Rust post on this work if you're up for it 🙂
I'd be happy to review and r+ it!
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request
Pkgsrc changes:
- Add patch to fix vendor/kqueue issue (on 32-bit hosts)
- Adjust other patches & line numbers
- Version bumps & checksum changes.
Upstream changes:
Version 1.64.0 (2022-09-22)
Language
Unions with mutable references or tuples of allowed types are now allowed
It is now considered valid to deallocate memory pointed to by a shared reference
&T
if every byte inT
is inside anUnsafeCell
Unused tuple struct fields are now warned against in an allow-by-default lint, [
unused_tuple_struct_fields
] (rust-lang/rust#95977), similar to the existing warning for unused struct fields. This lint will become warn-by-default in the future.
Compiler
- [Add Nintendo Switch as tier 3 target]
(rust-lang/rust#88991)
- Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
- [Only compile
#[used]
as llvm.compiler.used for ELF targets] (rust-lang/rust#93718) - [Add the
--diagnostic-width
compiler flag to define the terminal width.] (rust-lang/rust#95635) - [Add support for link-flavor
rust-lld
for iOS, tvOS and watchOS] (rust-lang/rust#98771)
Libraries
- [Remove restrictions on compare-exchange memory ordering.] (rust-lang/rust#98383)
- You can now
write!
orwriteln!
into anOsString
: Implementfmt::Write
forOsString
- [Make RwLockReadGuard covariant] (rust-lang/rust#96820)
- [Implement
FusedIterator
forstd:🥅:[Into]Incoming
] (rust-lang/rust#97300) - [
impl<T: AsRawFd> AsRawFd for {Arc,Box}<T>
] (rust-lang/rust#97437) - [
ptr::copy
andptr::swap
are doing untyped copies] (rust-lang/rust#97712) - [Add cgroupv1 support to
available_parallelism
] (rust-lang/rust#97925) - [Mitigate many incorrect uses of
mem::uninitialized
] (rust-lang/rust#99182)
Stabilized APIs
- [
future::IntoFuture
] (https://doc.rust-lang.org/stable/std/future/trait.IntoFuture.html) - [
future::poll_fn
] (https://doc.rust-lang.org/stable/std/future/fn.poll_fn.html) - [
task::ready!
] (https://doc.rust-lang.org/stable/std/task/macro.ready.html) - [
num::NonZero*::checked_mul
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_mul) - [
num::NonZero*::checked_pow
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_pow) - [
num::NonZero*::saturating_mul
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_mul) - [
num::NonZero*::saturating_pow
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_pow) - [
num::NonZeroI*::abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.abs) - [
num::NonZeroI*::checked_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.checked_abs) - [
num::NonZeroI*::overflowing_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.overflowing_abs) - [
num::NonZeroI*::saturating_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.saturating_abs) - [
num::NonZeroI*::unsigned_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.unsigned_abs) - [
num::NonZeroI*::wrapping_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.wrapping_abs) - [
num::NonZeroU*::checked_add
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_add) - [
num::NonZeroU*::checked_next_power_of_two
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_next_power_of_two) - [
num::NonZeroU*::saturating_add
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_add) - [
os::unix::process::CommandExt::process_group
] (https://doc.rust-lang.org/stable/std/os/unix/process/trait.CommandExt.html#tymethod.process_group) - [
os::windows::fs::FileTypeExt::is_symlink_dir
] (https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_dir) - [
os::windows::fs::FileTypeExt::is_symlink_file
] (https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_file)
These types were previously stable in std::ffi
, but are now also
available in core
and alloc
:
- [
core::ffi::CStr
] (https://doc.rust-lang.org/stable/core/ffi/struct.CStr.html) - [
core::ffi::FromBytesWithNulError
] (https://doc.rust-lang.org/stable/core/ffi/struct.FromBytesWithNulError.html) - [
alloc::ffi::CString
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.CString.html) - [
alloc::ffi::FromVecWithNulError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.FromVecWithNulError.html) - [
alloc::ffi::IntoStringError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.IntoStringError.html) - [
alloc::ffi::NulError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.NulError.html)
These types were previously stable in std::os::raw
, but are now also available in core::ffi
and std::ffi
:
- [
ffi::c_char
] (https://doc.rust-lang.org/stable/std/ffi/type.c_char.html) - [
ffi::c_double
] (https://doc.rust-lang.org/stable/std/ffi/type.c_double.html) - [
ffi::c_float
] (https://doc.rust-lang.org/stable/std/ffi/type.c_float.html) - [
ffi::c_int
] (https://doc.rust-lang.org/stable/std/ffi/type.c_int.html) - [
ffi::c_long
] (https://doc.rust-lang.org/stable/std/ffi/type.c_long.html) - [
ffi::c_longlong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_longlong.html) - [
ffi::c_schar
] (https://doc.rust-lang.org/stable/std/ffi/type.c_schar.html) - [
ffi::c_short
] (https://doc.rust-lang.org/stable/std/ffi/type.c_short.html) - [
ffi::c_uchar
] (https://doc.rust-lang.org/stable/std/ffi/type.c_uchar.html) - [
ffi::c_uint
] (https://doc.rust-lang.org/stable/std/ffi/type.c_uint.html) - [
ffi::c_ulong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ulong.html) - [
ffi::c_ulonglong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ulonglong.html) - [
ffi::c_ushort
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ushort.html)
These APIs are now usable in const contexts:
- [
slice::from_raw_parts
] (https://doc.rust-lang.org/stable/core/slice/fn.from_raw_parts.html)
Cargo
- [Packages can now inherit settings from the workspace so that
the settings can be centralized in one place.]
(rust-lang/cargo#10859) See
workspace.package
andworkspace.dependencies
for more details on how to define these common settings. - [Cargo commands can now accept multiple
--target
flags to build for multiple targets at once] (rust-lang/cargo#10766), and thebuild.target
config option may now take an array of multiple targets. - [The
--jobs
argument can now take a negative number to count backwards from the max CPUs.] (rust-lang/cargo#10844) - [
cargo add
will now updateCargo.lock
.] (rust-lang/cargo#10902) - Added the
--crate-type
flag tocargo rustc
to override the crate type. - [Significantly improved the performance fetching git dependencies from GitHub
when using a hash in the
rev
field.] (rust-lang/cargo#10079)
Misc
- [The
rust-analyzer
rustup component is now available on the stable channel.] (rust-lang/rust#98640)
Compatibility Notes
- The minimum required versions for all
-linux-gnu
targets are now at least kernel 3.2 and glibc 2.17, for targets that previously supported older versions: Increase the minimum linux-gnu versions - [Network primitives are now implemented with the ideal Rust layout, not the C system layout] (rust-lang/rust#78802). This can cause problems when transmuting the types.
- [Add assertion that
transmute_copy
'sU
is not larger thanT
] (rust-lang/rust#98839) - [A soundness bug in
BTreeMap
was fixed] (rust-lang/rust#99413) that allowed data it was borrowing to be dropped before the container. - [The Drop behavior of C-like enums cast to ints has changed] (rust-lang/rust#96862). These are already discouraged by a compiler warning.
- [Relate late-bound closure lifetimes to parent fn in NLL] (rust-lang/rust#98835)
- [Errors at const-eval time are now in future incompatibility reports] (rust-lang/rust#97743)
- On the
thumbv6m-none-eabi
target, some incorrectasm!
statements were erroneously accepted if they used the high registers (r8 to r14) as an input/output operand. [This is no longer accepted] (rust-lang/rust#99155). - [
impl Trait
was accidentally accepted as the associated type value of return-positionimpl Trait
] (rust-lang/rust#97346), without fulfilling all the trait bounds of that associated type, as long as the hidden type satisfies said bounds. This has been fixed.
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- Windows builds now use profile-guided optimization, providing 10-20% improvements to compiler performance: [Utilize PGO for windows x64 rustc dist builds] (rust-lang/rust#96978)
- [Stop keeping metadata in memory before writing it to disk] (rust-lang/rust#96544)
- [compiletest: strip debuginfo by default for mode=ui] (rust-lang/rust#98140)
- Many improvements to generated code for derives, including
performance improvements:
- [Don't use match-destructuring for derived ops on structs.] (rust-lang/rust#98446)
- [Many small deriving cleanups] (rust-lang/rust#98741)
- [More derive output improvements] (rust-lang/rust#98758)
- Clarify deriving code
- [Final derive output improvements] (rust-lang/rust#99046)
- Stop injecting
#[allow(unused_qualifications)]
in generatedderive
implementations - Improve
derive(Debug)
- Bump to clap 3
- fully move dropck to mir
- [Optimize
Vec::insert
for the case whereindex == len
.] (rust-lang/rust#98755) - [Convert rust-analyzer to an in-tree tool] (rust-lang/rust#99603)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request
Pkgsrc changes:
- This package now contains rust-analyzer, so implicitly conflicts with that pkgsrc package. The same goes for the rust-src package.
- Add NetBSD/arm6 port
- Add unfinished NetBSD/mipsel port
- Revert the use of the internal LLVM, should now build with the new pkgsrc LLVM (15).
- Add depndence on compat80 for sparc64 to fix the build
- Adapt patches
- Add CHECK_INTERPRETER_SKIP for a few (mostly unused) files. (A proper fix may come later.)
Upstream changes:
Version 1.64.0 (2022-09-22)
Language
Unions with mutable references or tuples of allowed types are now allowed
It is now considered valid to deallocate memory pointed to by a shared reference
&T
if every byte inT
is inside anUnsafeCell
Unused tuple struct fields are now warned against in an allow-by-default lint, [
unused_tuple_struct_fields
] (rust-lang/rust#95977), similar to the existing warning for unused struct fields. This lint will become warn-by-default in the future.
Compiler
- [Add Nintendo Switch as tier 3 target]
(rust-lang/rust#88991)
- Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
- [Only compile
#[used]
as llvm.compiler.used for ELF targets] (rust-lang/rust#93718) - [Add the
--diagnostic-width
compiler flag to define the terminal width.] (rust-lang/rust#95635) - [Add support for link-flavor
rust-lld
for iOS, tvOS and watchOS] (rust-lang/rust#98771)
Libraries
- [Remove restrictions on compare-exchange memory ordering.] (rust-lang/rust#98383)
- You can now
write!
orwriteln!
into anOsString
: Implementfmt::Write
forOsString
- [Make RwLockReadGuard covariant] (rust-lang/rust#96820)
- [Implement
FusedIterator
forstd:🥅:[Into]Incoming
] (rust-lang/rust#97300) - [
impl<T: AsRawFd> AsRawFd for {Arc,Box}<T>
] (rust-lang/rust#97437) - [
ptr::copy
andptr::swap
are doing untyped copies] (rust-lang/rust#97712) - [Add cgroupv1 support to
available_parallelism
] (rust-lang/rust#97925) - [Mitigate many incorrect uses of
mem::uninitialized
] (rust-lang/rust#99182)
Stabilized APIs
- [
future::IntoFuture
] (https://doc.rust-lang.org/stable/std/future/trait.IntoFuture.html) - [
future::poll_fn
] (https://doc.rust-lang.org/stable/std/future/fn.poll_fn.html) - [
task::ready!
] (https://doc.rust-lang.org/stable/std/task/macro.ready.html) - [
num::NonZero*::checked_mul
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_mul) - [
num::NonZero*::checked_pow
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_pow) - [
num::NonZero*::saturating_mul
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_mul) - [
num::NonZero*::saturating_pow
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_pow) - [
num::NonZeroI*::abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.abs) - [
num::NonZeroI*::checked_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.checked_abs) - [
num::NonZeroI*::overflowing_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.overflowing_abs) - [
num::NonZeroI*::saturating_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.saturating_abs) - [
num::NonZeroI*::unsigned_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.unsigned_abs) - [
num::NonZeroI*::wrapping_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.wrapping_abs) - [
num::NonZeroU*::checked_add
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_add) - [
num::NonZeroU*::checked_next_power_of_two
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_next_power_of_two) - [
num::NonZeroU*::saturating_add
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_add) - [
os::unix::process::CommandExt::process_group
] (https://doc.rust-lang.org/stable/std/os/unix/process/trait.CommandExt.html#tymethod.process_group) - [
os::windows::fs::FileTypeExt::is_symlink_dir
] (https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_dir) - [
os::windows::fs::FileTypeExt::is_symlink_file
] (https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_file)
These types were previously stable in std::ffi
, but are now also
available in core
and alloc
:
- [
core::ffi::CStr
] (https://doc.rust-lang.org/stable/core/ffi/struct.CStr.html) - [
core::ffi::FromBytesWithNulError
] (https://doc.rust-lang.org/stable/core/ffi/struct.FromBytesWithNulError.html) - [
alloc::ffi::CString
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.CString.html) - [
alloc::ffi::FromVecWithNulError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.FromVecWithNulError.html) - [
alloc::ffi::IntoStringError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.IntoStringError.html) - [
alloc::ffi::NulError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.NulError.html)
These types were previously stable in std::os::raw
, but are now
also available in core::ffi
and std::ffi
:
- [
ffi::c_char
] (https://doc.rust-lang.org/stable/std/ffi/type.c_char.html) - [
ffi::c_double
] (https://doc.rust-lang.org/stable/std/ffi/type.c_double.html) - [
ffi::c_float
] (https://doc.rust-lang.org/stable/std/ffi/type.c_float.html) - [
ffi::c_int
] (https://doc.rust-lang.org/stable/std/ffi/type.c_int.html) - [
ffi::c_long
] (https://doc.rust-lang.org/stable/std/ffi/type.c_long.html) - [
ffi::c_longlong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_longlong.html) - [
ffi::c_schar
] (https://doc.rust-lang.org/stable/std/ffi/type.c_schar.html) - [
ffi::c_short
] (https://doc.rust-lang.org/stable/std/ffi/type.c_short.html) - [
ffi::c_uchar
] (https://doc.rust-lang.org/stable/std/ffi/type.c_uchar.html) - [
ffi::c_uint
] (https://doc.rust-lang.org/stable/std/ffi/type.c_uint.html) - [
ffi::c_ulong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ulong.html) - [
ffi::c_ulonglong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ulonglong.html) - [
ffi::c_ushort
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ushort.html)
These APIs are now usable in const contexts:
- [
slice::from_raw_parts
] (https://doc.rust-lang.org/stable/core/slice/fn.from_raw_parts.html)
Cargo
- [Packages can now inherit settings from the workspace so that
the settings can be centralized in one place.]
(rust-lang/cargo#10859) See
workspace.package
andworkspace.dependencies
for more details on how to define these common settings. - [Cargo commands can now accept multiple
--target
flags to build for multiple targets at once] (rust-lang/cargo#10766), and thebuild.target
config option may now take an array of multiple targets. - [The
--jobs
argument can now take a negative number to count backwards from the max CPUs.] (rust-lang/cargo#10844) - [
cargo add
will now updateCargo.lock
.] (rust-lang/cargo#10902) - Added the
--crate-type
flag tocargo rustc
to override the crate type. - [Significantly improved the performance fetching git dependencies from GitHub
when using a hash in the
rev
field.] (rust-lang/cargo#10079)
Misc
- [The
rust-analyzer
rustup component is now available on the stable channel.] (rust-lang/rust#98640)
Compatibility Notes
- The minimum required versions for all
-linux-gnu
targets are now at least kernel 3.2 and glibc 2.17, for targets that previously supported older versions: Increase the minimum linux-gnu versions - [Network primitives are now implemented with the ideal Rust layout, not the C system layout] (rust-lang/rust#78802). This can cause problems when transmuting the types.
- [Add assertion that
transmute_copy
'sU
is not larger thanT
] (rust-lang/rust#98839) - [A soundness bug in
BTreeMap
was fixed] (rust-lang/rust#99413) that allowed data it was borrowing to be dropped before the container. - [The Drop behavior of C-like enums cast to ints has changed] (rust-lang/rust#96862). These are already discouraged by a compiler warning.
- [Relate late-bound closure lifetimes to parent fn in NLL] (rust-lang/rust#98835)
- [Errors at const-eval time are now in future incompatibility reports] (rust-lang/rust#97743)
- On the
thumbv6m-none-eabi
target, some incorrectasm!
statements were erroneously accepted if they used the high registers (r8 to r14) as an input/output operand. [This is no longer accepted] (rust-lang/rust#99155). - [
impl Trait
was accidentally accepted as the associated type value of return-positionimpl Trait
] (rust-lang/rust#97346), without fulfilling all the trait bounds of that associated type, as long as the hidden type satisfies said bounds. This has been fixed.
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- Windows builds now use profile-guided optimization, providing 10-20% improvements to compiler performance: [Utilize PGO for windows x64 rustc dist builds] (rust-lang/rust#96978)
- [Stop keeping metadata in memory before writing it to disk] (rust-lang/rust#96544)
- [compiletest: strip debuginfo by default for mode=ui] (rust-lang/rust#98140)
- Many improvements to generated code for derives, including
performance improvements:
- [Don't use match-destructuring for derived ops on structs.] (rust-lang/rust#98446)
- [Many small deriving cleanups] (rust-lang/rust#98741)
- [More derive output improvements] (rust-lang/rust#98758)
- Clarify deriving code
- [Final derive output improvements] (rust-lang/rust#99046)
- Stop injecting
#[allow(unused_qualifications)]
in generatedderive
implementations - Improve
derive(Debug)
- Bump to clap 3
- fully move dropck to mir
- [Optimize
Vec::insert
for the case whereindex == len
.] (rust-lang/rust#98755) - [Convert rust-analyzer to an in-tree tool] (rust-lang/rust#99603)
Labels
This PR was explicitly merged by bors.
Marks issues that should be documented in the release notes of the next release.
Performance improvements that should be mentioned in the release notes.
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.