1.83.0
版本发布时间: 2024-11-28 22:02:00
rust-lang/rust最新发布版本:1.83.0(2024-11-28 22:02:00)
Language
-
Stabilize
&mut
,*mut
,&Cell
, and*const Cell
in const. -
Allow creating references to statics in
const
initializers. -
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 extern
functions can now be defined for other calling conventions. -
Stabilize
expr_2021
macro fragment specifier in all editions. -
The
non_local_definitions
lint now fires on less code and warns by default.
Compiler
-
Deprecate unsound
-Csoft-float
flag. - Add many new tier 3 targets:
Refer to Rust's platform support page for more information on Rust's tiered platform support.
Libraries
-
Implement
PartialEq
forExitCode
. -
Document that
catch_unwind
can deal with foreign exceptions without UB, although the exact behavior is unspecified. -
Implement
Default
forHashMap
/HashSet
iterators that don't already have it. - Bump Unicode to version 16.0.0.
-
Change documentation of
ptr::add
/sub
to 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_PATH
environment variable, similar toCARGO_MANIFEST_DIR
but pointing directly to the manifest file. -
Added
package.autolib
to 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
# headers
from 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_TARGET
or 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_name
has 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-type
instead of#![cfg_attr(..., crate_type = "...")]
and--crate-name
instead of#![cfg_attr(..., crate_name = "...")]
when runningrustc
/cargo rustc
on 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/$hash
in 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-src
source files can be discovered, the virtual path is discarded and therefore the local path will be embedded, unless there is a--remap-path-prefix
that causes this local path to be remapped in the usual way.#129687 implements this behaviour, when
rust-src
is present at compile time,rustc
replaces/rustc/$hash
with a real path into the localrust-src
component with best effort. To sanitize this, users must explicitly supply--remap-path-prefix=<path to rust-src>=foo
or not have therust-src
component installed. -
The allow-by-default
missing_docs
lint 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_docs
diagnostics for publicly reachable#[cfg(test)]
items, integration test crate-level documentation, and publicly reachable items in integration tests. -
The
armv8r-none-eabihf
target now uses the Armv8-R required set of floating-point features. -
The sysroot no longer contains the
std
dynamic library in its top-levellib/
dir.