--- title: Generic Associated Types, 2022 Mid-year progress review tags: survey --- # Generic Associated Types, 2022 Mid-year progress review This document opens with a series of questions aimed toward [structured responses](#Structured-Questions). These are then followed by a series of more [open-ended questions](#Open-Ended-Questions). [toc] ## Structured Questions :::info (These questions are formatted to be heavy on reading but light on writing; the intent is to reduce the amount of overall effort you need to put into answering our questions.) ::: NOTE: The use of "we" below is not necessarily meant to solely denote you or your collaborators personally. If some work done by others ends up achieving your goals, that can still represent a satsified goal. ### The easy-yet-hard question: Any progress? **Q:** *How do you *feel* about progress so far on this ambition (check one).* * [x] The Rust project has made progress on this ambition since the start of the year * [ ] The Rust project has not made any progress on this ambition since the start of the year * [ ] We need help figuring out what has happened on this ambition since the start of the year * (if you checked this last box, please also send a privmsg as soon as you can to Felix or Wesley or both, so we can help you with the rest of these questions.) ### How big does the problem feel right now? **Q:** *How do you **feel** about the plans for this ambitition (check one):* * [ ] we think all of our planned goals for this year are completed. * [x] we think this year's planned goals for this ambition will be achieved in the next six months. * [ ] we do not think this year's planned goals for this ambition will be achieved in the next six months. * [ ] we had no goals for this ambition planned for this year, but we made ad-hoc progress on the problem itself * [ ] we had no goals for this ambition planned for this year, and made no progress on the problem it represents * [ ] other: __________________ **Q:** *Based on the year so far, how do you **feel** about resolving the overall problem attached to this ambition (check one).* * [ ] we think this problem is now solved * [x] we think the most important parts of a solution will be available in the next six months. * [ ] we think a solution will be available in the next two years, but not sooner than six months. * [ ] we do not think a solution will be achieved in the next two years, but we do think it is a solvable problem * [ ] we think our chosen problem is never-ending and will never be "resolved" * [ ] other: __________________ ### How it started **Q:** *Which of the following best describes the status of the initiative or aspiration at the start of the year?* (Usually just one check-box should suffice here; if you check off "other", please do fill in the blank with text so we can better understand your status.) * [ ] at start of 2022, we did not know about any problems in this domain. * [ ] at start of 2022, we knew a problem existed, but we did not yet have a specific goal in mind for solving the problem. * [ ] at start of 2022, we had a solution or goal in mind, but did not have a plan for how to achieve it. * [ ] at start of 2022, we had a plan for how to achieve a specific goal, but we did not have intermediate progress points (aka "milestones") established. * [ ] at start of 2022, we had a plan with milestones, but none of those milestones had been accomplished. * [x] at start of 2022, we had a plan, some of which had been completed, but more work remained to be done. * [ ] at start of 2022, we had a plan, but based on what we had completed so far, it did not solve the problem; the plan needed revision. * [ ] at start of 2022, we had completed most of our plan; our main focus was polish and getting the work into the hands of Rust users. * [ ] other: __________________ ### How it's going **Q:** *Which of the following best describes the status of the initiative or aspiration today, i.e. at the time you are responding to these questions (check all that apply):* * [ ] we need help figuring out what has happened on this ambition since the start of the year * [ ] we would like help deciding what to do next * [ ] we understand the problem better than we did at the start of the year * [ ] we have a high-level end-to-end plan to solve the problem * [ ] we have milestones that represent individual units of work for the near term that each make progress towards a solution * [ ] we have Rust contributors who have agreed to help with the units of work that we have identified * [ ] we have a schedule that spells out when we expect the benefits of our work will be in the hands of Rust users * [x] we have completed some of our milestones * [ ] we think we have implemented a solution to the problem, but most of our work has not yet landed in hands of Rust users * [ ] (some of) our work has reached Rust programmers but we do not know if it has improved Rust for them * [x] (some of) our work has reached Rust users and (what we learn of) their usage is informing our plans going forward * [ ] other: __________________ ## Open-Ended Questions :::info These questions are light on reading and very open-ended. Write whatever you like in your responses here. If you feel like everything you cared to report was covered by your responses in the first section, then you need not respond to any of the open-ended questions. ::: ### Progress itself **Q:** *What progress have you made so far? What surprises have you encountered?* We moved the GATs implementation from "close to ready to stabilize" to "ready to stabilize" - at least in our eyes. This included added a "self outlives lint", changing the recommended location of GAT where clauses, patching future-compatibility traps, and fixing smaller papercut bugs. After opening a stabilization PR, there was a non-insignificant amount of pushback. In the time sense, we've considered how to better message the current state of the implementation - specifically how we see stabilization as a stepping stone in the overall adoption of GATs, with obvious ergonomic and technical (mainly around HRTBs) limitations being future work. ### Community development **Q:** *Did you get any new contributors so far this year? How many new people showed up? How many seem to have stuck around? Do you need assistance with mentoring capabilities?* There has not been much community involvement in the implementation, but many people have shown up to express their support (or dissent) in the stabilization PR. ### Retention and Priorities **Q:** *Did you or any of your collaborators end up shifting your Rust-related activity to a different project? If so, which project?* Yes, *sort of*. Since the opening of the stabilization PR and following pushback, progress has been slow. That has, in part, been to try to incorporate work from other projects (NLL, a-mir-formality) into the "stabilization package" - either through direct improvements (from NLL) or a more clear future (through modeling of GATs in a-mir-formality). However, there are other bits of work (writing docs, triaging new issues) that *could* be done in parallel that have been somewhat partially neglected. **Q:** *If you answered "yes" above: What made you or your collaborators decide to change focus? (example responses: "X was more interesting to me", "Y was a more important problem to address", or "I had an easier time making forward progress on Z")* Personally, for me (Jack), switching to getting NLL stabilized was a nice change of pace. In a sense, it was "low-hanging fruit" and was a helpful mental break from pushing so hard on GATs for the past year. **Q:** *In your opinion: What important things are we **not** doing because you and your collaborators are focused on this project (in other words, what might you have done instead of this)? How did you decide to focus on this project?* For me, if I hadn't been working on GATs for the past year or so, I would have instead been pushing harder on Chalk and librarifcation. In particular, there are fundamental questions, e.g. associated type normalization, to solve there. Recent work with a-mir-formality has started to help answer those. In the meantime, GATs were at a state that they were "unblocked", had significant interest, and are a requirement for other language (async fns in traits) and lib (LendingIterator) features. **Q:** *What observations/learnings would lead you to switch your focus to a different project within Rust? Are such observations/learnings currently visible to you?* At this point, when initial stabilization has completed, it would probably be best to pause and react to community feedback and usage.