1.64.0
版本发布时间: 2022-09-22 21:31:04
rust-lang/rust最新发布版本:1.82.0(2024-10-18 00:44:34)
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
, 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
- Refer to Rust's platform support page for more information on Rust's tiered platform support.
-
Only compile
#[used]
as llvm.compiler.used for ELF targets -
Add the
--diagnostic-width
compiler flag to define the terminal width. -
Add support for link-flavor
rust-lld
for iOS, tvOS and watchOS
Libraries
- Remove restrictions on compare-exchange memory ordering.
- You can now
write!
orwriteln!
into anOsString
: Implementfmt::Write
forOsString
- Make RwLockReadGuard covariant
-
Implement
FusedIterator
forstd::net::[Into]Incoming
-
impl<T: AsRawFd> AsRawFd for {Arc,Box}<T>
-
ptr::copy
andptr::swap
are doing untyped copies -
Add cgroupv1 support to
available_parallelism
-
Mitigate many incorrect uses of
mem::uninitialized
Stabilized APIs
-
future::IntoFuture
-
future::poll_fn
-
task::ready!
-
num::NonZero*::checked_mul
-
num::NonZero*::checked_pow
-
num::NonZero*::saturating_mul
-
num::NonZero*::saturating_pow
-
num::NonZeroI*::abs
-
num::NonZeroI*::checked_abs
-
num::NonZeroI*::overflowing_abs
-
num::NonZeroI*::saturating_abs
-
num::NonZeroI*::unsigned_abs
-
num::NonZeroI*::wrapping_abs
-
num::NonZeroU*::checked_add
-
num::NonZeroU*::checked_next_power_of_two
-
num::NonZeroU*::saturating_add
-
os::unix::process::CommandExt::process_group
-
os::windows::fs::FileTypeExt::is_symlink_dir
-
os::windows::fs::FileTypeExt::is_symlink_file
These types were previously stable in std::ffi
, but are now also available in core
and alloc
:
-
core::ffi::CStr
-
core::ffi::FromBytesWithNulError
-
alloc::ffi::CString
-
alloc::ffi::FromVecWithNulError
-
alloc::ffi::IntoStringError
-
alloc::ffi::NulError
These types were previously stable in std::os::raw
, but are now also available in core::ffi
and std::ffi
:
-
ffi::c_char
-
ffi::c_double
-
ffi::c_float
-
ffi::c_int
-
ffi::c_long
-
ffi::c_longlong
-
ffi::c_schar
-
ffi::c_short
-
ffi::c_uchar
-
ffi::c_uint
-
ffi::c_ulong
-
ffi::c_ulonglong
-
ffi::c_ushort
These APIs are now usable in const contexts:
Cargo
-
Packages can now inherit settings from the workspace so that the settings can be centralized in one place. 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, 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. -
cargo add
will now updateCargo.lock
. -
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.
Misc
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. This can cause problems when transmuting the types.
-
Add assertion that
transmute_copy
'sU
is not larger thanT
-
A soundness bug in
BTreeMap
was fixed that allowed data it was borrowing to be dropped before the container. - The Drop behavior of C-like enums cast to ints has changed. These are already discouraged by a compiler warning.
- Relate late-bound closure lifetimes to parent fn in NLL
- Errors at const-eval time are now in future incompatibility reports
- 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. -
impl Trait
was accidentally accepted as the associated type value of return-positionimpl Trait
, 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
- Stop keeping metadata in memory before writing it to disk
- compiletest: strip debuginfo by default for mode=ui
- Many improvements to generated code for derives, including performance improvements:
- Bump to clap 3
- fully move dropck to mir
-
Optimize
Vec::insert
for the case whereindex == len
. - Convert rust-analyzer to an in-tree tool