Software 44038 Published by

Rust 1.93.0 has been released, which is an important step toward empowering developers to build reliable and efficient software. To update your Rust setup, simply run rustup update stable in the terminal if you're using rustup, or head to the official site to get started. A major upgrade to the bundled musl library, which enhances DNS resolver capabilities and improves binary reliability on Linux targets, is part of the release. 



Rust 1.93.0 released

Rust 1.93.0 has been released, which is an important step for the programming language that empowers developers to build reliable and efficient software.

Updating your Rust setup is super straightforward if you're using rustup. If you haven't got it yet, head to the official site and get started. But even better, if you already have rustup on your system, just fire up your terminal and run rustup update stable, and it will snag the latest version for you.

The details are laid out in the release notes, which are probably worth a quick skim if you're curious about what's new or changed. There's plenty packed into this one.

For those keen to help test things out before they're fully ready for prime time, consider switching your local environment over to the beta channel (rustup default beta) or the nightly channel (rustup default nightly). Any bugs you happen to stumble upon would be incredibly helpful feedback for the team behind Rust. Just remember to stay focused on stable releases unless you require the latest features.

One of the most visible changes in 1.93.0 involves a major upgrade to the bundled musl library, bumping it up from 1.2.3 to version 1.2.5. This primarily affects static builds on Linux targets like x86_64, ARM64 (aarch64), and powerpc64le.

The reason for this focus is simple: the update includes major enhancements to musl's DNS resolver from previous versions (especially 1.2.4). This means that when you're using musl targets with static linking, your final Linux binaries stand a much better chance of being reliable, portable packages that handle network lookups efficiently, which is particularly important if you've got big DNS records or are dealing with recursive name servers.

It's a fantastic improvement for folks building things meant to run elsewhere. Speaking of running smoothly, there was also that breaking change thing in the ecosystem recently. Specifically, some legacy compatibility symbols bundled with Rust's libc crate have been removed now that they're no longer necessary.

This might sound scary, but it actually addresses an issue where certain symbols were causing unnecessary bloat or confusion over time. The good news is that this particular problem was already addressed within the Rust ecosystem itself, back in June 2023, via a specific update to the libc crate (version 0.2.146). Turns out there was enough time for everyone to adapt, meaning you shouldn't have any trouble using these symbols now if they're needed somewhere else.

Another helpful tweak makes it easier for people writing custom global allocators in Rust. They can now safely use thread-local storage without having to worry about re-entrancy problems messing things up. This is enabled by the language relying on the system allocator, which handles this complexity underneath the hood.

Speaking of inline assembly (that asm! stuff), there's an update related to configuring it more precisely. You can now apply cfg attributes directly onto sections within your inline assembly blocks. This means you don't have to duplicate entire code sections with different conditional compilation flags applied; instead, you can target specific parts and control their activation via cfg like normal Rust items.

The release also brings some welcome API stability updates. Functions related to working with MaybeUninit<T> are now standardized, which probably makes handling uninitialized memory safer or at least easier for unsafe blocks (used carefully). Other additions relate to String, Vec, integer types iN and uN (those bit-precise ones), char, and Duration.

Plus, methods like into_raw_parts, as_array, pop_front_if, or from_fn have been frozen as stable parts of the language. These additions might seem small individually, but together they keep Rust sharp for everyday tasks and make it a better tool overall for building efficient software.

Announcing Rust 1.93.0

Empowering everyone to build reliable and efficient software.

Announcing Rust 1.93.0 | Rust Blog