Update Jan 22, 2026 tracked by Updatify
Rust 1.93.0
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_slice -
String::into_raw_parts -
Vec::into_raw_parts -
<iN>::unchecked_neg -
<iN>::unchecked_shl -
<iN>::unchecked_shr -
<uN>::unchecked_shl -
<uN>::unchecked_shr -
<[T]>::as_array -
<[T]>::as_mut_array -
<*const [T]>::as_array -
<*mut [T]>::as_mut_array -
VecDeque::pop_front_if -
VecDeque::pop_back_if -
Duration::from_nanos_u128 -
char::MAX_LEN_UTF8 -
char::MAX_LEN_UTF16 -
std::fmt::from_fn -
std::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)