Rust 1.78.0
Language
- Stabilize
#[cfg(target_abi = ...)]
- Stabilize the
#[diagnostic]
namespace and#[diagnostic::on_unimplemented]
attribute - Make async-fn-in-trait implementable with concrete signatures
- Make matching on NaN a hard error, and remove the rest of
illegal_floating_point_literal_pattern
- static mut: allow mutable reference to arbitrary types, not just slices and arrays
- Extend
invalid_reference_casting
to include references casting to bigger memory layout - Add
non_contiguous_range_endpoints
lint for singleton gaps after exclusive ranges - Add
wasm_c_abi
lint for use of older wasm-bindgen versions This lint currently only works when using Cargo. - Update
indirect_structural_match
andpointer_structural_match
lints to match RFC - Make non-
PartialEq
-typed consts as patterns a hard error - Split
refining_impl_trait
lint into_reachable
,_internal
variants - Remove unnecessary type inference when using associated types inside of higher ranked
where
-bounds - Weaken eager detection of cyclic types during type inference
trait Trait: Auto {}
: allow upcasting fromdyn Trait
todyn Trait + Auto
Compiler
- Made
INVALID_DOC_ATTRIBUTES
lint deny by default - Increase accuracy of redundant
use
checking - Suggest moving definition if non-found macro_rules! is defined later
- Lower transmutes from int to pointer type as gep on null
Target changes:
- Windows tier 1 targets now require at least Windows 10
- Add
wasm32-wasip1
tier 2 (without host tools) target - Add
wasm32-wasip2
tier 3 target - Rename
wasm32-wasi-preview1-threads
towasm32-wasip1-threads
- Add
arm64ec-pc-windows-msvc
tier 3 target - Add
armv8r-none-eabihf
tier 3 target for the Cortex-R52 - Add
loongarch64-unknown-linux-musl
tier 3 target
Refer to Rust's platform support page for more information on Rust's tiered platform support.
Libraries
- Bump Unicode to version 15.1.0, regenerate tables
- Make align_offset, align_to well-behaved in all cases
- PartialEq, PartialOrd: document expectations for transitive chains
- Optimize away poison guards when std is built with panic=abort
- Replace pthread
RwLock
with custom implementation - Implement unwind safety for Condvar on all platforms
- Add ASCII fast-path for
char::is_grapheme_extended
Stabilized APIs
impl Read for &Stdin
- Accept non
'static
lifetimes for severalstd::error::Error
related implementations - Make
impl<Fd: AsFd>
impl take?Sized
impl From<TryReserveError> for io::Error
These APIs are now stable in const contexts:
Cargo
- Stabilize lockfile v4
- Respect
rust-version
when generating lockfile - Control
--charset
via auto-detecting config value - Support
target.<triple>.rustdocflags
officially - Stabilize global cache data tracking
Misc
Compatibility Notes
- Many unsafe precondition checks now run for user code with debug assertions enabled This change helps users catch undefined behavior in their code, though the details of how much is checked are generally not stable.
- riscv only supports split_debuginfo=off for now
- Consistently check bounds on hidden types of
impl Trait
- Change equality of higher ranked types to not rely on subtyping
- When called, additionally check bounds on normalized function return type
- Expand coverage for
arithmetic_overflow
lint - Fix detection of potential interior mutability in
const
initializers This code was accidentally accepted. The fix can break generic code that borrows a value of unknown type, as there is currently no way to declare "this type has no interior mutability". In the future, stabilizing theFreeze
trait will allow proper support for such code.
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.