Try   HackMD

2025-02 Update (deprecated)


DEPRECATED SEE THIS HACKMD


We have embarked on the second iteration of our project goals program, covering 2025H1 (2025 Jan to Jun). This round we identified a slate of 26 project
goals
, with 3 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
.

Introducing the flagship goals

Organize Rust All-Hands 2025
<progress value="6" max="28"></progress>

The goal to organize Rust All-Hands 2025 has seen significant progress. The initial planning phase has been completed, with a detailed timeline and key milestones established. A dedicated team has been formed, and roles have been assigned to ensure smooth coordination. The venue selection process is underway, with several potential locations being evaluated. Additionally, outreach to potential speakers and participants has begun, aiming to secure a diverse and engaging lineup. The communication strategy for the event has been outlined, including social media campaigns and email newsletters. Regular check-ins are scheduled to monitor progress and address any challenges that arise. The goal remains on track for a successful Rust All-Hands 2025.

Stabilize tooling needed by Rust for Linux
<progress value="8" max="22"></progress>

The project goal "Stabilize tooling needed by Rust for Linux" has seen significant progress. The stabilization of arbitrary self types v2 and CoercePointee is underway, with both features being utilized in Rust for Linux (RFL). The ABI-modifying flags RFC has completed its Final Comment Period and awaits merging, with an implementation PR under review. Several other compiler flags are being prioritized for stabilization, including -Zdwarf-version and -Zdebuginfo-compression, which are ready for stabilization with proper documentation. The stable rustdoc feature allowing RFL to extract and customize rustdoc tests is under review and expected to land soon. Clippy configuration updates are minimal and mostly involve documentation changes. The rebuild of libcore is progressing, though specific updates were not provided in the meeting. Publicizing efforts include a planned talk at Rust Nation and potential blog posts. A policy document explaining Rust usage in the kernel has been published in response to recent controversies. Dependency management and configuration of no-std are being investigated, and feedback is being collected on a document regarding a blessed way to build-std. An issue related to cfg(no_fp_fmt_parse) in an older kernel branch is being addressed, and RFL is seeking a solution for disabling the orphan rule.

Bring the Async Rust experience closer to parity with sync Rust
<progress value="5" max="34"></progress>

This year

Rust 1.85

The first update is the release of Rust 1.85, which had at least two major features that impact Async Rust. The first is async closures, which has been on many people's wish lists for a long time and was expertly moved forward by @compiler-errors over the last year.

The second is the new lifetime capture rules as part of Rust 2024 edition. This should substantially improve the experience of using async Rust anytime a user writes -> impl Future, as it removes the need for + '_ or similar bounds in most cases. It will also lead to an easier to understand language, since those bounds only worked by exploiting the more subtle rules of impl Trait in a way that runs contrary to their actual semantic role in the language. In the 2024 Edition, the subtle rule is gone and we capture all input lifetimes by default, with the ability to use + use<> syntax to opt out. See this blog post for more.

Generators

The lang team held two design meetings on generators, with the outcome of the last one being that we will implement a std::iter::iter! macro (exact path TBD) in the compiler, as a lang team experiment that allows the use of the yield syntax. We decided to go in this direction because we want to reserve gen for self-borrowing and perhaps lending generators, and aren't yet decided on which subset of features to expose under that syntax. This decision interacts with ongoing compiler development that isn't ready yet to enable experimentation with lending.

Our hope is that in the meantime, by shipping iter! we will give people the chance to start using generators in their own code and better understand which limitations people hit in practice.

As you may have noticed, I'm not talking about async generators here. Those are the ultimate goal for the async initiative, but we felt the first step should be clarifying the state of synchronous generators so we can build on that when talking about async ones.

dynosaur

dynosaur v0.1.3 was released, with another release in the works. We think we are approaching a 1.0 release real soon now . At this point you should be able to try it on your crate to enable dyn dispatch for traits with async fn and other -> impl Trait methods. If you need to use it together with #[trait_variant], you may need to wait until the next release when #55 is fixed.

Other

The async project goal was accepted for 2025H1!

Goals with updates

rustc-perf improvements
<progress value="0" max="7"></progress>
  • A regular call is scheduled with Kobzol to discuss constraints and requirements for rust-perf changes, and a high-level architecture proposal has been drafted and shared for feedback.
  • A detailed plan including proposed changes to the database schema will be prepared after agreement on the high-level architecture is reached.
build-std
<progress value="0" max="4"></progress>
  • The team has shifted focus to drafting a document outlining use cases, motivations, and prior art for build-std to provide the Cargo team with a clear context for reviewing proposals.
  • Davidtwco is coordinating to ensure the proposed build-std mechanism aligns with the requirements of the Rust for Linux project.
Unsafe Fields
<progress value="1" max="7"></progress>
  • The MVP for unsafe fields is limited to additive invariants.
  • Consensus reached in the Feb 19 Lang Team Design Meeting.
Stabilize public/private dependencies
<progress value="0" max="5"></progress>
  • Help wanted: the project goal requires a compiler developer to proceed.
  • The goal remains assigned to epage for coordination and oversight.
  • Walterhpearce has made progress on implementing the secure quorum-based cryptographic verification system for crates.io.
  • The mirroring functionality is being integrated to ensure data integrity and availability.
SVE and SME on AArch64
<progress value="2" max="16"></progress>
  • @JamieCunliffe is resolving feedback on the RFC for Arm's scalable vector extension (SVE) and its implementation, with the hope of landing it experimentally.
  • @davidtwco is working on an RFC to improve Rust's support for exotically sized types, with an initial implementation completed and further progress dependent on the language team's decision and const traits implementation.
Rust Vision Document
<progress value="0" max="4"></progress>
  • Nikomatsakis has initiated the Rust Vision Document project by soliciting volunteers, conducting an initial meeting, and establishing a dedicated Zulip stream.
  • Despite being slightly behind schedule, the next milestone involves outlining a detailed plan for the project.
Run the 2025H1 project goal program
<progress value="6" max="13"></progress>
  • The 2025H1 project goal program is behind schedule but has commenced operation; the goals RFC completed FCP on Feb 18.
  • The new project goals team is approved, tracking issues updated for the new milestone, and project goal owners are urged to reflect actual tasks in the issue body using Github checkboxes or other notation.
  • Progress made in identifying potential safety risks associated with linking separately compiled code.
  • Ongoing research into best practices and techniques for ensuring safety during the linking process.
Publish first version of StableMIR on crates.io
<progress value="0" max="6"></progress>
  • No progress has been made on publishing the first version of StableMIR on crates.io.
  • Help is wanted for refactoring; interested parties should reach out through the project-stable-mir zulip channel or repository.
Publish first rust-lang-owned release of "FLS"
<progress value="0" max="5"></progress>
  • Ferrous Systems publicly announced commitment to contribute FLS to the Rust Project at the Safety Critical Rust Consortium meeting.
  • FLS integration testing can commence in parallel while finalizing contribution details.
Prototype a new set of Cargo "plumbing" commands
<progress value="0" max="4"></progress>
  • Help wanted: this project goal needs someone to work on the implementation.
  • Interest expressed by an individual to collaborate on the implementation work.
Null and enum-discriminant runtime checks in debug builds
<progress value="1" max="3"></progress>
  • Null-checks have been successfully implemented and merged in rust#134424.
  • Focus shifts to implementing enum discriminant checks as the next phase of the project.
Nightly support for ergonomic SIMD multiversioning
<progress value="0" max="5"></progress>
Metrics Initiative
<progress value="0" max="6"></progress>
  • Implemented initial configuration for metrics storage directory and basic unstable feature usage metrics.
  • Developed a Proof of Concept using InfluxDB 3.0 Alpha and Graphana, including data conversion and querying, and began evaluating output format options inspired by Firefox's telemetry system.
Improve state machine codegen
<progress value="1" max="6"></progress>
  • The improvement of state machine codegen is currently pending review by the language team in a design meeting to assess feasibility.
  • Further action on this goal is contingent upon the language team's evaluation and recommendations.
Implement restrictions, prepare for stabilization
<progress value="0" max="8"></progress>
  • The feasibility of rebasing the existing PR versus reapplying patches manually will be reviewed this weekend.
  • No progress has been made as of the first status update.
Implement Open API Namespace Support
<progress value="0" max="3"></progress>
  • The project goal is stalled and requires a compiler developer to proceed.
  • Contact the project owner for further assistance or to volunteer for the role.
Finish the libtest json output experiment
<progress value="0" max="4"></progress>
  • The project goal is currently on pause, pending the completion of implementation for issue #92.
  • The rustc side of issue #92 is under review, followed by additional work on r-a and cargo, after which testing and stabilization will be required.
Externally Implementable Items
<progress value="2" max="9"></progress>
  • m-ou-se has updated the project goal 'Externally Implementable Items' with specific implementation steps.
  • m-ou-se has added a timeline for the completion of the externally implementable items.
Evaluate approaches for seamless interop between C++ and Rust
<progress value="2" max="6"></progress>
  • The lang team expresses enthusiasm for ambitious C++ interop, aiming for automated bindings for most real-world C++ code while maintaining Rust's values.
  • Next steps include defining realistic milestones and diving into specific proposals with language, library, and compiler teams.
Declarative (`macro_rules!`) macro improvements
<progress value="3" max="29"></progress>
  • Joshtriplett has integrated the latest changes from the master branch and resolved merge conflicts.
  • Joshtriplett is currently reviewing and testing the updated declarative macro improvements for stability and performance.
Instrument the Rust standard library with safety contracts
<progress value="1" max="8"></progress>
  • Around 220 safety contracts are written and verified in the verify-rust-std fork, with 3 out of 14 challenges solved.
  • Kani is successfully integrated in the repository CI, and integration of VeriFast and Goto-transcoder (ESBMC) is in progress.
Use annotate-snippets for rustc diagnostic output
<progress value="0" max="13"></progress>
  • Muscraft completes the design for integrating annotate-snippets into rustc's diagnostic output.
  • Muscraft begins implementing the integration of annotate-snippets into rustc.
Model coherence in a-mir-formality
<progress value="0" max="6"></progress>
  • Updates the project goal to reflect the completion of the design document and the initiation of implementation.
  • Notes that Niko is on leave and will not be working on this goal during the new period.
Promoting Parallel Front End
<progress value="0" max="3"></progress>
  • SparrowLii successfully integrates new parallel processing techniques into the front-end development workflow, enhancing efficiency and performance.
  • The project goal is updated to focus on optimizing user interface responsiveness through advanced parallel front-end strategies in the new period 2025h1.
Scalable Polonius support on nightly
<progress value="10" max="18"></progress>
  • Progress made on rewriting type tests, diagnostics issues, and fixing bugs in the Sisyphean, with all previous PRs successfully landed on nightly thanks to reviews from @jackh726 and @matthewjasper.
  • Current focus is on investigating around 4 failing tests and ironing out 8-10 diagnostics differences, alongside expanding test coverage and adding visualizations to the polonius MIR dump.
Optimizing Clippy & linting
<progress value="0" max="2"></progress>
  • A Clippy-exclusive benchmarker has been implemented, enhancing performance analysis capabilities.
  • Progress has been made on optimizing Clippy's Minimum Supported Rust Version (MSRV) logic, improving efficiency for a broader range of crates.
Next-generation trait solver
<progress value="0" max="4"></progress>
  • The project scope is expanded to include advanced machine learning algorithms for predictive modeling.
  • Integration with external databases for real-time data access is now a priority.
Extend pubgrub to match cargo's dependency resolution
<progress value="0" max="2"></progress>
  • PubGrub 0.3 released with critical improvements for Cargo and UV, thanks to @konstin.
  • Progress delayed due to illness and high-priority work commitments.
Expose experimental LLVM features for GPU offloading
<progress value="2" max="4"></progress>
  • The autodiff feature is nearly complete with one final PR pending for a fully working MVP, and work will commence on the batching feature using existing autodiff infrastructure.
  • Progress has been made on adding a new AMD GPU target to the Rust compiler, which aligns with the needs of the llvm offload project.
Experiment with ergonomic ref-counting
<progress value="2" max="4"></progress>
  • A pull request implementing the proposed RFC without optimizations is available but not yet merged.
  • Focus is on addressing comments on the pull request until it is merged, after which optimizations will be implemented.
Prepare const traits for stabilization
<progress value="5" max="14"></progress>
  • Oli-obk updates the stabilization efforts for const traits, focusing on resolving remaining issues and preparing for review.
  • Progress is made in addressing feedback and ensuring const traits are ready for stabilization in the upcoming period.
  • The goal includes prototyping and implementing several enhancements to cargo-semver-checks for improved linting capabilities.
  • Ongoing discussion and moral support are provided by the cargo and rustdoc teams.
"Stabilizable" prototype for expanded const generics
<progress value="0" max="4"></progress>
  • BoxyUwU completes the initial prototype implementation for expanded const generics.
  • The prototype undergoes preliminary testing and stabilization efforts.

Goals without updates

The following goals have not received updates in the last month: