Ferrocene 24.11.0

Ferrocene 24.11.0 is the fourth major release of Ferrocene.

The highlights of this release are the inclusion of Rust 1.81.0, medical qualification, and qualification of the Armv8-A QNX® Neutrino® 7.1.0 and x86-64 QNX® Neutrino® 7.1.0 targets.

New features

  • Updated the Rust version to include changes in Rust 1.80.0 and 1.81.0.

  • Ferrocene is now supported and qualified for use in medical devices (IEC 62304).

  • Two new targets are now supported and qualified for safety critical use.

    • Armv8-A QNX® Neutrino® 7.1.0 (aarch64-unknown-nto-qnx710)

    • x86-64 QNX® Neutrino® 7.1.0 (x86_64-pc-nto-qnx710)

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 host platform. Note that experimental targets are not qualified for safety critical use. The new target is:

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

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.80.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.80.1

Rust 1.81.0

Language

Compiler

Libraries

Stabilized APIs

These APIs are now stable in const contexts:

Cargo

Compatibility Notes

  • Usage of the wasm32-wasi target will now issue a compiler warning and request users switch to the wasm32-wasip1 target instead. Both targets are the same, wasm32-wasi is only being renamed, and this change to the WASI target is being done to enable removing wasm32-wasi in January 2025.

  • We have renamed std::panic::PanicInfo to std::panic::PanicHookInfo. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.

    core::panic::PanicInfo will remain unchanged, however, as this is now a different type.

    The reason is that these types have different roles: std::panic::PanicHookInfo is the argument to the panic hook in std context (where panics can have an arbitrary payload), while core::panic::PanicInfo is the argument to the #[panic_handler] in no_std context (where panics always carry a formatted message). Separating these types allows us to add more useful methods to these types, such as std::panic::PanicHookInfo::payload_as_str() and core::panic::PanicInfo::message().

  • The new sort implementations may panic if a type’s implementation of Ord (or the given comparison function) does not implement a total order as the trait requires. Ord’s supertraits (PartialOrd, Eq, and PartialEq) must also be consistent. The previous implementations would not “notice” any problem, but the new implementations have a good chance of detecting inconsistencies, throwing a panic rather than returning knowingly unsorted data.

  • In very rare cases, a change in the internal evaluation order of the trait solver may result in new fatal overflow errors.

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.