Thanks again to Open Source Security, inc and Embecosm for their ongoing support for this project.
The number of contributions increased this month with over 50 pull
requests merged in gccrs
from
eight contributors and a couple more in our various tooling projects, as
well as valuable input on our different platforms, which remains a
tremendous help in the development of this compiler. Our two Google
Summer of Code students, Mahad
Muhammad and Raiki
Tamura, are progressing quickly on their
projects and submitting high quality contributions - we are getting more
and more of Rust’s error codes integrated to our compiler, which will
assist us in trying to pass the rustc
testsuite, and our lexer is
slowly but surely becoming Unicode compliant with a high number of unit
tests to boot. Their mid-term evaluations will start next week, and we
are excited to enter the second phase of their projects, where more
technical contributions will come in: v0 name mangling and punycode
support for Raiki Tamura, and internal
GCC cleanups for the error emitting code for Mahad
Muhammad.
One unforeseen hurdle this month was the need for a complete rework of
our name resolution pass. Name resolution in Rust is a complex process,
which should be divided in two passes. In gccrs
, name resolution was
developed before macro expansion, meaning that macro name resolution was
not taken into account properly. This is now starting to cause issues as
we try and fix the last few remaining bugs around imports, macro exports
and early name resolution in general for the compilation of core
1.49.
We have spent a lot of time trying to improve the existing name
resolution algorithms to stry and split them in two (or more) distinct
passes, but this is proving to be a difficult task. Furthermore, it is
an area of the compiler which deserves a little more attention, and has
not been improved much since its creation. Philip and Arthur took the
decision to rewrite this pass of the compiler, aiming for simpler data
structures, simpler algorithms and less global state, making the name
resolution pass a three-pass process: TopLevel
name resolution,
Early
name resolution and Late
name resolution. The TopLevel
pass
is in charge of collecting definitions for the entire program, as Rust
allows you to call a function defined later in the source. Early
takes
care of macro name resolution and imports, and works in a fixed point
fashion with TopLevel
. Finally, Late
is your “classical” name
resolution pass, and resolves functions, types and variables.
We are mostly done with the data structures and are in the process of merging them to our compiler. We now need to write the missing visitors and name resolution 2.0 will be complete.
In our typesystem, Philip spent a lot of time chasing some of the few remaining bugs needed for handling iterators. Most of the fixes are now one-line fixes, which is quite disheartening, but also an indication that we are getting closer and closer!
We are also in the process of welcoming Jakub
Dupak’s Master thesis project, which will be
focused on adding support for the Polonius borrow checker to gccrs
.
This exciting work should start in the upcoming months.
We will have our next monthly community call on the 10th of July 2023. 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.
Category | Last Month | This Month | Delta |
---|---|---|---|
TODO | 227 | 237 | +10 |
In Progress | 50 | 46 | +4 |
Completed | 670 | 696 | +26 |
TestCases | Last Month | This Month | Delta |
---|---|---|---|
Passing | 7924 | 7974 | +50 |
Failed | - | - | - |
XFAIL | 53 | 53 | - |
XPASS | - | - | - |
Category | Last Month | This Month | Delta |
---|---|---|---|
TODO | 66 | 73 | +7 |
In Progress | 22 | 22 | - |
Completed | 327 | 346 | +19 |
Note that the intrinsics milestone percentage on github is not representative: It shows a 73% completion rate, but does not take into account the tracking issues with dozens of unresolved items. Thus the percentage is computed using the sum of issues and tracked items done divided by the sums of issues and tracked items overall. Similarly, the Update GCC’s master branch milestone contains a tracking issue containing over 200 tasks. The percentage shown here takes this into account.
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 | 0% | 0% | - | TBD | - | 15th Aug 2023 |
AST Pipeline for libcore 1.49 | 51% | 70% | +19% | 13th Apr 2023 | - | 1st Jul 2023 |
HIR Pipeline for libcore 1.49 | 53% | 67% | +14% | 13th Apr 2023 | - | TBD |
Procedural Macros 1 | 70% | 70% | - | 13th Apr 2023 | - | 6th Aug 2023 |
GCC 13.2 Release | 26% | 42% | +12% | 13th Apr 2023 | - | 15th Jul 2023 |
GCC 14 Stage 3 | 0% | 0% | - | TBD | - | 1st Nov 2023 |
core 1.49 functionality [AST] | 0% | 0% | - | 1st Jul 2023 | - | 1st Nov 2023 |
Rustc Testsuite Prerequisistes | 0% | 0% | - | TBD | - | 1st Sep 2023 |
Intrinsics and builtins | 18% | 18% | - | 6th Sep 2022 | - | TBD |
Const Generics 2 | 0% | 0% | - | TBD | - | TBD |
Rust-for-Linux compilation | 0% | 0% | - | TBD | - | TBD |
The testing project is on hold as we try and figure out some of the issues we’re running into with GitHub and our various automations around it.
core
1.49