1.81.0 #
- Released on: 5 September, 2024
- Branched from master on: 19 July, 2024
Language #
- Abort on uncaught panics in
extern "C"
functions. - Fix ambiguous cases of multiple
&
in elided self lifetimes. - Stabilize
#[expect]
for lints (RFC 2383), like#[allow]
with a warning if the lint is not fulfilled. - Change method resolution to constrain hidden types instead of rejecting method candidates.
- Bump
elided_lifetimes_in_associated_constant
to deny. offset_from
: always allow pointers to point to the same address.- Allow constraining opaque types during subtyping in the trait system.
- Allow constraining opaque types during various unsizing casts.
- Deny keyword lifetimes pre-expansion.
Compiler #
- Make casts of pointers to trait objects stricter.
- Check alias args for well-formedness even if they have escaping bound vars.
- Deprecate no-op codegen option
-Cinline-threshold=...
. - Re-implement a type-size based limit.
- Properly account for alignment in
transmute
size checks. - Remove the
box_pointers
lint. - Ensure the interpreter checks bool/char for validity when they are used in a cast.
- Improve coverage instrumentation for functions containing nested items.
- Target changes:
- Add Tier 3
no_std
Xtensa targets:xtensa-esp32-none-elf
,xtensa-esp32s2-none-elf
,xtensa-esp32s3-none-elf
- Add Tier 3
std
Xtensa targets:xtensa-esp32-espidf
,xtensa-esp32s2-espidf
,xtensa-esp32s3-espidf
- Add Tier 3 i686 Redox OS target:
i686-unknown-redox
- Promote
arm64ec-pc-windows-msvc
to Tier 2. - Promote
loongarch64-unknown-linux-musl
to Tier 2 with host tools. - Enable full tools and profiler for LoongArch Linux targets.
- Unconditionally warn on usage of
wasm32-wasi
. (see compatibility note below) - Refer to Rust’s [platform support page][platform-support-doc] for more information on Rust’s tiered platform support.
- Add Tier 3
Libraries #
- Split core’s
PanicInfo
and std’sPanicInfo
. (see compatibility note below) - Generalize
{Rc,Arc}::make_mut()
to unsized types. - Replace sort implementations with stable
driftsort
and unstableipnsort
. Allslice::sort*
andslice::select_nth*
methods are expected to see significant performance improvements. See the research project for more details. - Document behavior of
create_dir_all
with respect to empty paths. - Fix interleaved output in the default panic hook when multiple threads panic simultaneously.
Stabilized APIs #
core::error
hint::assert_unchecked
fs::exists
AtomicBool::fetch_not
Duration::abs_diff
IoSlice::advance
IoSlice::advance_slices
IoSliceMut::advance
IoSliceMut::advance_slices
PanicHookInfo
PanicInfo::message
PanicMessage
These APIs are now stable in const contexts:
char::from_u32_unchecked
(function)char::from_u32_unchecked
(method)CStr::count_bytes
CStr::from_ptr
Cargo #
- Generated
.cargo_vcs_info.json
is always included, even when--allow-dirty
is passed. - Disallow
package.license-file
andpackage.readme
pointing to non-existent files during packaging. - Disallow passing
--release
/--debug
flag along with the--profile
flag. - Remove
lib.plugin
key support inCargo.toml
. Rust plugin support has been deprecated for four years and was removed in 1.75.0.
Compatibility Notes #
Usage of the
wasm32-wasi
target will now issue a compiler warning and request users switch to thewasm32-wasip1
target instead. Both targets are the same,wasm32-wasi
is only being renamed, and this change to the WASI target is being done to enable removingwasm32-wasi
in January 2025.We have renamed
std::panic::PanicInfo
tostd::panic::PanicHookInfo
. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.core::panic::PanicInfo
will remain unchanged, however, as this is now a different type.The reason is that these types have different roles:
std::panic::PanicHookInfo
is the argument to the panic hook in std context (where panics can have an arbitrary payload), whilecore::panic::PanicInfo
is the argument to the#[panic_handler]
in no_std context (where panics always carry a formatted message). Separating these types allows us to add more useful methods to these types, such asstd::panic::PanicHookInfo::payload_as_str()
andcore::panic::PanicInfo::message()
.The new sort implementations may panic if a type’s implementation of
Ord
(or the given comparison function) does not implement a total order as the trait requires.Ord
’s supertraits (PartialOrd
,Eq
, andPartialEq
) must also be consistent. The previous implementations would not “notice” any problem, but the new implementations have a good chance of detecting inconsistencies, throwing a panic rather than returning knowingly unsorted data.
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.