Language
- Stabilize several s390x
vector-related target features and theis_s390x_feature_detected!macro - Stabilize declaration of C-style variadic functions for the
systemABI - Emit error when using some keyword as a
cfgpredicate - Stabilize
asm_cfg - During const-evaluation, support copying pointers byte-by-byte
- LUB coercions now correctly handle function item types, and functions with differing safeties
- Allow
constitems that contain mutable references tostatic(which is very unsafe, but not always UB) - Add warn-by-default
const_item_interior_mutationslint to warn against calls which mutate interior mutableconstitems - Add warn-by-default
function_casts_as_integerlint
Compiler
- Stabilize
-Cjump-tables=bool. The flag was previously called-Zno-jump-tables.
Platform Support
Refer to Rust's platform support page for more information on Rust's tiered platform support.
Libraries
- Stop internally using
specializationon theCopytrait as it is unsound in the presence of lifetime dependentCopyimplementations. This may result in some performance regressions as some standard library APIs may now callClone::cloneinstead of performing bitwise copies - Allow the global allocator to use thread-local storage and
std::thread::current() - Make
BTree::appendnot update existing keys when appending an entry which already exists - Don't require
T: RefUnwindSafeforvec::IntoIter<T>: UnwindSafe
Stabilized APIs
<[MaybeUninit<T>]>::assume_init_drop<[MaybeUninit<T>]>::assume_init_ref<[MaybeUninit<T>]>::assume_init_mut<[MaybeUninit<T>]>::write_copy_of_slice<[MaybeUninit<T>]>::write_clone_of_sliceString::into_raw_partsVec::into_raw_parts<iN>::unchecked_neg<iN>::unchecked_shl<iN>::unchecked_shr<uN>::unchecked_shl<uN>::unchecked_shr<[T]>::as_array<[T]>::as_array_mut<*const [T]>::as_array<*mut [T]>::as_array_mutVecDeque::pop_front_ifVecDeque::pop_back_ifDuration::from_nanos_u128char::MAX_LEN_UTF8char::MAX_LEN_UTF16std::fmt::from_fnstd::fmt::FromFn
Cargo
- Enable CARGO_CFG_DEBUG_ASSERTIONS in build scripts based on profile
- In
cargo tree, support long forms for--formatvariables - Add
--workspacetocargo clean
Rustdoc
- Remove
#![doc(document_private_items)] - Include attribute and derive macros in search filters for "macros"
- Include extern crates in search filters for
import - Validate usage of crate-level doc attributes. This means if any of
html_favicon_url,html_logo_url,html_playground_url,issue_tracker_base_url, orhtml_no_sourceeither has a missing value, an unexpected value, or a value of the wrong type, rustdoc will emit the deny-by-default lintrustdoc::invalid_doc_attributes.
Compatibility Notes
- Introduce
pin_v2into the builtin attributes namespace - Update bundled musl to 1.2.5
- On Emscripten, the unwinding ABI used when compiling with
panic=unwindwas changed from the JS exception handling ABI to the wasm exception handling ABI. If linking C/C++ object files with Rust objects,-fwasm-exceptionsmust be passed to the linker now. On nightly Rust, it is possible to get the old behavior with-Zwasm-emscripten-eh=false -Zbuild-std, but it will be removed in a future release. - The
#[test]attribute, used to define tests, was previously ignored in various places where it had no meaning (e.g on trait methods or types). Putting the#[test]attribute in these places is no longer ignored, and will now result in an error; this may also result in errors when generating rustdoc. Error whentestattribute is applied to structs - Cargo now sets the
CARGO_CFG_DEBUG_ASSERTIONSenvironment variable in more situations. This will cause crates depending onstatic-initversions 1.0.1 to 1.0.3 to fail compilation with "failed to resolve: use of unresolved module or unlinked crateparking_lot". See the linked issue for details. - User written types in the
offset_of!macro are now checked to be well formed. cargo publishno longer emits.cratefiles as a final artifact for user access when thebuild.build-dirconfig is unset- Upgrade the
deref_nullptrlint from warn-by-default to deny-by-default - Add future-incompatibility warning for
...function parameters without a pattern outside ofexternblocks - Introduce future-compatibility warning for
repr(C)enums whose discriminant values do not fit into ac_intorc_uint - Introduce future-compatibility warning against ignoring
repr(C)types as part ofrepr(transparent)