Rust 1.51.0
Released on March 25, 2021
What's Changed
- [You can now parameterize items such as functions, traits, and
structs by constant
- [Added the
-Csplit-debuginfocodegen option for macOS platforms.][79570] - [Added tier 3\* support for
aarch64_be-unknown-linux-gnu, - [Added tier 3 support for
i386-unknown-linux-gnuandi486-unknown-linux-gnutargets.][80662] - [The
target-cpu=nativeoption will now detect individual features of CPUs.][80749]
- [
Box::downcastis now also implemented for anydyn Any + Send + Syncobject.][80945] - [
strnow implementsAsMut.][80279] - [
u64andu128now implementFrom.][79502] - [
Erroris now implemented for&TwhereTimplementsError.][75180] - [
Poll::{map_ok, map_err}are now implemented forPoll.][80968] - [
unsigned_absis now implemented for all signed integer types.][80959] - [
io::Emptynow implementsio::Seek.][78044] - [
rc::Weakandsync::Weak's methods such asas_ptrare now implemented for - [
DivandRemby theirNonZerovariant is now implemented for all unsigned integers.][79134] - [
Arc::decrement_strong_count] - [
Arc::increment_strong_count] - [
Once::call_once_force] - [
Peekable::next_if_eq] - [
Peekable::next_if] - [
Seek::stream_position] - [
array::IntoIter] - [
panic::panic_any] - [
ptr::addr_of!] - [
ptr::addr_of_mut!] - [
slice::fill_with] - [
slice::split_inclusive_mut] - [
slice::split_inclusive] - [
slice::strip_prefix] - [
slice::strip_suffix] - [
str::split_inclusive] - [
sync::OnceState] - [
task::Wake] - [
VecDeque::range] - [
VecDeque::range_mut]
- [Added the
split-debuginfoprofile option to control the -Csplit-debuginfo - [Added the
resolverfield toCargo.tomlto enable the new feature resolver
- [WASI platforms no longer use the
wasm-bindgenABI, and instead use the wasm32 ABI.][79998] - [
rustcno longer promotes division, modulo and indexing operations toconstthat - [The minimum version of glibc for the following platforms has been bumped to version 2.31
armv5te-unknown-linux-gnueabisparc64-unknown-linux-gnuthumbv7neon-unknown-linux-gnueabihfarmv7-unknown-linux-gnueabix86_64-unknown-linux-gnux32- [
atomic::spin_loop_hinthas been deprecated.][80966] It's recommended to usehint::spin_loopinstead.
- [Rustdoc will now include documentation for methods available from _nested_
Dereftraits.][80653] - [You can now provide a
--default-themeflag which sets the default theme to use for - [You can link to non-path primitives such as
slice.][80181] - [You can link to associated items.][74489]
- [You can now include generic parameters when linking to items, like
Vec.][76934] - [You can now pass
--include-ignoredto tests (e.g. with - [Consistently avoid constructing optimized MIR when not doing codegen][80718]
Full Changelog
Language
--------
- [You can now parameterize items such as functions, traits, and structs by constant
values in addition to by types and lifetimes.][79135] Also known as "const generics"
E.g. you can now write the following. Note: Only values of primitive integers,
bool, or char types are currently permitted.
struct GenericArray {
inner: [T; LENGTH]
}
impl GenericArray {
const fn last(&self) -> Option<&T> {
if LENGTH == 0 {
None
} else {
Some(&self.inner[LENGTH - 1])
}
}
}
Compiler
--------
- [Added the -Csplit-debuginfo codegen option for macOS platforms.][79570]
This option controls whether debug information is split across multiple files
or packed into a single file. Note This option is unstable on other platforms.
- [Added tier 3\* support for aarch64_be-unknown-linux-gnu,
aarch64-unknown-linux-gnu_ilp32, and aarch64_be-unknown-linux-gnu_ilp32 targets.][81455]
- [Added tier 3 support for i386-unknown-linux-gnu and i486-unknown-linux-gnu targets.][80662]
- [The target-cpu=native option will now detect individual features of CPUs.][80749]
\* Refer to Rust's [platform support page][platform-support-doc] for more
information on Rust's tiered platform support.
Libraries
---------
- [Box::downcast is now also implemented for any dyn Any + Send + Sync object.][80945]
- [str now implements AsMut.][80279]
- [u64 and u128 now implement From.][79502]
- [Error is now implemented for &T where T implements Error.][75180]
- [Poll::{map_ok, map_err} are now implemented for Poll.][80968]
- [unsigned_abs is now implemented for all signed integer types.][80959]
- [io::Empty now implements io::Seek.][78044]
- [rc::Weak and sync::Weak's methods such as as_ptr are now implemented for
T: ?Sized types.][80764]
- [Div and Rem by their NonZero variant is now implemented for all unsigned integers.][79134]
Stabilized APIs
---------------
- [Arc::decrement_strong_count]
- [Arc::increment_strong_count]
- [Once::call_once_force]
- [Peekable::next_if_eq]
- [Peekable::next_if]
- [Seek::stream_position]
- [array::IntoIter]
- [panic::panic_any]
- [ptr::addr_of!]
- [ptr::addr_of_mut!]
- [slice::fill_with]
- [slice::split_inclusive_mut]
- [slice::split_inclusive]
- [slice::strip_prefix]
- [slice::strip_suffix]
- [str::split_inclusive]
- [sync::OnceState]
- [task::Wake]
- [VecDeque::range]
- [VecDeque::range_mut]
Cargo
-----
- [Added the split-debuginfo profile option to control the -Csplit-debuginfo
codegen option.][cargo/9112]
- [Added the resolver field to Cargo.toml to enable the new feature resolver
and CLI option behavior.][cargo/8997] Version 2 of the feature resolver will try
to avoid unifying features of dependencies where that unification could be unwanted.
Such as using the same dependency with a std feature in a build scripts and
proc-macros, while using the no-std feature in the final binary. See the
[Cargo book documentation][feature-resolver@2.0] for more information on the feature.
Rustdoc
-------
- [Rustdoc will now include documentation for methods available from _nested_ Deref traits.][80653]
- [You can now provide a --default-theme flag which sets the default theme to use for
documentation.][79642]
Various improvements to intra-doc links:
- [You can link to non-path primitives such as slice.][80181]
- [You can link to associated items.][74489]
- [You can now include generic parameters when linking to items, like Vec.][76934]
Misc
----
- [You can now pass --include-ignored to tests (e.g. with
cargo test -- --include-ignored) to include testing tests marked #[ignore].][80053]
Compatibility Notes
-------------------
- [WASI platforms no longer use the wasm-bindgen ABI, and instead use the wasm32 ABI.][79998]
- [rustc no longer promotes division, modulo and indexing operations to const that
could fail.][80579]
- [The minimum version of glibc for the following platforms has been bumped to version 2.31
for the distributed artifacts.][81521]
- armv5te-unknown-linux-gnueabi
- sparc64-unknown-linux-gnu
- thumbv7neon-unknown-linux-gnueabihf
- armv7-unknown-linux-gnueabi
- x86_64-unknown-linux-gnux32
- [atomic::spin_loop_hint has been deprecated.][80966] It's recommended to use hint::spin_loop instead.
Internal Only
-------------
- [Consistently avoid constructing optimized MIR when not doing codegen][80718]
[79135]: https://github.com/rust-lang/rust/pull/79135
[74489]: https://github.com/rust-lang/rust/pull/74489
[76934]: https://github.com/rust-lang/rust/pull/76934
[79570]: https://github.com/rust-lang/rust/pull/79570
[80181]: https://github.com/rust-lang/rust/pull/80181
[79642]: https://github.com/rust-lang/rust/pull/79642
[80945]: https://github.com/rust-lang/rust/pull/80945
[80279]: https://github.com/rust-lang/rust/pull/80279
[80053]: https://github.com/rust-lang/rust/pull/80053
[79502]: https://github.com/rust-lang/rust/pull/79502
[75180]: https://github.com/rust-lang/rust/pull/75180
[81521]: https://github.com/rust-lang/rust/pull/81521
[80968]: https://github.com/rust-lang/rust/pull/80968
[80959]: https://github.com/rust-lang/rust/pull/80959
[80718]: https://github.com/rust-lang/rust/pull/80718
[80653]: https://github.com/rust-lang/rust/pull/80653
[80579]: https://github.com/rust-lang/rust/pull/80579
[79998]: https://github.com/rust-lang/rust/pull/79998
[78044]: https://github.com/rust-lang/rust/pull/78044
[81455]: https://github.com/rust-lang/rust/pull/81455
[80764]: https://github.com/rust-lang/rust/pull/80764
[80749]: https://github.com/rust-lang/rust/pull/80749
[80662]: https://github.com/rust-lang/rust/pull/80662
[79134]: https://github.com/rust-lang/rust/pull/79134
[80966]: https://github.com/rust-lang/rust/pull/80966
[cargo/8997]: https://github.com/rust-lang/cargo/pull/8997
[cargo/9112]: https://github.com/rust-lang/cargo/pull/9112
[feature-resolver@2.0]: https://doc.rust-lang.org/nightly/cargo/reference/features.html#feature-resolver-version-2
[Once::call_once_force]: https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.call_once_force
[sync::OnceState]: https://doc.rust-lang.org/stable/std/sync/struct.OnceState.html
[panic::panic_any]: https://doc.rust-lang.org/stable/std/panic/fn.panic_any.html
[slice::strip_prefix]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_prefix
[slice::strip_suffix]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_suffix
[Arc::increment_strong_count]: https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.increment_strong_count
[Arc::decrement_strong_count]: https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.decrement_strong_count
[slice::fill_with]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.fill_with
[ptr::addr_of!]: https://doc.rust-lang.org/nightly/std/ptr/macro.addr_of.html
[ptr::addr_of_mut!]: https://doc.rust-lang.org/nightly/std/ptr/macro.addr_of_mut.html
[array::IntoIter]: https://doc.rust-lang.org/nightly/std/array/struct.IntoIter.html
[slice::split_inclusive]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_inclusive
[slice::split_inclusive_mut]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_inclusive_mut
[str::split_inclusive]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_inclusive
[task::Wake]: https://doc.rust-lang.org/nightly/std/task/trait.Wake.html
[Seek::stream_position]: https://doc.rust-lang.org/nightly/std/io/trait.Seek.html#method.stream_position
[Peekable::next_if]: https://doc.rust-lang.org/nightly/std/iter/struct.Peekable.html#method.next_if
[Peekable::next_if_eq]: https://doc.rust-lang.org/nightly/std/iter/struct.Peekable.html#method.next_if_eq
[VecDeque::range]: https://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.range
[VecDeque::range_mut]: https://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.range_mut