Ferrocene 24.05.0

Ferrocene 24.05.0 is the second major release of Ferrocene.

The highlights of this release are the inclusion of Rust 1.76.0, the qualified x86-64 Linux (glibc) target, new experimental targets, and the use of a bundled linker.

New features

  • The Rust version has been updated to 1.76.0.

  • The x86-64 Linux (glibc) target is now supported and qualified for safety critical use, in addition to being used as a host platform like in previous releases.

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:

    • Armv7E-M bare-metal (soft-float) (thumbv7em-none-eabi)

    • Armv7E-M bare-metal (hard-float) (thumbv7em-none-eabihf)

    • WASM bare-metal (wasm32-unknown-unknown)

  • The self-testing tool now checks the correct behavior of linker drivers, according to the new requirements for linkers. Note that the self-testing tool is not qualified for safety critical use yet.

  • These tools from upstream toolchain are now distributed with Ferrocene:

    • clippy

    • rustfmt

    • rust-analyzer

    • rust-demangler

Changes

  • Ferrocene now uses a bundled copy of LLD as the linker, and allows any external linker or C compiler to be used as the linker driver as long as it adheres to the behavior specified in the Safety Manual. The purpose of the linker driver is to locate the system libraries needed for the linkage, and instructing LLD on where to find them.

Breaking changes

  • The --crate-type dylib, --crate-type cdylib and --crate-type proc-macro CLI flags are not qualified for safety critical use anymore. Safety critical support for them will be added back in a future release.

Bug fixes

  • Disabled LLVM optimization that optimizes lifetime zones that are broken to mitigate KP-R112213.

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.69.0

Language

Compiler

Libraries

Stabilized APIs

These APIs are now stable in const contexts:

Cargo

Rustdoc

Compatibility Notes

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.70.0

Language

Compiler

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

Libraries

Stabilized APIs

Cargo

Misc

Compatibility Notes

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.71.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

Misc

Compatibility Notes

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.71.1

Rust 1.72.0

Language

Compiler

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

Libraries

Rustdoc

Stabilized APIs

These APIs are now stable in const contexts:

Cargo

  • Enable -Zdoctest-in-workspace by default. When running each documentation test, the working directory is set to the root directory of the package the test belongs to. docs #12221 #12288

  • Add support of the “default” keyword to reset previously set build.jobs parallelism back to the default. #12222

Compatibility Notes

Rust 1.72.1

Rust 1.73.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

Misc

Compatibility Notes

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.74.0

Language

Compiler

Libraries

Stabilized APIs

These APIs are now stable in const contexts:

Cargo

Rustdoc

Compatibility Notes

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.

None this cycle.

Rust 1.74.1

Rust 1.75.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

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.76.0

Language

Compiler

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

Libraries

Stabilized APIs

Cargo

See Cargo release notes.

Rustdoc

Compatibility Notes