1.67.0 #
- Released on: 26 January, 2023
- Branched from master on: 9 December, 2022
Language #
- Make
Sizedpredicates coinductive, allowing cycles. #[must_use]annotations onasync fnalso affect theFuture::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
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.
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_stdtargets for the QNX Neutrino RTOS,aarch64-unknown-nto-qnx710andx86_64-pc-nto-qnx710. - 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).
Refer to Rust’s [platform support page][platform-support-doc] for more information on Rust’s tiered platform support.
Libraries #
- 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.
Stabilized APIs #
{integer}::checked_ilog{integer}::checked_ilog2{integer}::checked_ilog10{integer}::ilog{integer}::ilog2{integer}::ilog10NonZeroU*::ilog2NonZeroU*::ilog10NonZero*::BITS
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 ofrepr(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-dynamictowasm-ld. mainis now mangled as__main_voidonwasm32-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.