Ferrocene 26.08 (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¶
The
flip-linktool is now quality managed. See the User Manual for documentation.Three new targets are now supported and qualified for safety critical use:
Armv8-A QNX® SDP 8.0+ (
aarch64-unknown-qnx)Armv7-R bare-metal (hard-float) (
armv7r-none-eabihf)x86-64 QNX® SDP 8.0+ (
x86_64-pc-qnx)
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.96.0¶
Language¶
Compiler¶
Libraries¶
Stabilized APIs¶
Cargo¶
Allow a dependency to specify both a git repository and an alternate registry. Just like with crates.io, the git repository will be used locally, but the registry version will be used when published.
Added
target.'cfg(..)'.rustdocflagssupport in configuration.Fixed CVE-2026-5222 and CVE-2026-5223.
Rustdoc¶
Deprecation notes are now rendered like any other documentation. Previously they used the css
white-space: pre-wrap;property and stripped any<p>elements from the rendered html, however this caused issues and unintuitive behavior. The new behavior should be more predictable, however some multi-line deprecation notes will now be rendered as as single lines. If this is undesirable, you can use the standard markdown method of forcing a linebreak, which is two spaces followed by a newline ("\n").Don’t emit rustdoc
missing_doc_code_exampleslint on impl items
Compatibility Notes¶
Fix layout of
#[repr(Int)]enums in some edge cases involving fields of uninhabited zero-sized typesGate the accidentally stabilized
#![reexport_test_harness_main]attributeError on return-position-impl-trait-in-traits whose types are too private
Report the
uninhabited_staticlint in dependencies and make it deny-by-defaultDistributed builds now contain non-split debuginfo for windows-gnu This appears to improve the quality of backtraces. This change has no effect on the defaults for the output of rustc/cargo on these targets.
Check const generic arguments are correctly typed in more positions
On
avrtargets, C’sdoubletype is 32-bit by default, so changec_doubletof32onavrtargets to match. This is a breaking change, but necessary to makec_doublematch C’s double.BTreeMap::append()was optimized, which may now cause panics for types with incorrectOrdimpls
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.96.1¶
Rust 1.97.0¶
Language¶
Platform Support¶
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Stabilized APIs¶
These previously stable APIs are now stable in const contexts:
Cargo¶
Stabilize
build.warningsconfig. This controls how lint warnings from local packages are treated. Useful for enforcing a warning-free build in CI, replacing-Dwarnings. docsStabilize
resolver.lockfile-pathconfig. This allows specifying the path to the lockfile to use when resolving dependencies. Useful when working with read-only source directories. docscargo-clean: Error when
--target-dirdoesn’t look like a Cargo target directory. This prevents accidental deletion of non-target directories.
Rustdoc¶
Compatibility Notes¶
Emit a future-compatibility warning when relying on
f32: From<{float}>to constrain{float}Rust will use the v0 symbol mangling scheme by default. This may cause some tools (such as debuggers or profilers, especially with old versions) to fail to demangle symbols emitted by Rust. It may also cause the formatting of text in backtraces to change.
Prevent deref coercions in
pin!, in order to prevent unsoundness. The most likely case where this might impact users is: writingpin!(x)wherexhas type&mut Twill now always correctly produce a value of typePin<&mut &mut T>, instead of sometimes allowing a coercion that produces a value of typePin<&mut T>. This coercion was previously incorrectly allowed since Rust 1.88.0.Remove hidden
f64methods which have been deprecated since 1.0The encoding of certain
enums have changed. This is not a breaking change, as it only applies toenums without layout guarantees, but is noted here as we’ve seen people impacted from having made assumptions about the layout algorithm.Syntactically reject tuple index shorthands in struct patterns
validate
#[link_name = "..."]&#[link(name = "...")]parametersOn Windows, after calling
shutdownon a socket to shut down the write side, attempting to write to the socket will now produce aBrokenPipeerror rather thanOther. MapWSAESHUTDOWNtoio::ErrorKind::BrokenPipe