Language
- Uplift
clippy::fn_null_check
lint asuseless_ptr_null_checks
. - Make
noop_method_call
warn by default. - Support interpolated block for
try
andasync
in macros. - Make
unconditional_recursion
lint detect recursive drops. - Future compatibility warning for some impls being incorrectly considered not overlapping.
- The
invalid_reference_casting
lint is now deny-by-default (instead of allow-by-default)
Compiler
- Write version information in a
.comment
section like GCC/Clang. - Add documentation on v0 symbol mangling.
- Stabilize
extern "thiscall"
and"thiscall-unwind"
ABIs. - Only check outlives goals on impl compared to trait.
- Infer type in irrefutable slice patterns with fixed length as array.
- Discard default auto trait impls if explicit ones exist.
- Add several new tier 3 targets:
- Add
wasm32-wasi-preview1-threads
as a tier 2 target.
Refer to Rust's platform support page for more information on Rust's tiered platform support.
Libraries
- Add
Read
,Write
andSeek
impls forArc<File>
. - Merge functionality of
io::Sink
intoio::Empty
. - Implement
RefUnwindSafe
forBacktrace
- Make
ExitStatus
implementDefault
impl SliceIndex<str> for (Bound<usize>, Bound<usize>)
- Change default panic handler message format.
- Cleaner
assert_eq!
&assert_ne!
panic messages. - Correct the (deprecated) Android
stat
struct definitions.
Stabilized APIs
- Unsigned
{integer}::div_ceil
- Unsigned
{integer}::next_multiple_of
- Unsigned
{integer}::checked_next_multiple_of
std::ffi::FromBytesUntilNulError
std::os::unix::fs::chown
std::os::unix::fs::fchown
std::os::unix::fs::lchown
LocalKey::<Cell<T>>::get
LocalKey::<Cell<T>>::set
LocalKey::<Cell<T>>::take
LocalKey::<Cell<T>>::replace
LocalKey::<RefCell<T>>::with_borrow
LocalKey::<RefCell<T>>::with_borrow_mut
LocalKey::<RefCell<T>>::set
LocalKey::<RefCell<T>>::take
LocalKey::<RefCell<T>>::replace
These APIs are now stable in const contexts:
Cargo
- Encode URL params correctly for
SourceId
inCargo.lock
. - Bail out an error when using
cargo::
in custom build script.
Misc
Compatibility Notes
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- Remove LLVM pointee types, supporting only opaque pointers.
- Port PGO/LTO/BOLT optimized build pipeline to Rust.
- Replace in-tree
rustc_apfloat
with the new version of the crate. - Update to LLVM 17.
- Add
internal_features
lint for internal unstable features. - Mention style for new syntax in tracking issue template.