Update Nov 28, 2024 tracked by Updatify
Rust 1.83.0
Language
-
Stabilize
&mut,*mut,&Cell, and*const Cellin const. -
Allow creating references to statics in
constinitializers. -
Implement raw lifetimes and labels (
'r#ident). - Define behavior when atomic and non-atomic reads race.
- Non-exhaustive structs may now be empty.
-
Disallow implicit coercions from places of type
! -
const externfunctions can now be defined for other calling conventions. -
Stabilize
expr_2021macro fragment specifier in all editions. -
The
non_local_definitionslint now fires on less code and warns by default.
Compiler
-
Deprecate unsound
-Csoft-floatflag. - Add many new tier 3 targets:
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries
-
Implement
PartialEqforExitCode. -
Document that
catch_unwindcan deal with foreign exceptions without UB, although the exact behavior is unspecified. -
Implement
DefaultforHashMap/HashSetiterators that don’t already have it. - Bump Unicode to version 16.0.0.
-
Change documentation of
ptr::add/subto not claim equivalence withoffset.
Stabilized APIs
-
BufRead::skip_until -
ControlFlow::break_value -
ControlFlow::continue_value -
ControlFlow::map_break -
ControlFlow::map_continue -
DebugList::finish_non_exhaustive -
DebugMap::finish_non_exhaustive -
DebugSet::finish_non_exhaustive -
DebugTuple::finish_non_exhaustive -
ErrorKind::ArgumentListTooLong -
ErrorKind::Deadlock -
ErrorKind::DirectoryNotEmpty -
ErrorKind::ExecutableFileBusy -
ErrorKind::FileTooLarge -
ErrorKind::HostUnreachable -
ErrorKind::IsADirectory -
ErrorKind::NetworkDown -
ErrorKind::NetworkUnreachable -
ErrorKind::NotADirectory -
ErrorKind::NotSeekable -
ErrorKind::ReadOnlyFilesystem -
ErrorKind::ResourceBusy -
ErrorKind::StaleNetworkFileHandle -
ErrorKind::StorageFull -
ErrorKind::TooManyLinks -
Option::get_or_insert_default -
Waker::data -
Waker::new -
Waker::vtable -
char::MIN -
hash_map::Entry::insert_entry -
hash_map::VacantEntry::insert_entry
These APIs are now stable in const contexts:
-
Cell::into_inner -
Duration::as_secs_f32 -
Duration::as_secs_f64 -
Duration::div_duration_f32 -
Duration::div_duration_f64 -
MaybeUninit::as_mut_ptr -
NonNull::as_mut -
NonNull::copy_from -
NonNull::copy_from_nonoverlapping -
NonNull::copy_to -
NonNull::copy_to_nonoverlapping -
NonNull::slice_from_raw_parts -
NonNull::write -
NonNull::write_bytes -
NonNull::write_unaligned -
OnceCell::into_inner -
Option::as_mut -
Option::expect -
Option::replace -
Option::take -
Option::unwrap -
Option::unwrap_unchecked -
Option::<&_>::copied -
Option::<&mut _>::copied -
Option::<Option<_>>::flatten -
Option::<Result<_, _>>::transpose -
RefCell::into_inner -
Result::as_mut -
Result::<&_, _>::copied -
Result::<&mut _, _>::copied -
Result::<Option<_>, _>::transpose -
UnsafeCell::get_mut -
UnsafeCell::into_inner -
array::from_mut -
char::encode_utf8 -
{float}::classify -
{float}::is_finite -
{float}::is_infinite -
{float}::is_nan -
{float}::is_normal -
{float}::is_sign_negative -
{float}::is_sign_positive -
{float}::is_subnormal -
{float}::from_bits -
{float}::from_be_bytes -
{float}::from_le_bytes -
{float}::from_ne_bytes -
{float}::to_bits -
{float}::to_be_bytes -
{float}::to_le_bytes -
{float}::to_ne_bytes -
mem::replace -
ptr::replace -
ptr::slice_from_raw_parts_mut -
ptr::write -
ptr::write_unaligned -
<*const _>::copy_to -
<*const _>::copy_to_nonoverlapping -
<*mut _>::copy_from -
<*mut _>::copy_from_nonoverlapping -
<*mut _>::copy_to -
<*mut _>::copy_to_nonoverlapping -
<*mut _>::write -
<*mut _>::write_bytes -
<*mut _>::write_unaligned -
slice::from_mut -
slice::from_raw_parts_mut -
<[_]>::first_mut -
<[_]>::last_mut -
<[_]>::first_chunk_mut -
<[_]>::last_chunk_mut -
<[_]>::split_at_mut -
<[_]>::split_at_mut_checked -
<[_]>::split_at_mut_unchecked -
<[_]>::split_first_mut -
<[_]>::split_last_mut -
<[_]>::split_first_chunk_mut -
<[_]>::split_last_chunk_mut -
str::as_bytes_mut -
str::as_mut_ptr -
str::from_utf8_unchecked_mut
Cargo
-
Introduced a new
CARGO_MANIFEST_PATHenvironment variable, similar toCARGO_MANIFEST_DIRbut pointing directly to the manifest file. -
Added
package.autolibto the manifest, allowing[lib]auto-discovery to be disabled. - Declare support level for each crate in Cargo’s Charter / crate docs.
- Declare new Intentional Artifacts as ‘small’ changes.
Rustdoc
-
The sidebar / hamburger menu table of contents now includes the
# headersfrom the main item’s doc comment. This is similar to a third-party feature provided by the rustdoc-search-enhancements browser extension.
Compatibility Notes
-
Warn against function pointers using unsupported ABI strings.
-
Check well-formedness of the source type’s signature in fn pointer casts. This partly closes a soundness hole that comes when casting a function item to function pointer
-
Use equality instead of subtyping when resolving type dependent paths.
-
Linking on macOS now correctly includes Rust’s default deployment target. Due to a linker bug, you might have to pass
MACOSX_DEPLOYMENT_TARGETor fix your#[link]attributes to point to the correct frameworks. See https://github.com/rust-lang/rust/pull/129369. -
The future incompatibility lint
deprecated_cfg_attr_crate_type_namehas been made into a hard error. It was used to deny usage of#![crate_type]and#![crate_name]attributes in#![cfg_attr], which required a hack in the compiler to be able to change the used crate type and crate name after cfg expansion. Users can use--crate-typeinstead of#![cfg_attr(..., crate_type = "...")]and--crate-nameinstead of#![cfg_attr(..., crate_name = "...")]when runningrustc/cargo rustcon the command line. Use of those two attributes outside of#![cfg_attr]continue to be fully supported. -
Until now, paths into the sysroot were always prefixed with
/rustc/$hashin diagnostics, codegen, backtrace, e.g.thread 'main' panicked at 'hello world', map-panic.rs:2:50 stack backtrace: 0: std::panicking::begin_panic at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:616:12 1: map_panic::main::{{closure}} at ./map-panic.rs:2:50 2: core::option::Option<T>::map at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/option.rs:929:29 3: map_panic::main at ./map-panic.rs:2:30 4: core::ops::function::FnOnce::call_once at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:248:5 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.We want to change this behaviour such that, when
rust-srcsource files can be discovered, the virtual path is discarded and therefore the local path will be embedded, unless there is a--remap-path-prefixthat causes this local path to be remapped in the usual way.#129687 implements this behaviour, when
rust-srcis present at compile time,rustcreplaces/rustc/$hashwith a real path into the localrust-srccomponent with best effort. To sanitize this, users must explicitly supply--remap-path-prefix=<path to rust-src>=fooor not have therust-srccomponent installed. -
The allow-by-default
missing_docslint used to disable itself when invoked throughrustc --test/cargo test, resulting in#[expect(missing_docs)]emitting false positives due to the expectation being wrongly unfulfilled. This behavior has now been removed, which allows#[expect(missing_docs)]to be fulfilled in all scenarios, but will also report newmissing_docsdiagnostics for publicly reachable#[cfg(test)]items, integration test crate-level documentation, and publicly reachable items in integration tests. -
The
armv8r-none-eabihftarget now uses the Armv8-R required set of floating-point features. -
The sysroot no longer contains the
stddynamic library in its top-levellib/dir.