Email me

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).

Jan 30, 2020release date
0language stabilizations
6APIs stabilized
-new edition

← 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 it

To 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 self position.][64325] E.g. you can now write fn foo(self: Box<Box<Self>>) {}. Previously only Self, &Self, &mut Self, Arc<Self>, Rc<Self>, and Box<Self> were allowed.
  • [You can now use any valid identifier in a format_args macro.][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 with Box<T> and use T* as the corresponding type on the C side.][62514] Please see the documentation for more information, including the important caveat about preferring to avoid Box<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-dragonfly target.][67255]
  • [Added tier 3 support\* for the riscv64gc-unknown-linux-gnu target.][66661]
  • [You can now pass an arguments file passing the @path syntax 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 --extern flag without a path, indicating that it is available from the search path or specified with an -L flag.][64882]

\* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.

Libraries

  • [The core::panic module is now stable.][66771] It was already stable through std.
  • [NonZero* numerics now implement From<NonZero*> if it's a smaller integer width.][66277] E.g. NonZeroU16 now implements From<NonZeroU8>.
  • [MaybeUninit<T> now implements fmt::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-install will 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 = 2 sets the image crate's optimisation level to 2 for debug builds. You can also use [profile.<profile>.build-override] to override build scripts and their dependencies.

Misc

  • [You can now specify edition in documentation code blocks to compile the block for that edition.][66238] E.g. edition2018 tells 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

1.41.1 (Feb 27, 2020)

Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.

← Rust 1.40All versionsRust 1.42 →

Up next

Next releaseRust 1.42Released Mar 12, 2020.Read it next →

Did this answer your question?

Get the receipts by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ