Ferrocene 25.02.0

Ferrocene 25.02.0 is the fifth major release of Ferrocene.

The highlights of this release are the inclusion of Rust 1.83.0, as well as several new experimental targets and a new Quality Managed target.

New features

  • Updated the Rust version to include changes in Rust 1.82.0 and 1.83.0.

  • Quality Managed support has been added for a new target. Quality Managed targets are not qualified for safety critical use, but are otherwise fully tested and supported. The new target is:

    • Apple Silicon macOS (aarch64-apple-darwin)

New experimental features

Experimental features are not qualified for safety critical use, and are shipped as a preview.

  • Experimental support has been added for multiple cross-compilation targets. Note that experimental targets are not qualified for safety critical use. The new targets are:

    • Armv6-M bare-metal (thumbv6m-none-eabi)

    • Armv8-M Baseline bare-metal (thumbv8m.base-none-eabi)

    • Armv8-M Mainline (soft-float) (thumbv8m.main-none-eabi)

    • Armv8-M Mainline (hard-float) (thumbv8m.main-none-eabihf)

    • RV64GC Linux (glibc) (riscv64gc-unknown-linux-gnu)

Fixed known problems

A list of fixed known problems in this release can be found on the Ferrocene 25.02 Known Problems page.

Rust changes

This release includes the following changes introduced by the upstream Rust project. Note that this changelog is maintained by upstream. The target support changes described here describe Rust’s support levels, and have no correlation to the targets and platforms supported by Ferrocene.

Rust 1.82.0

Language

Compiler

Libraries

Stabilized APIs

These APIs are now stable in const contexts:

Cargo

Compatibility Notes

  • We now disallow setting some built-in cfgs via the command-line with the newly added explicit_builtin_cfgs_in_flags lint in order to prevent incoherent state, eg. windows cfg active but target is Linux based. The appropriate rustc flag should be used instead.

  • The standard library has a new implementation of binary_search which is significantly improves performance (#128254). However when a sorted slice has multiple values which compare equal, the new implementation may select a different value among the equal ones than the old implementation.

  • illumos/Solaris now sets MSG_NOSIGNAL when writing to sockets. This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets.

  • Removes a problematic hack that always passed the –whole-archive linker flag for tests, which may cause linker errors for code accidentally relying on it.

  • The WebAssembly target features multivalue and reference-types are now both enabled by default. These two features both have subtle changes implied for generated WebAssembly binaries. For the multivalue feature, WebAssembly target support has changed when upgrading to LLVM 19. Support for generating functions with multiple returns no longer works and -Ctarget-feature=+multivalue has a different meaning than it did in LLVM 18 and prior. There is no longer any supported means to generate a module that has a function with multiple returns in WebAssembly from Rust source code. For the reference-types feature the encoding of immediates in the call_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don’t understand the reference-types proposal will no longer accept modules produced by LLVM due to this change in encoding of immediates. Additionally these features being enabled are encoded in the target_features custom section and may affect downstream tooling such as wasm-opt consuming the module. Generating a WebAssembly module that disables default features requires -Zbuild-std support from Cargo and more information can be found at rust-lang/rust#128511.

  • Rust now raises unsafety errors for union patterns in parameter-position

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.

Rust 1.83.0

Language

Compiler

Refer to Rust’s platform support page for more information on Rust’s tiered platform support.

Libraries

Stabilized APIs

These APIs are now stable in const contexts:

Cargo

Rustdoc

Compatibility Notes