← Back to all releases

Rust 1.75.0

Released on December 28, 2023

What's Changed

Full Changelog

Language

--------

- Stabilize async fn and return-position impl Trait in traits.

- Allow function pointer signatures containing &mut T in const contexts.

- Match usize/isize exhaustively with half-open ranges.

- Guarantee that char has the same size and alignment as u32.

- Document that the null pointer has the 0 address.

- Allow partially moved values in match.

- Add notes about non-compliant FP behavior on 32bit x86 targets.

- Stabilize ratified RISC-V target features.

Compiler

--------

- Rework negative coherence to properly consider impls that only partly overlap.

- Bump COINDUCTIVE_OVERLAP_IN_COHERENCE to deny, and warn in dependencies.

- Consider alias bounds when computing liveness in NLL.

- Add the V (vector) extension to the riscv64-linux-android target spec.

- Automatically enable cross-crate inlining for small functions

- Add several new tier 3 targets:

- csky-unknown-linux-gnuabiv2hf

- i586-unknown-netbsd

- mipsel-unknown-netbsd

Refer to Rust's [platform support page][platform-support-doc]

for more information on Rust's tiered platform support.

Libraries

---------

- Override Waker::clone_from to avoid cloning Wakers unnecessarily.

- Implement BufRead for VecDeque.

- Implement FusedIterator for DecodeUtf16 when the inner iterator does.

- Implement Not, Bit{And,Or}{,Assign} for IP addresses.

- Implement Default for ExitCode.

- Guarantee representation of None in NPO

- Document when atomic loads are guaranteed read-only.

- Broaden the consequences of recursive TLS initialization.

- Windows: Support sub-millisecond sleep.

- Fix generic bound of str::SplitInclusive's DoubleEndedIterator impl

- Fix exit status / wait status on non-Unix cfg(unix) platforms.

Stabilized APIs

---------------

- Atomic*::from_ptr

- FileTimes

- FileTimesExt

- File::set_modified

- File::set_times

- IpAddr::to_canonical

- Ipv6Addr::to_canonical

- Option::as_slice

- Option::as_mut_slice

- pointer::byte_add

- pointer::byte_offset

- pointer::byte_offset_from

- pointer::byte_sub

- pointer::wrapping_byte_add

- pointer::wrapping_byte_offset

- pointer::wrapping_byte_sub

These APIs are now stable in const contexts:

- Ipv6Addr::to_ipv4_mapped

- MaybeUninit::assume_init_read

- MaybeUninit::zeroed

- mem::discriminant

- mem::zeroed

Cargo

-----

- Add new packages to [workspace.members] automatically.

- Allow version-less Cargo.toml manifests.

- Make browser links out of HTML file paths.

Rustdoc

-------

- Accept less invalid Rust in rustdoc.

- Document lack of object safety on affected traits.

- Hide #[repr(transparent)] if it isn't part of the public ABI.

- Show enum discriminant if it is a C-like variant.

Compatibility Notes

-------------------

- FreeBSD targets now require at least version 12.

- Formally demote tier 2 MIPS targets to tier 3.

- Make misalignment a hard error in const contexts.

- Fix detecting references to packed unsized fields.

- Remove support for compiler plugins.

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.

- Optimize librustc_driver.so with BOLT.

- Enable parallel rustc front end in dev and nightly builds.

- Distribute rustc-codegen-cranelift as rustup component on the nightly channel.