← Back to all releases

Rust 1.70.0

Released on June 1, 2023

What's Changed

Full Changelog

Language

--------

- Relax ordering rules for asm! operands

- Properly allow macro expanded format_args invocations to uses captures

- Lint ambiguous glob re-exports

- Perform const and unsafe checking for expressions in let _ = expr position.

Compiler

--------

- Extend -Cdebuginfo with new options and named aliases

This provides a smaller version of debuginfo for cases that only need line number information

(-Cdebuginfo=line-tables-only), which may eventually become the default for -Cdebuginfo=1.

- Make unused_allocation lint against Box::new too

- Detect uninhabited types early in const eval

- Switch to LLD as default linker for {arm,thumb}v4t-none-eabi

- Add tier 3 target loongarch64-unknown-linux-gnu

- Add tier 3 target for i586-pc-nto-qnx700 (QNX Neutrino RTOS, version 7.0),

- Insert alignment checks for pointer dereferences as debug assertions

This catches undefined behavior at runtime, and may cause existing code to fail.

Refer to Rust's [platform support page][platform-support-doc]

for more information on Rust's tiered platform support.

Libraries

---------

- Document NonZeroXxx layout guarantees

- Windows: make Command prefer non-verbatim paths

- Implement Default for some alloc/core iterators

- Fix handling of trailing bare CR in str::lines

- allow negative numeric literals in concat!

- Add documentation about the memory layout of Cell

- Use partial_cmp to implement tuple lt/le/ge/gt

- Stabilize atomic_as_ptr

- Stabilize nonnull_slice_from_raw_parts

- Partial stabilization of once_cell

- Stabilize nonzero_min_max

- Flatten/inline format_args!() and (string and int) literal arguments into format_args!()

- Stabilize movbe target feature

- don't splice from files into pipes in io::copy

- Add a builtin unstable FnPtr trait that is implemented for all function pointers

This extends Debug, Pointer, Hash, PartialEq, Eq, PartialOrd, and Ord

implementations for function pointers with all ABIs.

Stabilized APIs

---------------

- NonZero*::MIN/MAX

- BinaryHeap::retain

- Default for std::collections::binary_heap::IntoIter

- Default for std::collections::btree_map::{IntoIter, Iter, IterMut}

- Default for std::collections::btree_map::{IntoKeys, Keys}

- Default for std::collections::btree_map::{IntoValues, Values}

- Default for std::collections::btree_map::Range

- Default for std::collections::btree_set::{IntoIter, Iter}

- Default for std::collections::btree_set::Range

- Default for std::collections::linked_list::{IntoIter, Iter, IterMut}

- Default for std::vec::IntoIter

- Default for std::iter::Chain

- Default for std::iter::Cloned

- Default for std::iter::Copied

- Default for std::iter::Enumerate

- Default for std::iter::Flatten

- Default for std::iter::Fuse

- Default for std::iter::Rev

- Default for std::slice::Iter

- Default for std::slice::IterMut

- Rc::into_inner

- Arc::into_inner

- std::cell::OnceCell

- Option::is_some_and

- NonNull::slice_from_raw_parts

- Result::is_ok_and

- Result::is_err_and

- std::sync::atomic::Atomic*::as_ptr

- std::io::IsTerminal

- std::os::linux::net::SocketAddrExt

- std::os::unix::net::UnixDatagram::bind_addr

- std::os::unix::net::UnixDatagram::connect_addr

- std::os::unix::net::UnixDatagram::send_to_addr

- std::os::unix::net::UnixListener::bind_addr

- std::path::Path::as_mut_os_str

- std::sync::OnceLock

Cargo

-----

- Add CARGO_PKG_README

- Make sparse the default protocol for crates.io

- Accurately show status when downgrading dependencies

- Use registry.default for login/logout

- Stabilize cargo logout

Misc

----

- Stabilize rustdoc --test-run-directory

Compatibility Notes

-------------------

- Prevent stable libtest from supporting -Zunstable-options

- Perform const and unsafe checking for expressions in let _ = expr position.

- WebAssembly targets enable sign-ext and mutable-globals features in codegen

This may cause incompatibility with older execution environments.

- Insert alignment checks for pointer dereferences as debug assertions

This catches undefined behavior at runtime, and may cause existing code to fail.

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.

- Upgrade to LLVM 16

- Use SipHash-1-3 instead of SipHash-2-4 for StableHasher