Rust versions / 1.41
Rust release · Jan 30, 2020
Rust 1.41: what's new, what was stabilized
Short answerRust 1.41 was released on Jan 30, 2020: 6 newly stable APIs (Result::map_or, Result::map_or_else, std::rc::Weak::weak_count, std::rc::Weak::strong_count, ...); 1 compatibility note that can affect existing code. Point release: 1.41.1 (Feb 27, 2020).
← Rust 1.40All versionsRust 1.42 →
6 APIs stabilized
Result::map_or, Result::map_or_else, std::rc::Weak::weak_count, std::rc::Weak::strong_count, std::sync::Weak::weak_count, std::sync::Weak::strong_count
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:
- [As previously announced 1.41 will be the last tier 1 release for 32-bit
Use it
rustup update stable # get the newest release
rustup install 1.41 # or exactly this one
rustup override set 1.41 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.41" 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
- [You can now pass type parameters to foreign items when implementing traits.][65879] E.g. You can now write
impl<T> From<Foo> for Vec<T> {}. - [You can now arbitrarily nest receiver types in the
selfposition.][64325] E.g. you can now writefn foo(self: Box<Box<Self>>) {}. Previously onlySelf,&Self,&mut Self,Arc<Self>,Rc<Self>, andBox<Self>were allowed. - [You can now use any valid identifier in a
format_argsmacro.][66847] Previously identifiers starting with an underscore were not allowed. - [Visibility modifiers (e.g.
pub) are now syntactically allowed on trait items and enum variants.][66183] These are still rejected semantically, but can be seen and parsed by procedural macros and conditional compilation. - [You can now define a Rust
extern "C"function withBox<T>and useT*as the corresponding type on the C side.][62514] Please see the documentation for more information, including the important caveat about preferring to avoidBox<T>in Rust signatures for functions defined in C.
Compiler
- [Rustc will now warn if you have unused loop
'labels.][66325] - [Removed support for the
i686-unknown-dragonflytarget.][67255] - [Added tier 3 support\* for the
riscv64gc-unknown-linux-gnutarget.][66661] - [You can now pass an arguments file passing the
@pathsyntax to rustc.][66172] Note that the format differs somewhat from what is found in other tooling; please see the documentation for more information. - [You can now provide
--externflag without a path, indicating that it is available from the search path or specified with an-Lflag.][64882]
\* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
Libraries
- [The
core::panicmodule is now stable.][66771] It was already stable throughstd. - [
NonZero*numerics now implementFrom<NonZero*>if it's a smaller integer width.][66277] E.g.NonZeroU16now implementsFrom<NonZeroU8>. - [
MaybeUninit<T>now implementsfmt::Debug.][65013]
Stabilized APIs
- [
Result::map_or] - [
Result::map_or_else] - [
std::rc::Weak::weak_count] - [
std::rc::Weak::strong_count] - [
std::sync::Weak::weak_count] - [
std::sync::Weak::strong_count]
Cargo
- [Cargo will now document all the private items for binary crates by default.][cargo/7593]
- [
cargo-installwill now reinstall the package if it detects that it is out of date.][cargo/7560] - [Cargo.lock now uses a more git friendly format that should help to reduce merge conflicts.][cargo/7579]
- [You can now override specific dependencies's build settings][cargo/7591] E.g.
[profile.dev.package.image] opt-level = 2sets theimagecrate's optimisation level to2for debug builds. You can also use[profile.<profile>.build-override]to override build scripts and their dependencies.
Misc
- [You can now specify
editionin documentation code blocks to compile the block for that edition.][66238] E.g.edition2018tells rustdoc that the code sample should be compiled the 2018 edition of Rust. - [You can now provide custom themes to rustdoc with
--theme, and check the current theme with--check-theme.][54733] - [You can use
#[cfg(doc)]to compile an item when building documentation.][61351]
Compatibility Notes
- As previously announced 1.41 will be the last tier 1 release for 32-bit Apple targets. This means that the source code is still available to build, but the targets are no longer being tested and release binaries for those platforms will no longer be distributed by the Rust project. Please refer to the linked blog post for more information.
1.41.1 (Feb 27, 2020)
- Always check types of static items
- Always check lifetime bounds of
Copyimpls - Fix miscompilation in callers of
Layout::repeat - [Rust 1.41.0 was announced as the last Rust release with tier 1 or tier 2 support for 32-bit Apple targets][apple-32bit-drop]. That announcement did not expect a patch release. 1.41.1 also includes release binaries for these targets.
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.42Released Mar 12, 2020.Read it next →Also worth your time
Did this answer your question?