Version 1.49.0 (2020-12-31)
Language
- Unions can now implement
Drop
, and you can now have a field in a union withManuallyDrop<T>
. - You can now cast uninhabited enums to integers.
- You can now bind by reference and by move in patterns. This
allows you to selectively borrow individual components of a type. E.g.
#![allow(unused)] fn main() { #[derive(Debug)] struct Person { name: String, age: u8, } let person = Person { name: String::from("Alice"), age: 20, }; // `name` is moved out of person, but `age` is referenced. let Person { name, ref age } = person; println!("{} {}", name, age); }
Compiler
- Added tier 1* support for
aarch64-unknown-linux-gnu
. - Added tier 2 support for
aarch64-apple-darwin
. - Added tier 2 support for
aarch64-pc-windows-msvc
. - Added tier 3 support for
mipsel-unknown-none
. - Raised the minimum supported LLVM version to LLVM 9.
- Output from threads spawned in tests is now captured.
- Change os and vendor values to "none" and "unknown" for some targets
* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
Libraries
RangeInclusive
now checks for exhaustion when callingcontains
and indexing.ToString::to_string
now no longer shrinks the internal buffer in the default implementation.
Stabilized APIs
The following previously stable methods are now const
.
Cargo
- Building a crate with
cargo-package
should now be independently reproducible. cargo-tree
now marks proc-macro crates.- Added
CARGO_PRIMARY_PACKAGE
build-time environment variable. This variable will be set if the crate being built is one the user selected to build, either with-p
or through defaults. - You can now use glob patterns when specifying packages & targets.
Compatibility Notes
- Demoted
i686-unknown-freebsd
from host tier 2 to target tier 2 support. - Macros that end with a semi-colon are now treated as statements even if they expand to nothing.
- Rustc will now check for the validity of some built-in attributes on enum variants. Previously such invalid or unused attributes could be ignored.
- Leading whitespace is stripped more uniformly in documentation comments, which may change behavior. You read this post about the changes for more details.
- Trait bounds are no longer inferred for associated types.
Internal Only
These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools.