Rust 1.67.0
Released on January 26, 2023
What's Changed
- Enable varargs support for calling conventions other than
Corcdecl. - Add new MIR constant propagation based on dataflow analysis.
- Optimize field ordering by grouping m\*2^n-sized fields with equivalently aligned ones.
- Stabilize native library modifier
verbatim. - Add a tier 3 target for PowerPC on AIX,
powerpc64-ibm-aix. - Add a tier 3 target for the Sony PlayStation 1,
mipsel-sony-psx. - Add tier 3
no_stdtargets for the QNX Neutrino RTOS, - Promote UEFI targets to tier 2,
aarch64-unknown-uefi,i686-unknown-uefi, andx86_64-unknown-uefi. - Remove tier 3
linuxkerneltargets (not used by the actual kernel).
- Merge
crossbeam-channelintostd::sync::mpsc. - Fix inconsistent rounding of 0.5 when formatted to 0 decimal places.
- Derive
EqandHashforControlFlow. - Don't build
compiler_builtinswith-C panic=abort. {integer}::checked_ilog{integer}::checked_ilog2{integer}::checked_ilog10{integer}::ilog{integer}::ilog2{integer}::ilog10NonZeroU*::ilog2NonZeroU*::ilog10NonZero*::BITSchar::from_u32char::from_digitchar::to_digitcore::char::from_u32core::char::from_digit
- [The layout of
repr(Rust)types now groups m\*2^n-sized fields with - 0.5 now rounds to 0 when formatted to 0 decimal places.
- [Chains of
&&and||will now drop temporaries from their sub-expressions in - Underscore suffixes on string literals are now a hard error.
- Stop passing
-export-dynamictowasm-ld. mainis now mangled as__main_voidonwasm32-wasi.- [Cargo now emits an error if there are multiple registries in the configuration
Full Changelog
Language
--------
- Make Sized predicates coinductive, allowing cycles.
- #[must_use] annotations on async fn also affect the Future::Output.
- Elaborate supertrait obligations when deducing closure signatures.
- Invalid literals are no longer an error under cfg(FALSE).
- Unreserve braced enum variants in value namespace.
Compiler
--------
- Enable varargs support for calling conventions other than C or cdecl.
- Add new MIR constant propagation based on dataflow analysis.
- Optimize field ordering by grouping m\*2^n-sized fields with equivalently aligned ones.
- Stabilize native library modifier verbatim.
Added, updated, and removed targets:
- Add a tier 3 target for PowerPC on AIX, powerpc64-ibm-aix.
- Add a tier 3 target for the Sony PlayStation 1, mipsel-sony-psx.
- Add tier 3 no_std targets for the QNX Neutrino RTOS,
aarch64-unknown-nto-qnx710 and x86_64-pc-nto-qnx710.
- Promote UEFI targets to tier 2, aarch64-unknown-uefi, i686-unknown-uefi, and x86_64-unknown-uefi.
- Remove tier 3 linuxkernel targets (not used by the actual kernel).
Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- Merge crossbeam-channel into std::sync::mpsc.
- Fix inconsistent rounding of 0.5 when formatted to 0 decimal places.
- Derive Eq and Hash for ControlFlow.
- Don't build compiler_builtins with -C panic=abort.
Stabilized APIs
---------------
These APIs are now stable in const contexts:
Compatibility Notes
-------------------
- The layout of repr(Rust) types now groups m\*2^n-sized fields with
equivalently aligned ones.
This is intended to be an optimization, but it is also known to increase type
sizes in a few cases for the placement of enum tags. As a reminder, the layout
of repr(Rust) types is an implementation detail, subject to change.
- 0.5 now rounds to 0 when formatted to 0 decimal places.
This makes it consistent with the rest of floating point formatting that
rounds ties toward even digits.
- Chains of && and || will now drop temporaries from their sub-expressions in
evaluation order, left-to-right.
Previously, it was "twisted" such that the _first_ expression dropped its
temporaries _last_, after all of the other expressions dropped in order.
- Underscore suffixes on string literals are now a hard error.
This has been a future-compatibility warning since 1.20.0.
- Stop passing -export-dynamic to wasm-ld.
- main is now mangled as __main_void on wasm32-wasi.
- Cargo now emits an error if there are multiple registries in the configuration
with the same index URL.
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.