Ferrocene 25.08.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¶
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.
Removed experimental features¶
Experimental features are not qualified for safety critical use, and are shipped as a preview. In some circumstances, these features are removed.
Experimental support has been removed for the following platforms:
x86-64 macOS (
x86_64-apple-darwin
)
Fixed known problems¶
A list of fixed known problems in this release can be found on the Ferrocene 25.08 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.87.0¶
Language¶
Compiler¶
Platform Support¶
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
Most
std::arch
intrinsics which don’t take pointer arguments can now be called from safe code if the caller has the appropriate target features already enabled (https://github.com/rust-lang/stdarch/pull/1714, https://github.com/rust-lang/stdarch/pull/1716, https://github.com/rust-lang/stdarch/pull/1717)Macros such as
assert_eq!
andvec!
now supportconst {...}
expressions
Stabilized APIs¶
These previously stable APIs are now stable in const contexts:
Cargo¶
Compatibility Notes¶
Rust now raises an error for macro invocations inside the
#![crate_name]
attributeMacro arguments of unary operators followed by open beginning ranges may now be matched differently
Warn against function pointers using unsupported ABI strings in dependencies
Forbid attributes on
..
inside of struct patterns (let Struct { #[attribute] .. }) =
Many
std::arch
intrinsics are now safe to call in some contexts, there may now be newunused_unsafe
warnings in existing codebases.Limit
width
andprecision
formatting options to 16 bits on all targetsTurn order dependent trait objects future incompat warning into a hard error
Windows: The standard library no longer links
advapi32
, except on win7. Code such as C libraries that were relying on this assumption may need to explicitly link advapi32.Proc macros can no longer observe expanded
cfg(true)
attributes.Start changing the internal representation of pasted tokens. Certain invalid declarative macros that were previously accepted in obscure circumstances are now correctly rejected by the compiler. Use of a
tt
fragment specifier can often fix these macros.
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.88.0¶
Language¶
Stabilize
#![feature(let_chains)]
in the 2024 edition. This feature allows&&
-chaininglet
statements insideif
andwhile
, allowing intermixture with boolean expressions. The patterns inside thelet
sub-expressions can be irrefutable or refutable.Stabilize
#![feature(naked_functions)]
. Naked functions allow writing functions with no compiler-generated epilogue and prologue, allowing full control over the generated assembly for a particular function.Stabilize
#![feature(cfg_boolean_literals)]
. This allows using boolean literals ascfg
predicates, e.g.#[cfg(true)]
and#[cfg(false)]
.Fully de-stabilize the
#[bench]
attribute. Usage of#[bench]
without#![feature(custom_test_frameworks)]
already triggered a deny-by-default future-incompatibility lint since Rust 1.77, but will now become a hard error.Add warn-by-default
dangerous_implicit_autorefs
lint against implicit autoref of raw pointer dereference. The lint will be bumped to deny-by-default in the next version of Rust.Add
invalid_null_arguments
lint to prevent invalid usage of null pointers. This lint is uplifted fromclippy::invalid_null_ptr_usage
.Change trait impl candidate preference for builtin impls and trivial where-clauses.
Compiler¶
Platform Support¶
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
Guarantee that
[T; N]::from_fn
is generated in order of increasing indices., for those passing it a stateful closure.The libtest flag
--nocapture
is deprecated in favor of the more consistent--no-capture
flag.
Stabilized APIs¶
These previously stable APIs are now stable in const contexts:
Cargo¶
Rustdoc¶
Compatibility Notes¶
Finish changing the internal representation of pasted tokens. Certain invalid declarative macros that were previously accepted in obscure circumstances are now correctly rejected by the compiler. Use of a
tt
fragment specifier can often fix these macros.Fully de-stabilize the
#[bench]
attribute. Usage of#[bench]
without#![feature(custom_test_frameworks)]
already triggered a deny-by-default future-incompatibility lint since Rust 1.77, but will now become a hard error.Fix borrow checking some always-true patterns. The borrow checker was overly permissive in some cases, allowing programs that shouldn’t have compiled.