Rust versions / 1.85
Rust release · Feb 20, 2025
Rust 1.85: what's new, what was stabilized
Short answerRust 1.85 was released on Feb 20, 2025: the Rust 2024 edition; 2 language stabilizations (Stabilize async closures); 33 newly stable APIs (BuildHasherDefault::new, ptr::fn_addr_eq, io::ErrorKind::QuotaExceeded, io::ErrorKind::CrossesDevices, ...); 9 compatibility notes that can affect existing code. Point release: 1.85.1 (Mar 18, 2025).
← Rust 1.84All versionsRust 1.86 →
Language features stabilized
- Stabilize async closures
- [Stabilize #[diagnostic::do_not_recommend]](https://github.com/rust-lang/rust/pull/132056)
33 APIs stabilized
BuildHasherDefault::new, ptr::fn_addr_eq, io::ErrorKind::QuotaExceeded, io::ErrorKind::CrossesDevices, {float}::midpoint, {integer}::midpoint, NonZeroU*::midpoint, std::iter::Extend, FromIterator<, std::task::Waker::noop, 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, <float>::recip, <float>::to_degrees, <float>::to_radians, <float>::max, <float>::min, <float>::clamp, <float>::abs, <float>::signum, <float>::copysign, MaybeUninit::write
Can it break my build?
The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:
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
Use it
rustup update stable # get the newest release
rustup install 1.85 # or exactly this one
rustup override set 1.85 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.85" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.
Full release notes
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]](https://github.com/rust-lang/rust/pull/132056) - Add
unpredictable_function_pointer_comparisonslint to warn against function pointer comparisons - [Lint on combining
#[no_mangle]and#[export_name]attributes.](https://github.com/rust-lang/rust/pull/131558)
<a id="1.85.0-Compiler"></a>
Compiler
- The unstable flag
-Zpolymorphizehas been removed, see https://github.com/rust-lang/compiler-team/issues/810 for some background.
<a id="1.85.0-Platform-Support"></a>
Platform Support
Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
<a id="1.85.0-Libraries"></a>
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$HOMEenvironment variable
It will be un-deprecated in a subsequent release.
<a id="1.85.0-Stabilized-APIs"></a>
Stabilized APIs
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::noop
These APIs are now stable in const contexts:
mem::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<float>::recip<float>::to_degrees<float>::to_radians<float>::max<float>::min<float>::clamp<float>::abs<float>::signum<float>::copysignMaybeUninit::write
<a id="1.85.0-Cargo"></a>
Cargo
- Add future-incompatibility warning against keywords in cfgs and add raw-idents
- Stabilize higher precedence trailing flags
- Pass
CARGO_CFG_FEATUREto build scripts
<a id="1.85.0-Rustdoc"></a>
Rustdoc
<a id="1.85.0-Compatibility-Notes"></a>
Compatibility Notes
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).
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 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
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_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
<a id="1.85.0-Internal-Changes"></a>
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.
1.85.1 (Mar 18, 2025)
<a id="1.85.1"></a>
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.86Released Apr 3, 2025.Read it next →Also worth your time
Did this answer your question?