Rust versions / 1.34
Rust release · Apr 11, 2019
Rust 1.34: what's new, what was stabilized
Short answerRust 1.34 was released on Apr 11, 2019: 30 newly stable APIs (Any::type_id, Error::type_id, atomic::AtomicI16, atomic::AtomicI32, ...); 2 compatibility notes that can affect existing code. Point releases: 1.34.1 (Apr 25, 2019), 1.34.2 (May 14, 2019).
← Rust 1.33All versionsRust 1.35 →
30 APIs stabilized
Any::type_id, Error::type_id, atomic::AtomicI16, atomic::AtomicI32, atomic::AtomicI64, atomic::AtomicI8, atomic::AtomicU16, atomic::AtomicU32, atomic::AtomicU64, atomic::AtomicU8, convert::Infallible, convert::TryFrom, convert::TryInto, iter::from_fn, iter::successors, num::NonZeroI128, num::NonZeroI16, num::NonZeroI32, num::NonZeroI64, num::NonZeroI8, num::NonZeroIsize, slice::sort_by_cached_key, str::escape_debug, str::escape_default, str::escape_unicode, str::split_ascii_whitespace, Instant::checked_add, Instant::checked_sub, SystemTime::checked_add, SystemTime::checked_sub
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:
- [
Command::before_execis being replaced by the unsafe method - [Use of
ATOMIC_{BOOL, ISIZE, USIZE}_INITis now deprecated][57425] as you
Use it
rustup update stable # get the newest release
rustup install 1.34 # or exactly this one
rustup override set 1.34 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.34" 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 use
#[deprecated = "reason"]][58166] as a shorthand for#[deprecated(note = "reason")]. This was previously allowed by mistake but had no effect. - [You can now accept token streams in
#[attr()],#[attr[]], and#[attr{}]procedural macros.][57367] - [You can now write
extern crate self as foo;][57407] to import your crate's root into the extern prelude.
Compiler
- [You can now target
riscv64imac-unknown-none-elfandriscv64gc-unknown-none-elf.][58406] - [You can now enable linker plugin LTO optimisations with
-C linker-plugin-lto.][58057] This allows rustc to compile your Rust code into LLVM bitcode allowing LLVM to perform LTO optimisations across C/C++ FFI boundaries. - [You can now target
powerpc64-unknown-freebsd.][57809]
Libraries
- [The trait bounds have been removed on some of
HashMap<K, V, S>'s andHashSet<T, S>'s basic methods.][58370] Most notably you no longer require theHashtrait to create an iterator. - [The
Ordtrait bounds have been removed on some ofBinaryHeap<T>'s basic methods.][58421] Most notably you no longer require theOrdtrait to create an iterator. - [The methods
overflowing_negandwrapping_negare nowconstfunctions for all numeric types.][58044] - [Indexing a
stris now generic over all types that implementSliceIndex<str>.][57604] - [
str::trim,str::trim_matches,str::trim_{start, end}, andstr::trim_{start, end}_matchesare now#[must_use]][57106] and will produce a warning if their returning type is unused. - [The methods
checked_pow,saturating_pow,wrapping_pow, andoverflowing_poware now available for all numeric types.][57873] These are equivalent to methods such aswrapping_addfor thepowoperation.
Stabilized APIs
std & core
- [
Any::type_id] - [
Error::type_id] - [
atomic::AtomicI16] - [
atomic::AtomicI32] - [
atomic::AtomicI64] - [
atomic::AtomicI8] - [
atomic::AtomicU16] - [
atomic::AtomicU32] - [
atomic::AtomicU64] - [
atomic::AtomicU8] - [
convert::Infallible] - [
convert::TryFrom] - [
convert::TryInto] - [
iter::from_fn] - [
iter::successors] - [
num::NonZeroI128] - [
num::NonZeroI16] - [
num::NonZeroI32] - [
num::NonZeroI64] - [
num::NonZeroI8] - [
num::NonZeroIsize] - [
slice::sort_by_cached_key] - [
str::escape_debug] - [
str::escape_default] - [
str::escape_unicode] - [
str::split_ascii_whitespace]
std
- [
Instant::checked_add] - [
Instant::checked_sub] - [
SystemTime::checked_add] - [
SystemTime::checked_sub]
Cargo
- [You can now use alternative registries to crates.io.][cargo/6654]
Misc
- [You can now use the
?operator in your documentation tests without manually addingfn main() -> Result<(), _> {}.][56470]
Compatibility Notes
Command::before_execis being replaced by the unsafe methodCommand::pre_execand will be deprecated with Rust 1.37.0.- Use of
ATOMIC_{BOOL, ISIZE, USIZE}_INITis now deprecated as you can now useconstfunctions instaticvariables.
1.34.1 (Apr 25, 2019)
- Fix false positives for the
redundant_closureClippy lint - Fix false positives for the
missing_const_for_fnClippy lint - Fix Clippy panic when checking some macros
1.34.2 (May 14, 2019)
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.35Released May 23, 2019.Read it next →Also worth your time
Did this answer your question?