https://blog.rust-lang.org/2023/07/13/Rust-1.71.0.html Rust Logo Rust Blog * Rust * Install * Learn * Tools * Governance * Community Announcing Rust 1.71.0 July 13, 2023 * The Rust Release Team The Rust team is happy to announce a new version of Rust, 1.71.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.71.0 with: rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes for 1.71.0 on GitHub. If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (rustup default beta) or the nightly channel (rustup default nightly). Please report any bugs you might come across! What's in 1.71.0 stable C-unwind ABI 1.71.0 stabilizes C-unwind (and other -unwind suffixed ABI variants^1 ). The behavior for unforced unwinding (the typical case) is specified in this table from the RFC which proposed this feature. To summarize: Each ABI is mostly equivalent to the same ABI without -unwind, except that with -unwind the behavior is defined to be safe when an unwinding operation (panic or C++ style exception) crosses the ABI boundary. For panic=unwind, this is a valid way to let exceptions from one language unwind the stack in another language without terminating the process (as long as the exception is caught in the same language from which it originated); for panic=abort, this will typically abort the process immediately. For this initial stabilization, no change is made to the existing ABIs (e.g. "C"), and unwinding across them remains undefined behavior. A future Rust release will amend these ABIs to match the behavior specified in the RFC as the final part in stabilizing this feature (usually aborting at the boundary). Users are encouraged to start using the new unwind ABI variants in their code to remain future proof if they need to unwind across the ABI boundary. Debugger visualization attributes 1.71.0 stabilizes support for a new attribute, #[debug_visualizer (natvis_file = "...")] and #[debug_visualizer(gdb_script_file = "...")], which allows embedding Natviz descriptions and GDB scripts into Rust libraries to improve debugger output when inspecting data structures created by those libraries. Rust itself has packaged similar scripts for some time for the standard library, but this feature makes it possible for library authors to provide a similar experience to end users. See the reference for details on usage. raw-dylib linking On Windows platforms, Rust now supports using functions from dynamic libraries without requiring those libraries to be available at build time, using the new kind="raw-dylib" option for #[link]. This avoids requiring users to install those libraries (particularly difficult for cross-compilation), and avoids having to ship stub versions of libraries in crates to link against. This simplifies crates providing bindings to Windows libraries. Rust also supports binding to symbols provided by DLLs by ordinal rather than named symbol, using the new #[link_ordinal] attribute. Upgrade to musl 1.2 As previously announced, Rust 1.71 updates the musl version to 1.2.3. Most users should not be affected by this change. Const-initialized thread locals Rust 1.59.0 stabilized const initialized thread local support in the standard library, which allows for more optimal code generation. However, until now this feature was missed in release notes and documentation. Note that this stabilization does not make const { ... } a valid expression or syntax in other contexts; that is a separate and currently unstable feature. use std::cell::Cell; thread_local! { pub static FOO: Cell = const { Cell::new(1) }; } Stabilized APIs * CStr::is_empty * BuildHasher::hash_one * NonZeroI*::is_positive * NonZeroI*::is_negative * NonZeroI*::checked_neg * NonZeroI*::overflowing_neg * NonZeroI*::saturating_neg * NonZeroI*::wrapping_neg * Neg for NonZeroI* * Neg for &NonZeroI* * From<[T; N]> for (T...) (array to N-tuple for N in 1..=12) * From<(T...)> for [T; N] (N-tuple to array for N in 1..=12) * windows::io::AsHandle for Box * windows::io::AsHandle for Rc * windows::io::AsHandle for Arc * windows::io::AsSocket for Box * windows::io::AsSocket for Rc * windows::io::AsSocket for Arc These APIs are now stable in const contexts: * <*const T>::read * <*const T>::read_unaligned * <*mut T>::read * <*mut T>::read_unaligned * ptr::read * ptr::read_unaligned * <[T]>::split_at Other changes Check out everything that changed in Rust, Cargo, and Clippy. Contributors to 1.71.0 Many people came together to create Rust 1.71.0. We couldn't have done it without all of you. Thanks! 1. List of stabilized ABIs can be found in the stabilization report - Get help! * Documentation * Contact the Rust Team Terms and policies * Code of Conduct * Licenses * Logo Policy and Media Guide * Security Disclosures * All Policies Social twitter logo youtube logo discord logo github logo RSS * Main Blog * "Inside Rust" Blog Maintained by the Rust Team. See a typo? Send a fix here!