The Rust project is currently working towards a slate of 3 project goals, with 1 of them designated as Flagship Goals. This post provides selected updates on our progress towards these goals (or, in some cases, lack thereof). The full details for any particular goal are available in its associated tracking issue on the rust-project-goals repository.
Flagship goals
"Higher-level Rust"
| Progress | |
| Point of contact | |
| Champions | cargo (Ed Page), lang (Josh Triplett), lang-docs (Josh Triplett) |
| Task owners |
2 detailed updates available.
Key developments
- rust-lang/rust#148051
Blockers:
- rustdoc deciding on and implementing how they want frontmatter handled in doctests
Key developments:
- Overall polish
- https://github.com/rust-lang/rust/pull/145751
- https://github.com/rust-lang/rust/pull/145754
- https://github.com/rust-lang/rust/pull/146106
- https://github.com/rust-lang/rust/pull/146137
- https://github.com/rust-lang/rust/pull/146211
- https://github.com/rust-lang/rust/pull/146340
- https://github.com/rust-lang/rust/pull/145568
- https://github.com/rust-lang/cargo/pull/15878
- https://github.com/rust-lang/cargo/pull/15886
- https://github.com/rust-lang/cargo/pull/15899
- https://github.com/rust-lang/cargo/pull/15914
- https://github.com/rust-lang/cargo/pull/15927
- https://github.com/rust-lang/cargo/pull/15939
- https://github.com/rust-lang/cargo/pull/15952
- https://github.com/rust-lang/cargo/pull/15972
- https://github.com/rust-lang/cargo/pull/15975
- rustfmt work
- https://github.com/rust-lang/rust/pull/145617
- https://github.com/rust-lang/rust/pull/145766
- Reference work
- https://github.com/rust-lang/reference/pull/1974
Goals looking for help
Other goal updates
| Progress | |
| Point of contact | |
| Champions | |
| Task owners | Amanieu d'Antras, Guillaume Gomez, Jack Huey, Josh Triplett, lcnr, Mara Bos, Vadim Petrochenkov, Jane Lusby |
2 detailed updates available.
We're putting together a prototype/demo of our reference changes at https://rust-lang.github.io/project-goal-reference-expansion/ . This includes a demonstration of tooling changes to provide stability markers (both "documenting unstable Rust" and "unstable documentation of stable Rust").
The work on this goal has led to many ongoing discussions on the current status of the Reference. Those discussions are still in progress.
Meanwhile, many people working on this goal have successfully written outlines or draft chapters, at various stages of completeness. There's a broken-out status report at https://github.com/rust-lang/project-goal-reference-expansion/issues/11 .
| Progress | |
| Point of contact | |
| Champions | lang (Josh Triplett), lang-docs (TC) |
| Task owners |
5 detailed updates available.
Update from the 2025-11-05 meeting.
Deref/Receiver
Ding Xiang Fei posted his reasoning for the trait split in the Zulip thread and suggested adding a second RFC to explain.
TC recommended writing a Reference PR. The style forces one to explain the model clearly which should then make writing the RFC easier.
The lang experiment PR for arbitrary self types have feature gates for the two options we're exploring.
Arbitrary Self Types and derive(CoercePointee) / tracking issue #44874
theemathas opened an issue derive(CoercePointee) accepts ?Sized + Sized #148399. This isn't a critical issue, just an error that arguably should be a lint.
Boxy opened a fix for a derive(CoercePointee) blocker: Forbid freely casting lifetime bounds of dyn-types
.
RFC #3851: Supertrait Auto-impl
Ding Xiang Fei is working on the implementation (the parser and HIR interface for it). Ding's also working on a more complete section dedicated to questions raised by obi1kenobi
Field projections
Benno Lossin has been posting super detailed updates on the tracking issue
We've discussed the idea of virtual places (see Zulip thread where they were proposed).
Inlining C code into Rust code
Matt Mauer had an idea to compile C code into LLVM bytecode (instead of object file) and then the llvm-link tool to merge them together and treat everything in the second bytecode file as a static inlined function. Matt suggested we could integrate this into the rustc passes.
This would make it easy to inline certain functions into Rust code without full LTO.
Relevant Zulip thread.
This sounds like a good candidate for the next Project Goals period.
Layout of core::any::TypeId
Danilo asked about the layout of TypeId -- specifically its size and whether they can rely on it because they want to store it in a C struct. The struct's size is currently 16 bytes, but that's an implementation detail.
As a vibe check, Josh Triplett and Tyler Mandry were open to guaranteeing that it's going to be at most 16 bytes, but they wanted to reserve the option to reduce the size at some point. The next step is to have the full Lang and Libs teams discuss the proposal.
Danilo will open a PR to get that discussion started.
rustfmt
Miguel brought up the "trailing empty comment" workaround for the formatting issue that made the rounds on the Linux kernel a few weeks ago. The kernel style places each import on a single line:
#![allow(unused)] fn main() { use crate::{ fmt, page::AsPageIter, }; }
rustfmt compresses this to:
#![allow(unused)] fn main() { use crate::{fmt, page::AsPageIter}; }
The workaround is to put an empty trailing comment at the end
#![allow(unused)] fn main() { use crate::{ fmt, page::AsPageIter, // }; }
This was deemed acceptable (for the time being) and merged into the mainline kernel: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a9cb2eecc78fa9d388481762dd798fa770e1971
Miguel is in contact with rustfmt to support this behaviour without a workaround.
// PANIC: ... comments / clippy#15895
This is a proposal to add a lint that would require a PANIC comment (modeled after the SAFETY comment) to explain the circumstances during which the code will or won't panic.
Alejandra González was open to the suggestion and Henry Barker stepped up to implement it.
Deref/Receiver
During the experimentation work, Ding ran into an issue with overlapping impls (that was present even with #[unstable_feature_bound(..)]). We ran out of time but we'll discuss this offline and return to it at the next meeting.
Deref/Receiver
- Ding Xiang Fei keeps updating the PR: https://github.com/rust-lang/rust/pull/146095
- They're also working on a document to explain the consequences of this split
Arbitrary Self Types
- https://github.com/rust-lang/rust/issues/44874
- Waiting on the
Deref/Receiverwork, no updates
derive(CoercePointee)
- https://github.com/rust-lang/rust/pull/133820
- Waiting on Arbitrary self types
Pass pointers to const in asm! blocks
- RFC: https://github.com/rust-lang/rfcs/pull/3848
- The Lang team went through the RFC with Alice Ryhl on 2025-10-08 and it's in FCP now
Field projections
- Benno Lossin opened a PR here: https://github.com/rust-lang/rust/pull/146307
- Being reviewed by the compiler folks
Providing \0 terminated file names with #[track_caller]
- The feature has been implemented and stabilized with
file_as_c_stras the method name: https://github.com/rust-lang/rust/pull/145664
Supertrait auto impl RFC
- Ding Xiang Fei opened the RFC and works with the reviewers: https://github.com/rust-lang/rfcs/pull/3851
Other
- Miguel Ojeda spoke to Linus about rustfmt and they came to agreement.
I've updated the top-level description to show everything we're tracking here (please let me know if anything's missing or incorrect!).
Compiler flags
- Add -Zindirect-branch-cs-prefix PR#140740 -- landed
- Fix -Zregparm for LLVM builtins PR#145309 -- also landed
- -Zharden-sls PR#136597 -- ready for reviews
- Sanitizers target modificators PR#138736 -- close to landing
- Add assembly test for -Zreg-struct-return option PR#145382 -- landed
arbitrary_self_types and derive(CoercePointee)
Ding Xiang Fei is working on splitting the Deref and Receiver traits (the original plan was to make Deref a subtrait of Receiver). Ding has investigated and written down the method probing algorithm and documented the changes he's proposing. He'll be work on a PR that could show this in action next.
Support for pointers with asm_const
We've scheduled a design meeting with the Lang team to read through [Alice Ryhl's RFC](https://github.com/rust-lang/rfcs/pull/3848). It is scheduled for 2025-10-08.
Field projections
Benno Lossin and Ding Xiang Fei put together an experimental implementation of field projection: https://github.com/BennoLossin/rust/tree/field-projections.
They plan to polish this up, cover the missing cases and then post a PR. Tyler Mandry's been championing this from the Lang side and trying to burn down some of the open questions.
In-place initialization
Experimental PR: https://github.com/rust-lang/rust/pull/142518
Progress has slowed somewhat, it's not clear which of the proposed in-place init options to go forward with. Alice, Ding and Benno will talk and see if they can get this unblocked.
Reducing codegen size
A discussion on the status / next steps towards stabilizing cfg(no_fp_fmt_parse) PR#86048 triggered a broader discussion of Libs team's concern for littering the standard libraries with endless cfg flags and other ways of approaching this. For example, getting to a more minimal core library that could be produced using build-std and then implement the missing capabilities in the kernel.
This discussion suggested multiple avenues that I plan to follow: checking back with Libs on their current stance of cfg, appetite for building a smaller core, specifying behaviours through custom targets, etc.
NUL-terminated file names with #[track_caller] aka file_with_nul
The Libs-API team discussed this on Tuesday 2025-08-26 and agreed to the feature, but under a different name: the function will be called: file_as_c_str instead of file_with_nul:
https://github.com/rust-lang/rust/issues/141727
The tracking issue now has a new FCP proposed with that name change.
In the meantime, Alice Ryhl opened a PR renaming the function in nightly: https://github.com/rust-lang/rust/pull/145928.