Ferrocene 25.08.0¶
New experimental features¶
Experimental features are not qualified for safety critical use, and are shipped as a preview.
A subset of the
corelibrary is being certified to IEC-61508 SIL 2. This is currently in pre-release and uncertified. 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::archintrinsics 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::archintrinsics are now safe to call in some contexts, there may now be newunused_unsafewarnings in existing codebases.Limit
widthandprecisionformatting 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
ttfragment 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&&-chainingletstatements insideifandwhile, allowing intermixture with boolean expressions. The patterns inside theletsub-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 ascfgpredicates, 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_autorefslint 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_argumentslint 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_fnis generated in order of increasing indices., for those passing it a stateful closure.The libtest flag
--nocaptureis deprecated in favor of the more consistent--no-captureflag.
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
ttfragment 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.