Thanks again to Open Source Security, inc and Embecosm for their ongoing support for this project.
We took some time this month to put together a document outlining the future of the project, like we had done last year. This document allowed us to establish smaller milestones, and to create a dependency graph in between these milestones. This, as well as an estimate of the time to complete for each issue, allows us to put together a Gantt chart which gives us start and target dates for each of the milestones. The purpose of this document is to evolve as time passes, and to reflect on our progress around the release of GCC 15.1, in one year of work.
To establish this document, we spent multiple hours painstakingly
compiling each module of the core
and alloc
crates, hacking around
the missing imports and dependencies in order to go as far as possible
into the compiler pipeline, in the hope of unearthing new issues with
the compiler. Because we attempted to compile each module separately,
imports were not handled properly and we had to re-define huge chunks of
the core
library each time, making the progress very slow. However, as
the high number of issues opened this month will show, this work is
proving to be worthwile and gives us a clearer picture of the situation
for our objectives of compiling the Rust standard library and the
Rust-for-Linux project.
Speaking about Rust-for-Linux (RfL), Miguel Ojeda and Arthur had a great
conversation regarding the state of the compiler and future goals of the
Rust language concerning the kernel. For example, RfL no longer needs
its own fork of the alloc
crate - meaning that once we are able to
catch up and compile the Rust standard library, we should have no issues
providing this dependency to RfL. Furthermore, one of the goals of the
Rust project for
2024
is to enable RfL to compile using a stable compiler, which should help
us when catching up to the Rust version the kernel expects, as it will
drop requirements for nightly features we might not have implemented.
Regarding GSoC, we are very impressed with the work done by our students so far. As they all had important commitments, such as internships or exams, they chose to start working on their project early and have done oustandingly. We are looking forward to more progress and we can’t wait to show you the cool features they are building.
On the technical side of things, we have started progressing towards the
next milestones already. Internal compiler attributes are being handled,
work has started on fixing some bugs discovered in our support of
negative trait implementations (used in quite a few places in core
1.49), parser improvements are being worked on for alloc
and std
,
and as usual, a lot of code is being cleaned up and improved
continuously. Our GCC build system patch has now been reviewed, and the
review comments adressed - meaning that upstreaming will start again
shortly, and that GCC’s trunk will be in sync with our development
repository. We are also working towards getting documentation in for GCC
14.2, which should release in the next few months.
We will have our next monthly community call on the 17th of June at 9am UTC. You can subscribe to our calendar to see when the next one will be held. The call is open to everyone, even if you would just like to sit-in and listen. You can also subscribe to our mailing-list or join our Zulip chat to be notified of upcoming events.
Our error propagation expressions (expressions which use the question
mark operator, of the form <expr>?
) are currently forgotten in many of
our AST visitors. As a result, there are unexpected cases when it comes
to various parts of the compiler pipeline handling them. In that
particular case, the function call’s generic arguments are not
disambiguated - the compiler does not know if it needs to be handling a
generic type, or a const generic value. You will need to add handling to
our name resolution pass for these error propagation expressions. It
would be helpful to look at the current generic
disambiguation
to start figuring out where it is called from, and where you need to
call it.
rustc_const_stable
and
rustc_const_unstable
PR3003Context
parameter for some backend methods
PR2973gcc/rust/typecheck/rust-hir-type-check.h
PR2924ConstantItem
during name resolution
2.0 PR2900Category | Last Month | This Month | Delta |
---|---|---|---|
TODO | 293 | 333 | +40 |
In Progress | 68 | 71 | +3 |
Completed | 831 | 836 | +5 |
TestCases | Last Month | This Month | Delta |
---|---|---|---|
Passing | 8439 | 8507 | +68 |
Failed | - | - | - |
XFAIL | 69 | 69 | - |
XPASS | - | - | - |
Category | Last Month | This Month | Delta |
---|---|---|---|
TODO | 108 | 126 | +18 |
In Progress | 37 | 40 | +3 |
Completed | 413 | 414 | +1 |
Milestone | Last Month | This Month | Delta | Start Date | Completion Date | Target |
---|---|---|---|---|---|---|
GCC 14.2 | 0% | 0% | - | 7th Jun 2024 | - | 15th Jun 2024 |
Name resolution 2.0 | 0% | 0% | - | 1st Jun 2024 | - | 1st Apr 2025 |
Macro expansion | 0% | 0% | - | 1st Jun 2024 | - | 1st Jan 2025 |
Upcoming Milestone | Last Month | This Month | Delta | Start Date | Completion Date | Target |
---|---|---|---|---|---|---|
GCC 15.1 | 0% | 0% | - | 21st Jun 2024 | - | 1st Jul 2024 |
Unhandled attributes | 0% | 0% | - | 1st Jul 2024 | - | 15th Aug 2024 |
Lang items | 0% | 0% | - | 1st Jul 2024 | - | 1st Sep 2024 |
Indexing fixes | 0% | 0% | - | 21st Jun 2024 | - | 15th Sep 2024 |
Iterator fixes | 0% | 0% | - | 21st Jun 2024 | - | 15th Sep 2024 |
Auto traits improvements | 0% | 0% | - | 15th Sep 2024 | - | 21st Oct 2024 |
Deref and DerefMut improvements | 0% | 0% | - | 28th Sep 2024 | - | 28th Oct 2024 |
Remaining typecheck issues | 0% | 0% | - | 21st Oct 2024 | - | 1st Jan 2025 |
cfg-core | 0% | 0% | - | 1st Dec 2024 | - | 1st Jan 2025 |
Question mark operator | 0% | 0% | - | 15th Dec 2024 | - | 21st Feb 2025 |
Codegen fixes | 0% | 0% | - | 7th Oct 2024 | - | 1st Mar 2025 |
Specialization | 0% | 0% | - | 1st Jan 2025 | - | 1st Mar 2025 |
Inline assembly | 0% | 0% | - | 1st Jun 2024 | - | 15th Sep 2024 |
Borrow checker improvements | 0% | 0% | - | 1st Jun 2024 | - | 15th Sep 2024 |
Rustc Testsuite Adaptor | 0% | 0% | - | 1st Jun 2024 | - | 15th Sep 2024 |
black_box intrinsic | 0% | 0% | - | 28th Oct 2024 | - | 28th Nov 2024 |
Unstable RfL features | 0% | 0% | - | 7th Jan 2025 | - | 1st Mar 2025 |
cfg-rfl | 0% | 0% | - | 7th Jan 2025 | - | 15th Feb 2025 |
alloc parser issues | 0% | 0% | - | 7th Jan 2025 | - | 28th Jan 2025 |
let-else | 0% | 0% | - | 28th Jan 2025 | - | 28th Feb 2025 |
Explicit generics with impl Trait | 0% | 0% | - | 28th Feb 2025 | - | 28th Mar 2025 |
offset_of!() builtin macro | 0% | 0% | - | 15th Mar 2025 | - | 15th May 2025 |
Generic Associated Types | 0% | 0% | - | 15th Mar 2025 | - | 15th Jun 2025 |
RfL const generics | 0% | 0% | - | 1st May 2025 | - | 15th Jun 2025 |
frontend plugin hooks | 0% | 0% | - | 15th May 2025 | - | 7th Jul 2025 |
Handling the testsuite issues | 0% | 0% | - | 15th Sep 2024 | - | 15th Sep 2025 |
std parser issues | 0% | 0% | - | 28th Jun 2025 | - | 28th Jul 2025 |
main shim | 0% | 0% | - | 28th Jul 2025 | - | 15th Sep 2025 |
Past Milestone | Last Month | This Month | Delta | Start Date | Completion Date | Target |
---|---|---|---|---|---|---|
Data Structures 1 - Core | 100% | 100% | - | 30th Nov 2020 | 27th Jan 2021 | 29th Jan 2021 |
Control Flow 1 - Core | 100% | 100% | - | 28th Jan 2021 | 10th Feb 2021 | 26th Feb 2021 |
Data Structures 2 - Generics | 100% | 100% | - | 11th Feb 2021 | 14th May 2021 | 28th May 2021 |
Data Structures 3 - Traits | 100% | 100% | - | 20th May 2021 | 17th Sep 2021 | 27th Aug 2021 |
Control Flow 2 - Pattern Matching | 100% | 100% | - | 20th Sep 2021 | 9th Dec 2021 | 29th Nov 2021 |
Macros and cfg expansion | 100% | 100% | - | 1st Dec 2021 | 31st Mar 2022 | 28th Mar 2022 |
Imports and Visibility | 100% | 100% | - | 29th Mar 2022 | 13th Jul 2022 | 27th May 2022 |
Const Generics | 100% | 100% | - | 30th May 2022 | 10th Oct 2022 | 17th Oct 2022 |
Initial upstream patches | 100% | 100% | - | 10th Oct 2022 | 13th Nov 2022 | 13th Nov 2022 |
Upstream initial patchset | 100% | 100% | - | 13th Nov 2022 | 13th Dec 2022 | 19th Dec 2022 |
Update GCC’s master branch | 100% | 100% | - | 1st Jan 2023 | 21st Feb 2023 | 3rd Mar 2023 |
Final set of upstream patches | 100% | 100% | - | 16th Nov 2022 | 1st May 2023 | 30th Apr 2023 |
Borrow Checking 1 | 100% | 100% | - | TBD | 8th Jan 2024 | 15th Aug 2023 |
Procedural Macros 1 | 100% | 100% | - | 13th Apr 2023 | 6th Aug 2023 | 6th Aug 2023 |
GCC 13.2 Release | 100% | 100% | - | 13th Apr 2023 | 22nd Jul 2023 | 15th Jul 2023 |
GCC 14 Stage 3 | 100% | 100% | - | 1st Sep 2023 | 20th Sep 2023 | 1st Nov 2023 |
GCC 14.1 Release | 98% | 100% | +2% | 2nd Jan 2024 | 2nd Jun 2024 | 15th Apr 2024 |
format_args!() support | 100% | 100% | - | 15th Feb 2024 | - | 1st Apr 2024 |
Risk | Impact (1-3) | Likelihood (0-10) | Risk (I * L) | Mitigation |
---|---|---|---|---|
Missing features for GCC 15.1 deadline | 2 | 1 | 2 | Start working on required features as early as July (6mo ahead) |