Rust 1.97 Released with New Default Symbol Mangling Scheme

Rust 1.97 is out, enabling the v0 symbol mangling scheme by default on stable, adding Cargo warning controls, and surfacing linker messages.

The Rust team has announced the release of Rust 1.97, the latest stable version of the programming language. One of the main changes is that the v0 symbol mangling scheme is now enabled by default on stable Rust.

Previously, Rust used a mangling approach based on the Itanium ABI, which is also used by C++. This scheme had drawbacks for Rust, such as not directly preserving generic parameter instantiations and requiring custom demangling in some cases due to inconsistencies.

The newer v0 scheme is Rust-specific and has been available as an opt-in option since Rust 1.59 through the -Csymbol-mangling-version=v0 compiler flag. It has also been the default on nightly since November 2025. With Rust 1.97, it now becomes the default for stable builds as well.

Another useful change lands in Cargo, which now has built-in support for controlling how warnings affect build success. Until now, projects commonly used RUSTFLAGS=-Dwarnings in CI environments to turn warnings into errors. With Rust 1.97, Cargo can manage this behavior directly, allowing warnings to be silenced, shown without failing the build, or denied.

For example, developers can temporarily silence warnings while addressing other errors by running: CARGO_BUILD_WARNINGS=allow cargo check. In CI, projects can instead use: CARGO_BUILD_WARNINGS=deny.

This approach offers a key advantage: since Cargo manages the behavior, the build cache remains valid. This makes it easier to adjust warning settings temporarily without triggering unnecessary rebuilds. Additionally, the new setting can also be combined with --keep-going, enabling CI jobs to collect all errors and warnings rather than stopping at the first failure.

Rust 1.97 also updates how rustc handles linker output. Previously, rustc hid linker messages when linking succeeded, which could obscure real issues. The compiler now displays linker stderr output by default as a warning lint.

For example, if a linker reports that it is ignoring a deprecated optimization setting, rustc now displays this as a warning rather than suppressing it. The Rust team notes that several defects have already been fixed on nightly due to this change.

On top of that, the new linker_messages lint is enabled by default but is handled separately from the general warnings lint group. According to devs, this distinction is intentional, as linker output varies across platforms and is less controlled than standard compiler diagnostics. Developers can silence unwanted linker warnings through the lints section in Cargo.toml.

Finally, as with every stable Rust release, Rust 1.97 also includes newly stabilized APIs. These include Default for RepeatN, Copy for ffi::FromBytesUntilNulError, Send for std::fs::File on UEFI, and several integer and NonZero integer methods such as isolate_highest_one, isolate_lowest_one, highest_one, lowest_one, and bit_width. Additionally, char::is_control is now stable in const contexts.

For additional details, see the announcement. As usual, existing Rust users can upgrade through rustup by running rustup update stable.

Bobby Borisov

Bobby Borisov

Bobby, an editor-in-chief at Linuxiac, is a Linux professional with over 20 years of experience. With a strong focus on Linux and open-source software, he has worked as a Senior Linux System Administrator, Software Developer, and DevOps Engineer for small and large multinational companies.

Leave a Reply

Your email address will not be published. Required fields are marked *