Rust 1.34.0
Released on April 11, 2019
What's Changed
- [You can now use
#[deprecated = "reason"]][58166] as a shorthand for - [You can now accept token streams in
#[attr()],#[attr[]], and - [You can now write
extern crate self as foo;][57407] to import your
- [You can now target
riscv64imac-unknown-none-elfand - [You can now enable linker plugin LTO optimisations with
- [You can now target
powerpc64-unknown-freebsd.][57809]
- [The trait bounds have been removed on some of
HashMap's and - [The
Ordtrait bounds have been removed on some ofBinaryHeap's basic - [The methods
overflowing_negandwrapping_negare nowconstfunctions - [Indexing a
stris now generic over all types that - [
str::trim,str::trim_matches,str::trim_{start, end}, and - [The methods
checked_pow,saturating_pow,wrapping_pow, and - [
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]
- [You can now use alternative registries to crates.io.][cargo/6654]
- [
Command::before_execis being replaced by the unsafe method - [Use of
ATOMIC_{BOOL, ISIZE, USIZE}_INITis now deprecated][57425] as you
- [You can now use the
?operator in your documentation tests without manually
Full Changelog
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-elf and
riscv64gc-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's and
HashSet's basic methods.][58370] Most notably you no longer require
the Hash trait to create an iterator.
- [The Ord trait bounds have been removed on some of BinaryHeap's basic
methods.][58421] Most notably you no longer require the Ord trait to create
an iterator.
- [The methods overflowing_neg and wrapping_neg are now const functions
for all numeric types.][58044]
- [Indexing a str is now generic over all types that
implement SliceIndex.][57604]
- [str::trim, str::trim_matches, str::trim_{start, end}, and
str::trim_{start, end}_matches are now #[must_use]][57106] and will
produce a warning if their returning type is unused.
- [The methods checked_pow, saturating_pow, wrapping_pow, and
overflowing_pow are now available for all numeric types.][57873] These are
equivalent to methods such as wrapping_add for the pow operation.
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
adding fn main() -> Result<(), _> {}.][56470]
Compatibility Notes
-------------------
- [Command::before_exec is being replaced by the unsafe method
Command::pre_exec][58059] and will be deprecated with Rust 1.37.0.
- [Use of ATOMIC_{BOOL, ISIZE, USIZE}_INIT is now deprecated][57425] as you
can now use const functions in static variables.
[58370]: https://github.com/rust-lang/rust/pull/58370/
[58406]: https://github.com/rust-lang/rust/pull/58406/
[58421]: https://github.com/rust-lang/rust/pull/58421/
[58166]: https://github.com/rust-lang/rust/pull/58166/
[58044]: https://github.com/rust-lang/rust/pull/58044/
[58057]: https://github.com/rust-lang/rust/pull/58057/
[58059]: https://github.com/rust-lang/rust/pull/58059/
[57809]: https://github.com/rust-lang/rust/pull/57809/
[57873]: https://github.com/rust-lang/rust/pull/57873/
[57604]: https://github.com/rust-lang/rust/pull/57604/
[57367]: https://github.com/rust-lang/rust/pull/57367/
[57407]: https://github.com/rust-lang/rust/pull/57407/
[57425]: https://github.com/rust-lang/rust/pull/57425/
[57106]: https://github.com/rust-lang/rust/pull/57106/
[56470]: https://github.com/rust-lang/rust/pull/56470/
[cargo/6654]: https://github.com/rust-lang/cargo/pull/6654/
[Any::type_id]: https://doc.rust-lang.org/std/any/trait.Any.html#tymethod.type_id
[Error::type_id]: https://doc.rust-lang.org/std/error/trait.Error.html#method.type_id
[atomic::AtomicI16]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI16.html
[atomic::AtomicI32]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI32.html
[atomic::AtomicI64]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI64.html
[atomic::AtomicI8]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI8.html
[atomic::AtomicU16]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU16.html
[atomic::AtomicU32]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU32.html
[atomic::AtomicU64]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU64.html
[atomic::AtomicU8]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html
[convert::Infallible]: https://doc.rust-lang.org/std/convert/enum.Infallible.html
[convert::TryFrom]: https://doc.rust-lang.org/std/convert/trait.TryFrom.html
[convert::TryInto]: https://doc.rust-lang.org/std/convert/trait.TryInto.html
[iter::from_fn]: https://doc.rust-lang.org/std/iter/fn.from_fn.html
[iter::successors]: https://doc.rust-lang.org/std/iter/fn.successors.html
[num::NonZeroI128]: https://doc.rust-lang.org/std/num/struct.NonZeroI128.html
[num::NonZeroI16]: https://doc.rust-lang.org/std/num/struct.NonZeroI16.html
[num::NonZeroI32]: https://doc.rust-lang.org/std/num/struct.NonZeroI32.html
[num::NonZeroI64]: https://doc.rust-lang.org/std/num/struct.NonZeroI64.html
[num::NonZeroI8]: https://doc.rust-lang.org/std/num/struct.NonZeroI8.html
[num::NonZeroIsize]: https://doc.rust-lang.org/std/num/struct.NonZeroIsize.html
[slice::sort_by_cached_key]: https://doc.rust-lang.org/std/primitive.slice.html#method.sort_by_cached_key
[str::escape_debug]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_debug
[str::escape_default]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_default
[str::escape_unicode]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_unicode
[str::split_ascii_whitespace]: https://doc.rust-lang.org/std/primitive.str.html#method.split_ascii_whitespace
[Instant::checked_add]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.checked_add
[Instant::checked_sub]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.checked_sub
[SystemTime::checked_add]: https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.checked_add
[SystemTime::checked_sub]: https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.checked_sub