| Version | Change log |
| Rust 1.94.0 Mar 6, 2026 |
Language: Impls and impl items inherit dead_code lint level of the corresponding traits and trait items Stabilize additional 29 RISC-V target features including large portions of the RVA22U64 / RVA23U64 profiles Add warn-by-default unused_visibilities lint for visibility on const _ declarations Update to Unicode 17 Avoid incorrect lifetime errors for closures Platform Support: Add riscv64im-unknown-none-elf as a tier 3 target Refer to Rust's platform support page for more information on Rust's tiered platform support. Libraries: Relax T: Ord bound for some BinaryHeap<T> methods. Stabilized APIs: <[T]>::array_windows <[T]>::element_offset LazyCell::get LazyCell::get_mut LazyCell::force_mut LazyLock::get LazyLock::get_mut LazyLock::force_mut impl TryFrom<char> for usize std::iter::Peekable::next_if_map std::iter::Peekable::next_if_map_mut x86 avx512fp16 intrinsics (excluding those that depend directly on the unstable f16 type) AArch64 NEON fp16 intrinsics (excluding those that depend directly on the unstable f16 type) f32::consts::EULER_GAMMA f64::consts::EULER_GAMMA f32::consts::GOLDEN_RATIO f64::consts::GOLDEN_RATIO These previously stable APIs are now stable in const contexts: f32::mul_add f64::mul_add Cargo: Stabilize the config include key. The top-level include config key allows loading additional config files, enabling better organization, sharing, and management of Cargo configurations across projects and environments. docs #16284 Stabilize the pubtime field in registry index. This records when a crate version was published and enables time-based dependency resolution in the future. Note that crates.io will gradually backfill existing packages when a new version is published. Not all crates have pubtime yet. #16369 #16372 Cargo now parses TOML v1.1 for manifests and configuration files. Note that using these features in Cargo.toml will raise your development MSRV, but the published manifest remains compatible with older parsers. #16415 |
| Rust 1.93.1 Feb 13, 2026 |
Don't try to recover keyword as non-keyword identifier, fixing an ICE that especially affected rustfmt. Fix clippy::panicking_unwrap false-positive on field access with implicit deref. Revert "Update wasm-related dependencies in CI", fixing file descriptor leaks on the wasm32-wasip2 target. |
| Rust 1.93.0 Jan 22, 2026 |
Language: Stabilize several s390x vector-related target features and the is_s390x_feature_detected! macro Stabilize declaration of C-style variadic functions for the system ABI Emit error when using some keyword as a cfg predicate 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 const items that contain mutable references to static (which is very unsafe, but not always UB) Add warn-by-default const_item_interior_mutations lint to warn against calls which mutate interior mutable const items Add warn-by-default function_casts_as_integer lint Compiler: Stabilize -Cjump-tables=bool. The flag was previously called -Zno-jump-tables. Platform Support: Promote riscv64a23-unknown-linux-gnu to Tier 2 (without host tools) Refer to Rust's platform support page for more information on Rust's tiered platform support. Libraries: Stop internally using specialization on the Copy trait as it is unsound in the presence of lifetime dependent Copy implementations. This may result in some performance regressions as some standard library APIs may now call Clone::clone instead of performing bitwise copies Allow the global allocator to use thread-local storage and std::thread::current() Make BTree::append not update existing keys when appending an entry which already exists Don't require T: RefUnwindSafe for vec::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_array_mut <*const [T]>::as_array <*mut [T |
| Rust 1.92.0 Dec 15, 2025 |
Enable file locking support in illumos. This fixes Cargo not locking the build directory on illumos. Fix wasm_import_module attribute cross-crate. This fixes linker errors on WASM targets. |
| Rust 1.91.1 Nov 10, 2025 |
Enable file locking support in illumos. This fixes Cargo not locking the build directory on illumos. Fix wasm_import_module attribute cross-crate. This fixes linker errors on WASM targets. |
| Rust 1.91.0 Oct 30, 2025 |
Language: Lower pattern bindings in the order they're written and base drop order on primary bindings' order Stabilize declaration of C-style variadic functions for sysv64, win64, efiapi, and aapcs ABIs. This brings these ABIs in line with the C ABI: variadic functions can be declared in extern blocks but not defined. Add dangling_pointers_from_locals lint to warn against dangling pointers from local variables Upgrade semicolon_in_expressions_from_macros from warn to deny Stabilize LoongArch32 inline assembly Add warn-by-default integer_to_ptr_transmutes lint against integer-to-pointer transmutes Stabilize sse4a and tbm target features Add target_env = "macabi" and target_env = "sim" cfgs as replacements for the target_abi cfgs with the same values. Compiler: Don't warn on never-to-any as casts as unreachable Platform Support: Promote aarch64-pc-windows-gnullvm and x86_64-pc-windows-gnullvm to Tier 2 with host tools. Note: llvm-tools and MSI installers are missing but will be added in future releases. Promote aarch64-pc-windows-msvc to Tier 1 Refer to Rust's platform support page for more information on Rust's tiered platform support. Libraries: Print thread ID in panic message Fix overly restrictive lifetime in core::panic::Location::file return type Guarantee parameter order for _by() variants of min / max/ minmax in std::cmp Document assumptions about Clone and Eq traits std::thread: Return error if setting thread stack size fails This used to panic within the standard library. Stabilized APIs: Path::file_prefix AtomicPtr::fetch_ptr_add AtomicPtr::fetch_ptr_sub AtomicPtr::fetch_byte_add AtomicPtr::fetch_byte_sub AtomicPtr::fetch_or AtomicPtr::fetch_and AtomicPtr::fetch_xor {integer}::strict_add {integer}::strict_sub {integer}::strict_mul {integer}::strict_div {integer}::strict_div_euclid {integer}::strict_rem {integer}::strict_rem_euclid {integer}::strict_neg {integer}::strict_shl {integer}::strict_shr {integer}::strict_pow i{N}::strict_add_un |
| Rust 1.90.0 Oct 9, 2025 |
Language: Stabilize explicitly inferred const arguments (feature(generic_arg_infer)) Add a warn-by-default mismatched_lifetime_syntaxes lint. This lint detects when the same lifetime is referred to by different syntax categories between function arguments and return values, which can be confusing to read, especially in unsafe code. This lint supersedes the warn-by-default elided_named_lifetimes lint. Expand unpredictable_function_pointer_comparisons to also lint on function pointer comparisons in external macros Make the dangerous_implicit_autorefs lint deny-by-default Stabilize the avx512 target features Stabilize kl and widekl target features for x86 Stabilize sha512, sm3 and sm4 target features for x86 Stabilize LoongArch target features f, d, frecipe, lasx, lbt, lsx, and lvz Remove i128 and u128 from improper_ctypes_definitions Stabilize repr128 (#[repr(u128)], #[repr(i128)]) Allow #![doc(test(attr(..)))] everywhere Extend temporary lifetime extension to also go through tuple struct and tuple variant constructors extern "C" functions on the wasm32-unknown-unknown target now have a standards compliant ABI Compiler: Default to non-leaf frame pointers on aarch64-linux Enable non-leaf frame pointers for Arm64EC Windows Set Apple frame pointers by architecture Platform Support: Add new Tier-3 targets loongarch32-unknown-none and loongarch32-unknown-none-softfloat x86_64-apple-darwin is in the process of being demoted to Tier 2 with host tools Libraries: Specify the base path for file! Allow storing format_args!() in a variable Add #[must_use] to [T; N]::map Implement DerefMut for Lazy{Cell,Lock} Implement Default for array::IntoIter Implement Clone for slice::ChunkBy Implement io::Seek for io::Take Stabilized APIs: NonZero<char> Many intrinsics for x86, not enumerated here AVX512 intrinsics SHA512, SM3 and SM4 intrinsics File::lock File::lock_shared File::try_lock File::try_lock_shared File::unlock NonNull::from_ref NonNull::from_mut NonNull::without_ |
| Rust 1.88.0 Jun 27, 2025 |
Language: Stabilize #![feature(let_chains)] in the 2024 edition. This feature allows &&-chaining let statements inside if and while, allowing intermixture with boolean expressions. The patterns inside the let sub-expressions can be irrefutable or refutable. Stabilize #![feature(naked_functions)]. Naked functions allow writing functions with no compiler-generated epilogue and prologue, allowing full control over the generated assembly for a particular function. Stabilize #![feature(cfg_boolean_literals)]. This allows using boolean literals as cfg predicates, e.g. #[cfg(true)] and #[cfg(false)]. Fully de-stabilize the #[bench] attribute. Usage of #[bench] without #![feature(custom_test_frameworks)] already triggered a deny-by-default future-incompatibility lint since Rust 1.77, but will now become a hard error. Add warn-by-default dangerous_implicit_autorefs lint against implicit autoref of raw pointer dereference. The lint will be bumped to deny-by-default in the next version of Rust. Add invalid_null_arguments lint to prevent invalid usage of null pointers. This lint is uplifted from clippy::invalid_null_ptr_usage. Change trait impl candidate preference for builtin impls and trivial where-clauses. Check types of generic const parameter defaults Compiler: Stabilize -Cdwarf-version for selecting the version of DWARF debug information to generate. Platform Support: Demote i686-pc-windows-gnu to Tier 2. Refer to Rust's platform support page for more information on Rust's tiered platform support. Libraries: Remove backticks from #[should_panic] test failure message. Guarantee that [T; N]::from_fn is generated in order of increasing indices., for those passing it a stateful closure. The libtest flag --nocapture is deprecated in favor of the more consistent --no-capture flag. Guarantee that {float}::NAN is a quiet NaN. Stabilized APIs: Cell::update impl Default for *const T impl Default for *mut T HashMap::extract_if HashSet::extract_if proc_macro::Span::line proc_macro::S |
| Rust 1.87.0 May 15, 2025 |
Language: Stabilize asm_goto feature Allow parsing open beginning ranges (..EXPR) after unary operators !, -, and *. Don't require method impls for methods with Self: Sized bounds in impls for unsized types Stabilize feature(precise_capturing_in_traits) allowing use<...> bounds on return position impl Trait in traits Compiler: x86: make SSE2 required for i686 targets and use it to pass SIMD types Platform Support: Remove i586-pc-windows-msvc target Refer to Rust's platform support page for more information on Rust's tiered platform support. Libraries: Stabilize the anonymous pipe API Add support for unbounded left/right shift operations Print pointer metadata in Debug impl of raw pointers Vec::with_capacity guarantees it allocates with the amount requested, even if Vec::capacity returns a different number. Most std::arch intrinsics which don't take pointer arguments can now be called from safe code if the caller has the appropriate target features already enabled (rust-lang/stdarch#1714, rust-lang/stdarch#1716, rust-lang/stdarch#1717) Undeprecate env::home_dir Denote ControlFlow as #[must_use] Macros such as assert_eq! and vec! now support const {...} expressions Stabilized APIs: Vec::extract_if vec::ExtractIf LinkedList::extract_if linked_list::ExtractIf <[T]>::split_off <[T]>::split_off_mut <[T]>::split_off_first <[T]>::split_off_first_mut <[T]>::split_off_last <[T]>::split_off_last_mut String::extend_from_within os_str::Display OsString::display OsStr::display io::pipe io::PipeReader io::PipeWriter impl From<PipeReader> for OwnedHandle impl From<PipeWriter> for OwnedHandle impl From<PipeReader> for Stdio impl From<PipeWriter> for Stdio impl From<PipeReader> for OwnedFd impl From<PipeWriter> for OwnedFd Box<MaybeUninit<T>>::write impl TryFrom<Vec<u8>> for String <*const T>::offset_from_unsigned <*const T>::byte_offset_from_unsigned <*mut T>::offs |
| Rust 1.86.0 Apr 13, 2025 |
Language: Stabilize upcasting trait objects to supertraits. Allow safe functions to be marked with the #[target_feature] attribute. The missing_abi lint now warns-by-default. Rust now lints about double negations, to catch cases that might have intended to be a prefix decrement operator (--x) as written in other languages. This was previously a clippy lint, clippy::double_neg, and is now available directly in Rust as double_negations. More pointers are now detected as definitely not-null based on their alignment in const eval. Empty repr() attribute applied to invalid items are now correctly rejected. Inner attributes #![test] and #![rustfmt::skip] are no longer accepted in more places than intended. Compiler: Debug-assert that raw pointers are non-null on access. Change -O to mean -C opt-level=3 instead of -C opt-level=2 to match Cargo's defaults. Fix emission of overflowing_literals under certain macro environments. Platform Support: Replace i686-unknown-redox target with i586-unknown-redox. Increase baseline CPU of i686-unknown-hurd-gnu to Pentium 4. New tier 3 targets: {aarch64-unknown,x86_64-pc}-nto-qnx710_iosock. For supporting Neutrino QNX 7.1 with io-socket network stack. {aarch64-unknown,x86_64-pc}-nto-qnx800. For supporting Neutrino QNX 8.0 (no_std-only). {x86_64,i686}-win7-windows-gnu. Intended for backwards compatibility with Windows 7. {x86_64,i686}-win7-windows-msvc are the Windows MSVC counterparts that already exist as Tier 3 targets. amdgcn-amd-amdhsa. x86_64-pc-cygwin. {mips,mipsel}-mti-none-elf. Initial bare-metal support. m68k-unknown-none-elf. armv7a-nuttx-{eabi,eabihf}, aarch64-unknown-nuttx, and thumbv7a-nuttx-{eabi,eabihf}. Refer to Rust's platform support page for more information on Rust's tiered platform support. Libraries: The type of FromBytesWithNulError in CStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError> was changed from an opaque struct to an enum, allowing users to examine why the conversion fa |