Remove a back-compat hack on lazy TAIT by JohnTitor · Pull Request #97346 · rust-lang/rust (original) (raw)
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 }})
This PR's motivation is here: #72614 (comment)But removing a hack doesn't seem to reject the code on the issue, there're some more hacks?
r? @oli-obk
rustbot added the T-compiler
Relevant to the compiler team, which will review and decide on the PR/issue.
label
But removing a hack doesn't seem to reject the code on the issue, there're some more hacks?
Oh... Turns out I didn't read your example test very well. Yea, that's totally fine to pass. There were other roundabout ways to make the same thing pass before.
So independently of that issue, we can still remove the back compat hack and see how well/bad it goes
Alright, dropped the test as it's unrelated to the hack itself.
Oh... Turns out I didn't read your example test very well. Yea, that's totally fine to pass. There were other roundabout ways to make the same thing pass before.
Is there any reference/discussion etc. to that? To close #72614, I'd like to know how these impl traits work!
So independently of that issue, we can still remove the back compat hack and see how well/bad it goes
Feel free to kick off crater once you're ready, I'm not familiar with it.
Comment on lines 51 to 54
if !value.has_opaque_types() { |
---|
return InferOk { value, obligations: vec![] }; |
} |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This may still be necessary as a performance optimization
⌛ Trying commit c46eea9c5b7f87152efb7b76f1ceba0f2b165e6c with merge 7306d3110618f84a6a4662b9e2cc4fd0d9b02da8...
Is there any reference/discussion etc. to that? To close #72614, I'd like to know how these impl traits work!
Not really, but I'll leave a comment on that issue explaining what the heck is going on
☀️ Try build successful - checks-actions
Build commit: 7306d3110618f84a6a4662b9e2cc4fd0d9b02da8 (7306d3110618f84a6a4662b9e2cc4fd0d9b02da8
)
👌 Experiment pr-97346
created and queued.
🤖 Automatically detected try build 7306d3110618f84a6a4662b9e2cc4fd0d9b02da8
🔍 You can check out the queue and this experiment's details.
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more
🚧 Experiment pr-97346
is now running
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more
@oli-obk We have a ton of spurious-regressed, is it okay?
Some analysis of "root results" failures:
- stuartZhang.scaffold-wizard.ae8617257ead4fb6fc1e529f192fc4ccbe3806c6: Seems unrelated
- Ayrx.binja-rs-hello-world.a0f5fb90a3544b233856cddbdac059da21ce27ee: Seems unrelated
- ledger-transport-zemu-0.9.0: Seems unrelated
- bitrust-0.1.0: Seems unrelated
- andrewhickman.proxy-server.1f02e7d8fafb8f43059ae0313f5dc3ca64cee637: Seems related but the crate has not been updated since 2020 Sep. 8th
- battjt.cb-test.b23d7048a84aa9f1e407edb24fddc001794e31d6: Seems unrelated, the issue has been reported as error: internal compiler error: compiler/rustc_passes/src/dead.rs:122:13: no type-dependent def for method #88643 and it's fixed on master
I think all of the "regressed: dependencies" failures are due to a lack of mem.
So I'd like to say that the impact of this change would be pretty small (if we could ignore the "spurious-regressed" failures).
Thoughts?
Yea, except for proxy-server, all of these are unrelated. I guess we can break them as long as we open an issue or fix PR on their repo
JohnTitor added a commit to JohnTitor/mock-server that referenced this pull request
Signed-off-by: Yuki Okushi jtitor@2k36.org
andrewhickman added a commit to andrewhickman/mock-server that referenced this pull request
Relevant to the types team, which will review and decide on the PR/issue.
and removed T-compiler
Relevant to the compiler team, which will review and decide on the PR/issue.
labels
📌 Commit c24f063 has been approved by oli-obk
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
Dylan-DPC added a commit to Dylan-DPC/rust that referenced this pull request
… r=oli-obk
Remove a back-compat hack on lazy TAIT
This PR's motivation is here: rust-lang#72614 (comment)
But removing a hack doesn't seem to reject the code on the issue, there're some more hacks?
r? @oli-obk
bors added a commit to rust-lang-ci/rust that referenced this pull request
oli-obk added a commit to oli-obk/rust that referenced this pull request
…t-hacks, r=oli-obk"
This reverts commit c703d11, reversing changes made to 64eb9ab.
bors added a commit to rust-lang-ci/rust that referenced this pull request
Revert "Rollup merge of rust-lang#97346 - JohnTitor:remove-back-compat-hacks, …
…r=oli-obk"
This reverts commit c703d11, reversing changes made to 64eb9ab.
it didn't apply cleanly, so now it works the same for RPIT and for TAIT instead of just working for RPIT, but we should keep those in sync anyway. It also exposed a TAIT bug (see the feature gated test that now ICEs).
r? @pnkfelix
fixes rust-lang#99536
ehuss pushed a commit to ehuss/rust that referenced this pull request
Revert "Rollup merge of rust-lang#97346 - JohnTitor:remove-back-compat-hacks, …
…r=oli-obk"
This reverts commit c703d11, reversing changes made to 64eb9ab.
it didn't apply cleanly, so now it works the same for RPIT and for TAIT instead of just working for RPIT, but we should keep those in sync anyway. It also exposed a TAIT bug (see the feature gated test that now ICEs).
r? @pnkfelix
fixes rust-lang#99536
ehuss mentioned this pull request
ehuss added beta-accepted
Accepted for backporting to the compiler in the beta channel.
and removed beta-accepted
Accepted for backporting to the compiler in the beta channel.
labels
bors added a commit to rust-lang-ci/rust that referenced this pull request
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 issue / PR is in PFCP or FCP with a disposition to merge it.
The final comment period is finished for this PR / Issue.
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Relevant to the types team, which will review and decide on the PR/issue.