Ferrocene 25.11.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.
This page contains the changes to be introduced in the upcoming Ferrocene release.
New features¶
A subset of the core library has been certified to IEC-61508 SIL 2. For more information,
see the Core library overview and Core Library Certification.
New experimental features¶
Experimental features are not qualified for safety critical use, and are shipped as a preview.
Experimental support has been added for
cargo miri, an unstable undefined behavior detection tool. Other than installation, usage is according to upstream documentation.The package is available as:
miri-${rustc-host}
The testing facades used to test
coreare now available for customer use. On their respective target pages, the following targets now have an equivalent testing facade which can be used for testing: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:
Armv8-A Linux (musl) (
aarch64-unknown-linux-musl)x86-64 Linux (musl) (
x86_64-unknown-linux-musl)
Fixed known problems¶
A list of fixed known problems in this release can be found on the Ferrocene 25.11 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.89.0¶
Language¶
Stabilize explicitly inferred const arguments (
feature(generic_arg_infer))Add a warn-by-default
mismatched_lifetime_syntaxeslint. This lint detects when the same lifetime is referred to by different syntax categories between function arguments and return values, which can be confusing to read, especially in unsafe code. This lint supersedes the warn-by-defaultelided_named_lifetimeslint.Stabilize LoongArch target features
f,d,frecipe,lasx,lbt,lsx, andlvzExtend temporary lifetime extension to also go through tuple struct and tuple variant constructors
extern "C"functions on thewasm32-unknown-unknowntarget now have a standards compliant ABI
Compiler¶
Platform Support¶
Add new Tier-3 targets
loongarch32-unknown-noneandloongarch32-unknown-none-softfloatx86_64-apple-darwinis in the process of being demoted to Tier 2 with host tools
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
Stabilized APIs¶
Many intrinsics for x86, not enumerated here
These previously stable APIs are now stable in const contexts:
Cargo¶
cargo fixandcargo clippy --fixnow default to the same Cargo target selection as other build commands. Previously it would apply to all targets (like binaries, examples, tests, etc.). The--editionflag still applies to all targets.Stabilize doctest-xcompile. Doctests are now tested when cross-compiling. Just like other tests, it will use the
runnersetting to run the tests. If you need to disable tests for a target, you can use the ignore doctest attribute to specify the targets to ignore.
Rustdoc¶
On mobile, make the sidebar full width and linewrap. This makes long section and item names much easier to deal with on mobile.
Compatibility Notes¶
Enabling the
neontarget feature onaarch64-unknown-none-softfloatcauses a warning because mixing code with and without that target feature is not properly supported by LLVM-
Introduces a small breaking change affecting
?Sizedbounds on impls on recursive types which contain associated type projections. It is not expected to affect any existing published crates. Can be fixed by refactoring the involved types or opting into thesized_hierarchyunstable feature. See the FCP report for a code example.
The warn-by-default
elided_named_lifetimeslint is superseded by the warn-by-defaultmismatched_lifetime_syntaxeslint.The deprecated accidentally-stable
std::intrinsics::{copy,copy_nonoverlapping,write_bytes}are now proper intrinsics. There are no debug assertions guarding against UB, and they cannot be coerced to function pointers.Remove unnecessary type inference due to built-in trait object impls
Lint against “stdcall”, “fastcall”, and “cdecl” on non-x86-32 targets
Future incompatibility warnings relating to the never type (
!) are now reported in dependenciesEnsure
std::ptr::copy_*intrinsics also perform the static self-init checksextern "C"functions on thewasm32-unknown-unknowntarget now have a standards compliant ABI
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.90.0¶
Language¶
Split up the
unknown_or_malformed_diagnostic_attributeslint. This lint has been split up into four finer-grained lints, withunknown_or_malformed_diagnostic_attributesnow being the lint group that contains these lints:unknown_diagnostic_attributes: unknown to the current compilermisplaced_diagnostic_attributes: placed on the wrong itemmalformed_diagnostic_attributes: malformed attribute syntax or optionsmalformed_diagnostic_format_literals: malformed format string literal
Allow volatile access to non-Rust memory, including address 0
Compiler¶
Tier 3
musltargets now link dynamically by default. Affected targets:mips64-unknown-linux-muslabi64powerpc64-unknown-linux-muslpowerpc-unknown-linux-muslpowerpc-unknown-linux-muslsperiscv32gc-unknown-linux-musls390x-unknown-linux-muslthumbv7neon-unknown-linux-musleabihf
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¶
Rustdoc¶
Add ways to collapse all impl blocks. Previously the “Summary” button and “-” keyboard shortcut would never collapse
implblocks, now they do when shift is held
Compatibility Notes¶
Use
lldby default onx86_64-unknown-linux-gnu. See also https://blog.rust-lang.org/2025/09/01/rust-lld-on-1.90.0-stable/.Set
MSG_NOSIGNALforUnixStreamThis may change program behavior but results in the same behavior as other primitives (e.g., stdout, network sockets). Programs relying on signals to terminate them should update handling of sockets to handle errors on write by exiting.On Unix
std::env::home_dirwill use the fallback if theHOMEenvironment variable is emptyWe now reject unsupported
extern "{abi}"s consistently in all positions. This primarily affects the use of implementing traits on anextern "{abi}"function pointer, likeextern "stdcall" fn(), on a platform that doesn’t support that, like aarch64-unknown-linux-gnu. Direct usage of these unsupported ABI strings by declaring or defining functions was already rejected, so this is only a change for consistency.const-eval: error when initializing a static writes to that static
Check that the
proc_macro_derivemacro has correct arguments when applied to the crate root