Ferrocene 25.05.0¶
Ferrocene 25.05.0 is the sixth major release of Ferrocene.
The highlights of this release are the inclusion of Rust 1.86.0, as well as two new qualified targets.
New features¶
Two new targets are now supported and qualified for safety critical use:
Armv7E-M bare-metal (soft-float) (
thumbv7em-none-eabi
)Armv7E-M bare-metal (hard-float) (
thumbv7em-none-eabihf
)
Fixed known problems¶
A list of fixed known problems in this release can be found on the Ferrocene 25.05 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.84.0¶
Language¶
Compiler¶
Libraries¶
Stabilized APIs¶
These APIs are now stable in const contexts
Cargo¶
Rustdoc¶
Compatibility Notes¶
Enable by default the
LSX
target feature for LoongArch Linux targetsThe unstable
-Zprofile
flag (“gcov-style” coverage instrumentation) has been removed. This does not affect the stable flags for coverage instrumentation (-Cinstrument-coverage
) and profile-guided optimization (-Cprofile-generate
,-Cprofile-use
), which are unrelated and remain available.Support for the target named
wasm32-wasi
has been removed as the target is now namedwasm32-wasip1
. This completes the transition plan for this target following the introduction ofwasm32-wasip1
in Rust 1.78. Compiler warnings on use ofwasm32-wasi
introduced in Rust 1.81 are now gone as well as the target is removed.The next-generation trait solver is now enabled for coherence, fixing multiple soundness issues
Rust 1.84.1¶
Fix slow compilation related to the next-generation trait solver.
Fix debuginfo when LLVM’s location discriminator value limit is exceeded.
Fixes for building Rust from source:
Rust 1.85.0¶
Language¶
Compiler¶
The unstable flag
-Zpolymorphize
has been removed, see https://github.com/rust-lang/compiler-team/issues/810 for some background.
Platform Support¶
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
Panics in the standard library now have a leading
library/
in their pathstd::env::home_dir()
on Windows now ignores the non-standard$HOME
environment variableIt will be un-deprecated in a subsequent release.
Stabilized APIs¶
These APIs are now stable in const contexts:
Cargo¶
Rustdoc¶
Compatibility Notes¶
rustc
no longer treats thetest
cfg as a well known check-cfg, instead it is up to the build systems and users of--check-cfg
to set it as a well known cfg using--check-cfg=cfg(test)
.This is done to enable build systems like Cargo to set it conditionally, as not all source files are suitable for unit tests. Cargo (for now) unconditionally sets the
test
cfg as a well known cfg.Disable potentially incorrect type inference if there are trivial and non-trivial where-clauses
std::env::home_dir()
has been deprecated for years, because it can give surprising results in some Windows configurations if theHOME
environment variable is set (which is not the normal configuration on Windows). We had previously avoided changing its behavior, out of concern for compatibility with code depending on this non-standard configuration. Given how long this function has been deprecated, we’re now fixing its behavior as a bugfix. A subsequent release will remove the deprecation for this function.Make
core::ffi::c_char
signedness more closely match that of the platform-defaultchar
This changed
c_char
from ani8
tou8
or vice versa on many Tier 2 and 3 targets (mostly Arm and RISC-V embedded targets). The new definition may result in compilation failures but fixes compatibility issues with C.The
libc
crate matches this change as of its 0.2.169 release.Increase
sparcv9-sun-solaris
andx86_64-pc-solaris
Solaris baseline to 11.4.Show
abi_unsupported_vector_types
lint in future breakage reports
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.85.1¶
Rust 1.86.0¶
Language¶
Allow safe functions to be marked with the
#[target_feature]
attribute.Rust now lints about double negations, to catch cases that might have intended to be a prefix decrement operator (
--x
) as written in other languages. This was previously a clippy lint,clippy::double_neg
, and is now available directly in Rust asdouble_negations
.More pointers are now detected as definitely not-null based on their alignment in const eval.
Empty
repr()
attribute applied to invalid items are now correctly rejected.Inner attributes
#![test]
and#![rustfmt::skip]
are no longer accepted in more places than intended.
Compiler¶
Platform Support¶
Increase baseline CPU of
i686-unknown-hurd-gnu
to Pentium 4.New tier 3 targets:
{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock
. For supporting Neutrino QNX 7.1 withio-socket
network stack.{aarch64-unknown,x86_64-pc}-nto-qnx800
. For supporting Neutrino QNX 8.0 (no_std
-only).{x86_64,i686}-win7-windows-gnu
. Intended for backwards compatibility with Windows 7.{x86_64,i686}-win7-windows-msvc
are the Windows MSVC counterparts that already exist as Tier 3 targets.{mips,mipsel}-mti-none-elf
. Initial bare-metal support.armv7a-nuttx-{eabi,eabihf}
,aarch64-unknown-nuttx
, andthumbv7a-nuttx-{eabi,eabihf}
.
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
The type of
FromBytesWithNulError
inCStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>
was changed from an opaque struct to an enum, allowing users to examine why the conversion failed.On recent versions of Windows,
std::fs::remove_file
will now remove read-only files.
Stabilized APIs¶
These APIs are now stable in const contexts:
Cargo¶
Error if both
--package
and--workspace
are passed but the requested package is missing. This was previously silently ignored, which was considered a bug since missing packages should be reported.Deprecate the token argument in
cargo login
to avoid shell history leaks.Simplify the implementation of
SourceID
comparisons. This may potentially change behavior if the canonicalized URL compares differently in alternative registries.
Rustdoc¶
Compatibility Notes¶
The
wasm_c_abi
future compatibility warning is now a hard error. Users ofwasm-bindgen
should upgrade to at least version 0.2.89, otherwise compilation will fail.Remove long-deprecated no-op attributes
#![no_start]
and#![crate_id]
.The future incompatibility lint
cenum_impl_drop_cast
has been made into a hard error. This means it is now an error to cast a field-less enum to an integer if the enum implementsDrop
.SSE2 is now required for “i686” 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually. To compile for pre-SSE2 32-bit x86, use a “i586” target instead.
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.
Build the rustc on AArch64 Linux with ThinLTO + PGO. The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster.