Rust 1.85.0
Released on February 20, 2025
What's Changed
- The unstable flag
-Zpolymorphizehas been removed, see https://github.com/rust-lang/compiler-team/issues/810 for some background.
- Panics in the standard library now have a leading
library/in their path std::env::home_dir()on Windows now ignores the non-standard$HOMEenvironment variable- Add
AsyncFn*to the prelude in all editions. BuildHasherDefault::newptr::fn_addr_eqio::ErrorKind::QuotaExceededio::ErrorKind::CrossesDevices{float}::midpoint- Unsigned
{integer}::midpoint NonZeroU*::midpoint- impl
std::iter::Extendfor tuples with arity 1 through 12%3E-for-(EA,)) FromIterator<(A, ...)>for tuples with arity 1 through 12%3E-for-(A,))std::task::Waker::noopmem::size_of_valmem::align_of_valLayout::for_valueLayout::align_toLayout::pad_to_alignLayout::extendLayout::arraystd::mem::swapstd::ptr::swapNonNull::newHashMap::with_hasherHashSet::with_hasherBuildHasherDefault::new::recip ::to_degrees ::to_radians ::max ::min ::clamp ::abs ::signum ::copysign MaybeUninit::write
rustcno longer treats thetestcfg 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).- 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 theHOMEenvironment 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_charsignedness more closely match that of the platform-defaultchar - When compiling a nested
macro_rulesmacro from an external crate, the content of the innermacro_rulesis now built with the edition of the external crate, not the local crate. - Increase
sparcv9-sun-solarisandx86_64-pc-solarisSolaris baseline to 11.4. - Show
abi_unsupported_vector_typeslint in future breakage reports - Error if multiple super-trait instantiations of
dyn Traitneed associated types to be specified but only one is provided - Change
powerpc64-ibm-aixdefaultcodemodelto large
Full Changelog
Language
--------
- The 2024 Edition is now stable.
See the edition guide for more details.
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
---------------
- io::ErrorKind::QuotaExceeded
- io::ErrorKind::CrossesDevices
- Unsigned {integer}::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,))
These APIs are now stable in const contexts:
-
-
-
-
-
-
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 thetest 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.
- Increase sparcv9-sun-solaris and x86_64-pc-solaris Solaris baseline to 11.4.
- Show abi_unsupported_vector_types lint in future breakage reports
- 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)