Ferrocene 26.02.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¶
The target support tiers were updated. Many previously experimental targets are now supported, and support tiers are now better described. For more information, see Compilation targets overview.
The certified subset of the
corelibrary that is certified to IEC 61508 SIL 2 has been significantly expanded.Targets with certified
corelibraries now have*-ferrocene-*equivalents, which contain a minimal certified panic implementation.The core certification documentations has been expanded.
For more information on the certified core library and a complete list of functions, see the Core library overview and Core Library Certification.
Fixed known problems¶
A list of fixed known problems in this release can be found on the Ferrocene 26.02 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.91.0¶
Language¶
Lower pattern bindings in the order they’re written and base drop order on primary bindings’ order
Stabilize declaration of C-style variadic functions for
sysv64,win64,efiapi, andaapcsABIs. This brings these ABIs in line with the C ABI: variadic functions can be declared in extern blocks but not defined.Add
dangling_pointers_from_localslint to warn against dangling pointers from local variablesUpgrade
semicolon_in_expressions_from_macrosfrom warn to denyAdd warn-by-default
integer_to_ptr_transmuteslint against integer-to-pointer transmutesAdd
target_env = "macabi"andtarget_env = "sim"cfgs as replacements for thetarget_abicfgs with the same values.
Compiler¶
Platform Support¶
Promote
aarch64-pc-windows-gnullvmandx86_64-pc-windows-gnullvmto Tier 2 with host tools. Note: llvm-tools and MSI installers are missing but will be added in future releases.
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries¶
Stabilized APIs¶
impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sizedimpl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sizedimpl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
These previously stable APIs are now stable in const contexts:
Cargo¶
🎉 Stabilize
build.build-dir. This config sets the directory where intermediate build artifacts are stored. These artifacts are produced by Cargo and rustc during the build process. End users usually won’t need to interact with them, and the layout insidebuild-diris an implementation detail that may change without notice. (config doc) (build cache doc) #15833 #15840The
--targetflag and thebuild.targetconfiguration can now take literal"host-tuple"string, which will internally be substituted by the host machine’s target triple. #15838 #16003 #16032
Rustdoc¶
In search results, rank doc aliases lower than non-alias items with the same name
Raw pointers now work in type-based search like references. This means you can now search for things like
*const u8 ->, and additionally functions that take or return raw pointers will now display their signature properly in search results.
Compatibility Notes¶
Apple: Always pass SDK root when linking with
cc, and pass it viaSDKROOTenv var. This should fix linking issues withrustcrunning inside Xcode. Libraries in/usr/local/libmay no longer be linked automatically, if you develop or use a crate that relies on this, you should explicitly setcargo::rustc-link-search=/usr/local/libin abuild.rsscript.Fix the drop checker being more permissive for bindings declared with let-else
Be more strict when parsing attributes, erroring on many invalid attributes
Mark all deprecation lints in name resolution as deny-by-default and also report in dependencies
The lint
semicolon_in_expressions_from_macros, formacro_rules!macros in expression position that expand to end in a semicolon (;), is now deny-by-default. It was already warn-by-default, and a future compatibility warning (FCW) that warned even in dependencies. This lint will become a hard error in the future.Trait impl modifiers (e.g.,
unsafe,!,default) in inherent impls are no longer syntactically validStart reporting future breakage for
ill_formed_attribute_inputin dependenciesRestrict the scope of temporaries created by the macros
pin!,format_args!,write!, andwriteln!inif letscrutinees in Rust Edition 2024. This applies Rust Edition 2024’sif lettemporary scope rules to these temporaries, which previously could live past theifexpression regardless of Edition.Closures marked with the keyword
staticare now syntactically invalidShebangs inside
--cfgand--check-cfgarguments are no longer allowedAdd future incompatibility lint for temporary lifetime shortening in Rust 1.92
Cargo compatibility notes:
cargo publishno longer keeps.cratetarballs as final build artifacts whenbuild.build-diris set. These tarballs were previously included due to an oversight and are now treated as intermediate artifacts. To get.cratetarballs as final artifacts, usecargo package. In a future version, this change will apply regardless ofbuild.build-dir. #15910Adjust Cargo messages to match rustc diagnostic style. This changes some of the terminal colors used by Cargo messages. #15928
Tools and projects relying on the internal details of Cargo’s
build-dirmay not work for users changing theirbuild-dirlayout. For those doing so, we’d recommend proactively testing these cases particularly as we are considering changing the default location of thebuild-dirin the future (cargo#16147). If you can’t migrate off of Cargo’s internal details, we’d like to learn more about your use case as we prepare to change the layout of thebuild-dir(cargo#15010).
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.91.1¶
Enable file locking support in illumos. This fixes Cargo not locking the build directory on illumos.
Fix
wasm_import_moduleattribute cross-crate. This fixes linker errors on WASM targets.
Rust 1.92.0¶
Language¶
Prefer item bounds of associated types over where-bounds for auto-traits and
SizedAllow specifying multiple bounds for same associated item, except in trait objects
Slightly strengthen higher-ranked region handling in coherence
The
unused_must_uselint no longer warns onResult<(), Uninhabited>(for instance,Result<(), !>), orControlFlow<Uninhabited, ()>. This avoids having to check for an error that can never happen.
Compiler¶
Remove current code for embedding command-line args in PDB Command-line information is typically not needed by debugging tools, and the removed code was causing problems for incremental builds even on targets that don’t use PDB debuginfo.
Libraries¶
iter::Repeat::lastandcountwill now panic, rather than looping infinitely.
Stabilized APIs¶
These previously stable APIs are now stable in const contexts:
Cargo¶
Added a new chapter to the Cargo book, “Optimizing Build Performance”.
Rustdoc¶
If a trait item appears in rustdoc search, hide the corresponding impl items. Previously a search for “last” would show both
Iterator::lastas well as impl methods likestd::vec::IntoIter::last. Now these impl methods will be hidden, freeing up space for inherent methods likeBTreeSet::last.Relax rules for identifiers in search. Previously you could only search for identifiers that were valid in rust code, now searches only need to be valid as part of an identifier. For example, you can now perform a search that starts with a digit.
Compatibility Notes¶
Fix backtraces with
-C panic=aborton Linux by generating unwind tables by default. Build with-C force-unwind-tables=noto keep omitting unwind tables.
As part of the larger effort refactoring compiler built-in attributes and their diagnostics, the future-compatibility lint
invalid_macro_export_argumentsis upgraded to deny-by-default and will be reported in dependencies too.