Ferrocene 26.05.0 upcoming

Caution

This version of Ferrocene has not been released yet. The contents of this page might change before the release, and they should not be relied upon.

New features

  • New targets are now supported and qualified for safety critical use. The new targets are:

    • Armv8-A RHIVOS 2 (Linux, glibc) (aarch64-rhivos2-linux-gnu)

      • Note: Only when compiled by a Armv8-A Linux (glibc) (aarch64-unknown-linux-gnu) host

    • Armv8-A Linux (glibc) (aarch64-unknown-linux-gnu)

      • Note: Only when compiling a Armv8-A RHIVOS 2 (Linux, glibc) (aarch64-rhivos2-linux-gnu) target

  • The proc_macro crate type is now permitted.

  • Two qualified targets which offered target CPU features have been removed, as the base targets now permit the use of -C target-cpu in the same capacity. For more information, see the respective base target pages in the User Manual.

    • Armv7E-M bare-metal (hard-float) (thumbv7em-none-eabihf) can be used with -C target-cpu=cortex-m4 in place of Armv7E-M bare-metal (Cortex-M4, hard-float) (thumbv7em-m4-none-eabihf)

    • Armv8-A bare-metal (hard-float) (aarch64-unknown-none) can be used with -C target-cpu=cortex-a53 in place of Armv8-A bare-metal (Cortex-A53) (aarch64-a53-none)

  • The core::fmt module has been certified to ISO 26262 (ASIL B) and IEC 61508 (SIL 2)

    • This module contains the code to format Rust data structures into human-readable output. This enables customers to use this functionality in certified contexts.

    • Retired “certified panic runtime” compilation targets. They were used to certify panicking without certifying the formatting code, but are now obsolete. Following targets are now retired:

      • aarch64-ferrocene-none can be replaced with aarch64-unknown-none

      • thumbv7em-ferrocene-none-eabi can be replaced with thumbv7em-none-eabi

      • thumbv7em-ferrocene-none-eabihf can be replaced with thumbv7em-none-eabihf

      • x86_64-ferrocene-none can be replaced with x86_64-unknown-none

  • Added a ferrocene::unvalidated lint which detects whether your code uses functions that are not in the certified subset of the standard library.

    • For information on how to use this lint, see Certified subset.

    • For more background on why this change is being made, see Callgraph Analysis.

    • Retired “certified subset” compilation targets. They were used to detect use of uncertified functionality, but are now obsolete. The following targets are being retired:

      • aarch64-unknown-ferrocene.subset

      • thumbv7em-ferrocene.subset-eabi

      • thumbv7em-ferrocene.subset-eabihf

      • x86_64-unknown-ferrocene.subset

  • New Supported targets have been added. Supported targets can often be qualified or quality managed upon request. The new targets are:

    • Armv8-R AArch64 bare-metal (hard-float) (aarch64v8r-unknown-none)

    • s390x Linux (glibc) (s390x-unknown-linux-gnu)

    • PowerPC64 Linux (glibc, little-endian) (powerpc64le-unknown-linux-gnu)

New experimental features

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

  • Experimental support has been added for a new target. Note that experimental targets are not qualified for safety critical use. The new target is:

    • Armv8-R AArch64 bare-metal (soft-float) (aarch64v8r-unknown-none-softfloat)

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

Language

Compiler

Libraries

Stabilized APIs

These previously stable APIs are now stable in const contexts:

Cargo

Rustdoc

Compatibility Notes

Rust 1.93.0

Language

Compiler

Platform Support

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

Libraries

Stabilized APIs

Cargo

Rustdoc

Compatibility Notes

Rust 1.93.1

Rust 1.94.0

Language

Platform Support

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

Libraries

Stabilized APIs

These previously stable APIs are now stable in const contexts:

Cargo

  • Stabilize the config include key. The top-level include config key allows loading additional config files, enabling better organization, sharing, and management of Cargo configurations across projects and environments. docs #16284

  • Stabilize the pubtime field in registry index. This records when a crate version was published and enables time-based dependency resolution in the future. Note that crates.io will gradually backfill existing packages when a new version is published. Not all crates have pubtime yet. #16369 #16372

  • Cargo now parses TOML v1.1 for manifests and configuration files. Note that using these features in Cargo.toml will raise your development MSRV, but the published manifest remains compatible with older parsers. #16415

  • Make CARGO_BIN_EXE_<crate> available at runtime

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

Rust 1.95.0

Language

Compiler

Platform Support

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

Libraries

Stabilized APIs

These previously stable APIs are now stable in const contexts:

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.