Update Sep 10, 2020 tracked by Updatify
Rust 1.46.0
Language
-
if,match, andloopexpressions can now be used in const functions. -
Additionally you are now also able to coerce and cast to slices (
&[T]) in const functions. -
The
#[track_caller]attribute can now be added to functions to use the function’s caller’s location information for panic messages. -
Recursively indexing into tuples no longer needs parentheses. E.g.
x.0.0over(x.0).0. -
mem::transmutecan now be used in statics and constants. Note You currently can’t usemem::transmutein constant functions.
Compiler
-
You can now use the
cdylibtarget on Apple iOS and tvOS platforms. -
Enabled static “Position Independent Executables” by default for
x86_64-unknown-linux-musl.
Libraries
-
mem::forgetis now aconst fn. -
Stringnow implementsFrom<char>. -
The
leading_ones, andtrailing_onesmethods have been stabilised for all integer types. -
vec::IntoIter<T>now implementsAsRef<[T]>. -
All non-zero integer types (
NonZeroU8) now implementTryFromfor their zero-able equivalent (e.g.TryFrom<u8>). -
&[T]and&mut [T]now implementPartialEq<Vec<T>>. -
(String, u16)now implementsToSocketAddrs. -
vec::Drain<'_, T>now implementsAsRef<[T]>.
Stabilized APIs
Cargo
Added a number of new environment variables that are now available when compiling your crate.
-
CARGO_BIN_NAMEandCARGO_CRATE_NAMEProviding the name of the specific binary being compiled and the name of the crate. -
CARGO_PKG_LICENSEThe license from the manifest of the package. -
CARGO_PKG_LICENSE_FILEThe path to the license file.
Compatibility Notes
-
The target configuration option
abi_blacklisthas been renamed tounsupported_abis. The old name will still continue to work. -
Rustc will now warn if you cast a C-like enum that implements
Drop. This was previously accepted but will become a hard error in a future release. -
Rustc will fail to compile if you have a struct with
#[repr(i128)]or#[repr(u128)]. This representation is currently only allowed onenums. -
Tokens passed to
macro_rules!are now always captured. This helps ensure that spans have the correct information, and may cause breakage if you were relying on receiving spans with dummy information. - The InnoSetup installer for Windows is no longer available. This was a legacy installer that was replaced by a MSI installer a few years ago but was still being built.
-
{f32, f64}::asinhnow returns the correct values for negative numbers. - Rustc will no longer accept overlapping trait implementations that only differ in how the lifetime was bound.
-
Rustc now correctly relates the lifetime of an existential associated type. This fixes some edge cases where
rustcwould erroneously allow you to pass a shorter lifetime than expected. -
Rustc now dynamically links to
libz(also calledzlib) on Linux. The library will need to be installed forrustcto work, even though we expect it to be already available on most systems. -
Tests annotated with
#[should_panic]are broken on ARMv7 while running under QEMU. - Pretty printing of some tokens in procedural macros changed. The exact output returned by rustc’s pretty printing is an unstable implementation detail: we recommend any macro relying on it to switch to a more robust parsing system.