← Back to all releases

Rust 1.85.0

Released on February 20, 2025

What's Changed

Full Changelog

Language

--------

- The 2024 Edition is now stable.

See the edition guide for more details.

- Stabilize async closures

See RFC 3668 for more details.

- Stabilize #[diagnostic::do_not_recommend]

- Add unpredictable_function_pointer_comparisons lint to warn against function pointer comparisons

- Lint on combining #[no_mangle] and #[export_name] attributes.

Compiler

--------

- The unstable flag -Zpolymorphize has been removed, see https://github.com/rust-lang/compiler-team/issues/810 for some background.

Platform Support

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

- Promote powerpc64le-unknown-linux-musl to tier 2 with host tools

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

for more information on Rust's tiered platform support.

Libraries

---------

- Panics in the standard library now have a leading library/ in their path

- std::env::home_dir() on Windows now ignores the non-standard $HOME environment variable

It will be un-deprecated in a subsequent release.

- Add AsyncFn* to the prelude in all editions.

Stabilized APIs

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

- BuildHasherDefault::new

- ptr::fn_addr_eq

- io::ErrorKind::QuotaExceeded

- io::ErrorKind::CrossesDevices

- {float}::midpoint

- Unsigned {integer}::midpoint

- NonZeroU*::midpoint

- impl std::iter::Extend for tuples with arity 1 through 12%3E-for-(EA,))

- FromIterator<(A, ...)> for tuples with arity 1 through 12%3E-for-(A,))

- std::task::Waker::noop

These APIs are now stable in const contexts:

- mem::size_of_val

- mem::align_of_val

- Layout::for_value

- Layout::align_to

- Layout::pad_to_align

- Layout::extend

- Layout::array

- std::mem::swap

- std::ptr::swap

- NonNull::new

- HashMap::with_hasher

- HashSet::with_hasher

- BuildHasherDefault::new

- ::recip

- ::to_degrees

- ::to_radians

- ::max

- ::min

- ::clamp

- ::abs

- ::signum

- ::copysign

- MaybeUninit::write

Cargo

-----

- Add future-incompatibility warning against keywords in cfgs and add raw-idents

- Stabilize higher precedence trailing flags

- Pass CARGO_CFG_FEATURE to build scripts

Rustdoc

-----

- Doc comment on impl blocks shows the first line, even when the impl block is collapsed

Compatibility Notes

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

- rustc no longer treats the test cfg as a well known check-cfg, instead it is up to the build systems and users of --check-cfg[^check-cfg] to set it as a well known cfg using --check-cfg=cfg(test).

This is done to enable build systems like Cargo to set it conditionally, as not all source files are suitable for unit tests.

Cargo (for now) unconditionally sets the test cfg as a well known cfg.

[^check-cfg]: https://doc.rust-lang.org/nightly/rustc/check-cfg.html

- Disable potentially incorrect type inference if there are trivial and non-trivial where-clauses

- std::env::home_dir() has been deprecated for years, because it can give surprising results in some Windows configurations if the HOME environment variable is set (which is not the normal configuration on Windows). We had previously avoided changing its behavior, out of concern for compatibility with code depending on this non-standard configuration. Given how long this function has been deprecated, we're now fixing its behavior as a bugfix. A subsequent release will remove the deprecation for this function.

- Make core::ffi::c_char signedness more closely match that of the platform-default char

This changed c_char from an i8 to u8 or vice versa on many Tier 2 and 3

targets (mostly Arm and RISC-V embedded targets). The new definition may

result in compilation failures but fixes compatibility issues with C.

The libc crate matches this change as of its 0.2.169 release.

- When compiling a nested macro_rules macro from an external crate, the content of the inner macro_rules is now built with the edition of the external crate, not the local crate.

- Increase sparcv9-sun-solaris and x86_64-pc-solaris Solaris baseline to 11.4.

- Show abi_unsupported_vector_types lint in future breakage reports

- Error if multiple super-trait instantiations of dyn Trait need associated types to be specified but only one is provided

- Change powerpc64-ibm-aix default codemodel to large

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.

- Build x86_64-unknown-linux-gnu with LTO for C/C++ code (e.g., jemalloc)