1.59.0
版本发布时间: 2022-02-25 01:00:22
rust-lang/rust最新发布版本:1.83.0(2024-11-28 22:02:00)
Language
- Stabilize default arguments for const parameters and remove the ordering restriction for type and const parameters
- Stabilize destructuring assignment
- Relax private in public lint on generic bounds and where clauses of trait impls
- Stabilize asm! and global_asm! for x86, x86_64, ARM, Aarch64, and RISC-V
Compiler
- Stabilize new symbol mangling format, leaving it opt-in (-Csymbol-mangling-version=v0)
-
Emit LLVM optimization remarks when enabled with
-Cremark
- Fix sparc64 ABI for aggregates with floating point members
-
Warn when a
#[test]
-like built-in attribute macro is present multiple times. - Add support for riscv64gc-unknown-freebsd
-
Stabilize
-Z emit-future-incompat
as--json future-incompat
- Soft disable incremental compilation
This release disables incremental compilation, unless the user has explicitly opted in via the newly added RUSTC_FORCE_INCREMENTAL=1 environment variable. This is due to a known and relatively frequently occurring bug in incremental compilation, which causes builds to issue internal compiler errors. This particular bug is already fixed on nightly, but that fix has not yet rolled out to stable and is deemed too risky for a direct stable backport.
As always, we encourage users to test with nightly and report bugs so that we can track failures and fix issues earlier.
See 94124 for more details.
Libraries
Stabilized APIs
-
std::thread::available_parallelism
-
Result::copied
-
Result::cloned
-
arch::asm!
-
arch::global_asm!
-
ops::ControlFlow::is_break
-
ops::ControlFlow::is_continue
-
TryFrom<char> for u8
-
char::TryFromCharError
implementingClone
,Debug
,Display
,PartialEq
,Copy
,Eq
,Error
-
iter::zip
-
NonZeroU8::is_power_of_two
-
NonZeroU16::is_power_of_two
-
NonZeroU32::is_power_of_two
-
NonZeroU64::is_power_of_two
-
NonZeroU128::is_power_of_two
-
NonZeroUsize::is_power_of_two
-
DoubleEndedIterator for ToLowercase
-
DoubleEndedIterator for ToUppercase
-
TryFrom<&mut [T]> for [T; N]
-
UnwindSafe for Once
-
RefUnwindSafe for Once
- armv8 neon intrinsics for aarch64
Const-stable:
-
mem::MaybeUninit::as_ptr
-
mem::MaybeUninit::assume_init
-
mem::MaybeUninit::assume_init_ref
-
ffi::CStr::from_bytes_with_nul_unchecked
Cargo
-
Stabilize the
strip
profile option - Stabilize future-incompat-report
-
Support abbreviating
--release
as-r
-
Support
term.quiet
configuration -
Remove
--host
from cargo {publish,search,login}
Compatibility Notes
- Refactor weak symbols in std::sys::unix This may add new, versioned, symbols when building with a newer glibc, as the standard library uses weak linkage rather than dynamically attempting to load certain symbols at runtime.
-
Deprecate crate_type and crate_name nested inside
#![cfg_attr]
This adds a future compatibility lint to supporting the use of cfg_attr wrapping either crate_type or crate_name specification within Rust files; it is recommended that users migrate to setting the equivalent command line flags. -
Remove effect of
#[no_link]
attribute on name resolution This may expose new names, leading to conflicts with preexisting names in a given namespace and a compilation failure. - Cargo will document libraries before binaries.
- Respect doc=false in dependencies, not just the root crate
- Weaken guarantee around advancing underlying iterators in zip
- Make split_inclusive() on an empty slice yield an empty output
- Update std::env::temp_dir to use GetTempPath2 on Windows when available.
- unreachable! was updated to match other formatting macro behavior on Rust 2021
Internal Changes
These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools.