Ferrocene 24.08.0¶
Ferrocene 24.08.0 is the third major release of Ferrocene.
The highlights of this release are the inclusion of Rust 1.79.0 and new experimental platform support, including Windows and macOS as hosts, and QNX as cross-compilation targets.
New features¶
Updated the Rust version to include the changes in Rust 1.77.0, 1.77.1, 1.77.2, 1.78.0 and 1.79.0. Backports of Rust PR #128271, Rust PR #127364 and Rust PR #126154 are also included to fix bugs introduced in Rust 1.78.0.
New experimental features¶
Experimental features are not qualified for safety critical use, and are shipped as a preview.
Experimental support has been added for new cross-compilation targets. Note that experimental targets are not qualified for safety critical use. The new targets are:
Armv8-R bare-metal (hard-float) (
armv8r-none-eabihf
)Armv7-R bare-metal (hard-float) (
armv7r-none-eabihf
)Armv7-R bare-metal (hard-float, big-endian) (
armebv7r-none-eabihf
)x86-64 macOS (
x86_64-apple-darwin
)Armv8-A QNX 7.1.0 (
aarch64-unknown-nto-qnx710
)x86-64 QNX 7.1.0 (
x86_64-pc-nto-qnx710
)
Experimental support has been added for new host platforms. Note that experimental targets are not qualified for safety critical use. The new targets are:
Apple Silicon macOS (
aarch64-apple-darwin
)x86-64 Windows (
x86_64-pc-windows-msvc
)
Changes¶
The x86-64 Linux (glibc) (
x86_64-unknown-linux-gnu
) target now requires glibc version of 2.31 or higher.
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.77.0¶
Language¶
Reveal opaque types within the defining body for exhaustiveness checking.
Add lint
static_mut_refs
to warn on references to mutable statics.Support async recursive calls (as long as they have indirection).
Undeprecate lint
unstable_features
and make use of it in the compiler.Get rid of type-driven traversal in const-eval interning, only as a future compatiblity lint for now.
Compiler¶
Error on incorrect implied bounds in well-formedness check, with a temporary exception for Bevy.
Fix coverage instrumentation/reports for non-ASCII source code.
Fix
fn
/const
items implied bounds and well-formedness check.Promote
riscv32{im|imafc}-unknown-none-elf
targets to tier 2.Add several new tier 3 targets:
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
Stabilized APIs¶
Cargo¶
Rustdoc¶
Misc¶
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.77.1¶
Revert stripping debuginfo by default for Windows This fixes a regression in 1.77 by reverting to the previous default. Platforms other than Windows are not affected.
Rust 1.77.2¶
Rust 1.78.0¶
Language¶
Stabilize the
#[diagnostic]
namespace and#[diagnostic::on_unimplemented]
attributeMake async-fn-in-trait implementable with concrete signatures
Make matching on NaN a hard error, and remove the rest of
illegal_floating_point_literal_pattern
static mut: allow mutable reference to arbitrary types, not just slices and arrays
Extend
invalid_reference_casting
to include references casting to bigger memory layoutAdd
non_contiguous_range_endpoints
lint for singleton gaps after exclusive rangesAdd
wasm_c_abi
lint for use of older wasm-bindgen versions This lint currently only works when using Cargo.Update
indirect_structural_match
andpointer_structural_match
lints to match RFCSplit
refining_impl_trait
lint into_reachable
,_internal
variantsRemove unnecessary type inference when using associated types inside of higher ranked
where
-boundsWeaken eager detection of cyclic types during type inference
trait Trait: Auto {}
: allow upcasting fromdyn Trait
todyn Trait + Auto
Compiler¶
Target changes:
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
Stabilized APIs¶
These APIs are now stable in const contexts:
Cargo¶
Misc¶
Compatibility Notes¶
Many unsafe precondition checks now run for user code with debug assertions enabled This change helps users catch undefined behavior in their code, though the details of how much is checked are generally not stable.
Change equality of higher ranked types to not rely on subtyping
When called, additionally check bounds on normalized function return type
Fix detection of potential interior mutability in
const
initializers This code was accidentally accepted. The fix can break generic code that borrows a value of unknown type, as there is currently no way to declare “this type has no interior mutability”. In the future, stabilizing theFreeze
trait will allow proper support for such code.
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.79.0¶
Language¶
Prevent opaque types being instantiated twice with different regions within the same function.
Stabilize WebAssembly target features that are in phase 4 and 5.
Add the
redundant_lifetimes
lint to detect lifetimes which are semantically redundant.Stabilize the
unnameable_types
lint for public types that can’t be named.Enable debuginfo in macros, and stabilize
-C collapse-macro-debuginfo
and#[collapse_debuginfo]
.Propagate temporary lifetime extension into
if
andmatch
expressions.Warn against refining impls of crate-private traits with
refining_impl_trait
lint.
Compiler¶
Define
-C strip
to only affect binaries, not artifacts like.pdb
.Stabilize
-Crelro-level
for controlling runtime link hardening.Stabilize checking of
cfg
names and values at compile-time with--check-cfg
. Note that this only stabilizes the compiler part, the Cargo part is still unstable in this release.Add
aarch64-apple-visionos
andaarch64-apple-visionos-sim
tier 3 targets.Promote several Windows targets to tier 2:
aarch64-pc-windows-gnullvm
,i686-pc-windows-gnullvm
, andx86_64-pc-windows-gnullvm
.
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
Stabilized APIs¶
These APIs are now stable in const contexts:
Cargo¶
Rustdoc¶
Misc¶
Compatibility Notes¶
The
wasm_c_abi
future-incompatibility lint will warn about use of the non-spec-compliant C ABI. Usewasm-bindgen v0.2.88
to generate forward-compatible bindings.