Some stream of consciousness thought about these issues I raised above follows. I apologize for the length. I’m going to try to post a follow-up comment here that digests these things, but I figured I might as well post this too.
Some of the problems we were talking about:
- We are pretty good at tackling regressions and P-high things, but what about the backlog of random ICEs or other P-medium issues?
- Can we and/or should we try to systematically attack those?
- Can we save some time at the triage meetings somehow to make a bit of time for that?
Honestly, it’s still pretty hard to figure out just how much time we’ll have for dedicated meetings etc. But I think that if we could come away from this meeting with a sense of which are the most important conversations to have, that would be very helpful.
To my mind, the main goal of the All Hands should be us to establish a strategy for “rustc in 2021” – actually the problem may be bigger than rustc itself, since I think we should really also be considering IDE support, and that may imply some interaction with cargo etc. But basically what overall compilation architecture we are shooting for in the next edition.
Looking over the HackMd document, my sense is that the single most important discussion to have is this one:
- Consensus on IDE Integration
- what is our “end goal” – how do we envision the interaction of rustc, IDE, cargo to be in “2021”?
- what are the steps to get there?
- how can we get more interaction between rustc team and RLS maintenance?
In order to even have that conversation, though, I think it would be pretty useful to get reviews of how things are working today. For example, I would love to get a brief overview from @Xanewok on how the RLS is setup, and similarly I would like to hear from @matklad about rust-analyzer – the experiments that @jntrnr, @wycats and I have been doing on Lark are relevant, but I’m not sure if it makes sense to present about them specifically.
The above conversation (IDE integration) also touches on a number of other issues I think are relevant and potentially worth talking out:
- end-to-end query architecture
- I think what I mean by this is: given the goal we established in prior conversation, what are the steps we take to get there from here (how compiler works today)
- integrating submodules and libraries
- I would like to see rustc start to take a page from Servo and try to break itself up into more independent libraries. Things like chalk and polonius, yes, but perhaps for the type system, MIR transformations, etc.
- Managing these as separate repositories has advantages: less bors time, etc. But it has costs: harder to coordinate changes, issue triage is hard to manage. What should we do?
Looking beyond the IDE a bit, and perhaps with a slightly more narrow scope, I think our biggest priorities are going to be:
-
Parallel compilation: More cores, more speed. What’s not to like.
-
Improved incremental support: Now that we have the incremental infrastructure, we need to dig into more scenarios and see why some of them aren’t paying off. Also, what can we do to optimize the implementation itself, such as faster serialization, deserialization, etc?
-
MIR optimizations: We need to set some specific goals, but there are improvements to generated code (fewer memcopies) that can be important, and I think things like MIR-based inlining may also be helpful for reducing time spent in LLVM.
-
Chalk integration: hopefully improves performance, unlocks GATs and some other more advanced features, hopefully fixes a bunch of bugs.
Of these, I think that MIR optimizations could most benefit from some focused group discussion. I can see various interactions. For example, @eddyb had proposed some changes to how MIR is setup to make it easier to perform optimizations, and it’d be great to go over the optimizations we think we might want to do and try to sketch out interactions with stacked borrows (cc @RalfJung) etc.
Chalk integration too has a fair amount of open questions, and it would be interesting to prepare and go over a lot of the details and try to map out some of the challenges we will hit.
Looking beyond the technical, I think the main thing I would want to talk about is reforming our structure a bit and specifically creating an apprenticeship pathway. For example, I would like to have the steering meetings start to transition to regular check-ins (perhaps in a round-robin fashion) with the various active working groups, getting an update on how things are going etc. Questions like triage and ice-breaking are relevant here too.
So my questions for the group might be:
- Does that list seem like a reasonable set of priorities?
- Should something on it be removed or replaced?
- There is lots of work missing from that list – e.g., finishing NLL transition. Are there discussions to be had about that?
- What about technical topics and reviews? I am now thinking that maybe it’s more realistic to do those as part of the lecture series, but I guess it depends on how much time we have.