Hello, world!
We’re trying to get this traits working group going full steam, and this thread is a place for us to note down the results from our meetings. Our meetings are typically held on Zulip and you can find them scheduled under the compiler-team meeting calendar. Come join us!
3 Likes
Info
Zulip thread.
Summary
The goal of the meeting was to try and figure out, in somewhat more
detail, how we want to organize the traits working group itself. We’ve
been doing work on enumerating and triaging the set of things we hope
to do, but in this meeting we were basically trying to come
up with some concrete next steps.
Ultimately we identified the following next steps:
- Schedule a meeting to dig into some of the lifetime problems around
async-await. This is kind of an “intersecting” issue between async await
and the traigs WG, but seems high priority. (nikomatsakis)
-
Explore the use cases for lazy normalization, trying to create a summary
of exactly which test cases are causing problems and why, and what it might
take to fix them (can it be done without a full chalk transition?). (nikomatsakis)
-
Explore the use cases for GATs, trying to find a set of specific examples
from async-await and other contexts. It seems likely that we could do an initial
impl of GATs in rustc without chalk, but would it be enough? (aturon, centril)
- Schedule a meeting to dig into the chalk transition – what is
current status and what are the possible future routes, what should
we be exploring? (nikomatsakis, scalexm)
- Get tests plus FCP around
type Foo = impl Bar
(centril)
In general, we’re trying to get a sense for what the initial set of
active ‘subprojects’ will
be
(basically, the things that the WG is focusing on). Ideally, each of
them will have a distinct “lead” (or, better, leads!) who is driving
the effort (in collaboration with the rest of us).
A likely set of initial subprojects will contain:
- some amount of hacking on rustc (GATs, lazy norm) in an effort to “relieve the pressure”
- some amount of hacking on chalk itself and on chalk integration
- some amount of work on defining the semantics of other features like
specialization by lowering them to chalk predicates
but that is not certain. A key drive is both the set of people we have
involved and also what seems to be highest priority in terms of
unblocking other things within Rust.
2 Likes
Info
Zulip thread.
Summary
We followed up on the goals from last time.
Lifetime problems around async-await
We
discussed
how we found a way to resolve the async fn
complications by changing
the async fn desugaring, and hence don’t need any deep trait
action. We are still
interested
in trying to find a way to solve the “captures problem” for impl
Trait, however, and alexreg and nikomatsakis may do some follow-up
there.
Explore use cases for lazy normalization
Some investigation occurred. Current plan
to continue documenting the way that the current normalization code
plays out and to hold some sort of meeting to document that and walk
through it. That meeting will hopefully happen this week and will be
recorded.
Explorse use cases for GATs
Not a lot of progress here. (Yet!)
Once we do make progress, though, the logical next
step
is probably to try and model those use cases some in Chalk, as well as
to investigate more deeply how rustc could be extended to handle the
cases natively (without blocking on full chalk integration).
Dig into the chalk transition
We have a meeting scheduled for tomorrow with the RLS 2.0 folks, planning to talk about how the type checker is working in that context.
We are thinking that integrating Chalk first into the RLS 2.0
project may be a better idea than starting with
rustc,
particularly as it can help get RLS 2.0 to a “working product” faster,
but also because we may be able to use that to pursue the idea of
sharing more code between chalk + compiler than we could readily do
with rustc. Specifically, we should be able to have:
- a library to share the definition of types between chalk + RLS 2.0
- shared code for lowering traits + impls into logical rules
We also talked about other possible work on chalk, in particular the
idea of chalk-specific refactorings but also building a benchmarking
harness
for the chalk-engine
crate.
Miscellaneous discussion
There are a few other things we talked about this week:
Plans for the coming week
We settled on the following plans for the coming week:
So plans for this week are:
- Describe how normalization works today and hold a (recorded) call to
try and explain it to others. Trace through some of the examples
where lazy norm would be helpful. (nikomatsakis)
- Explore the use cases for GATs (aturon, centril)
- Discuss RLS 2.0 type checker and contemplate how to integrate chalk
into it (nikomatsakis, scalexm)
- Maybe discuss other chalk improvements? (e.g., benchmarking harness) (nikomatsakis)
- Maybe discuss the “lifetime capture” problem in impl Trait? (nikomatsakis, alexreg)
3 Likes
Info
Zulip thread
Help wanted!
- nikomatsakis is looking for someone to help with investigating lazy
normatlization. The task would be to experimentally modify rustc and
is best suited to someone already vaguely familiar with the Rust query
system etc. See below.
Summary
We followed up on the goals from last time.
Lazy normalization and const generics
Link
Last week, nikomatsakis did more investigation, taking notes in this
dropbox paper document. In general, it's still not entirely
clear if the "cycle" that gives rise to the need for lazy
normalization is something we can easily circumvent. One thing is that
the generics_of
and other queries for "anonymous constants"
currently use the incorrect parent def-id precisely to avoid a cycle,
so it's hard to see how the cycle would manifest.
Next step: re-establish the cycle in those queries so it can be observed.
GATs
Link
centril + aturon drew up a paper document containing GAT use
casts and there are some notes from the conversation in this
Zulip thread.
Next step: unclear, but probably to investigate the use cases and
make some comments.
Integrating into RLS 2.0
Link
We had a chat (with
video) about how the RLS
2.0 type checker works. We decided we'd rather try to do the chalk
integration into RLS 2.0 "correct", meaning that we can share a lot
more code with chalk.
Next step: nikomatsakis to schedule some time to sketch out what chalk integration would look like.
Other chalk improvements
Maybe discuss other chalk improvements? (e.g., benchmarking harness) (nikomatsakis)
This didn't happen and we'll probably shelve it for now in favor of the previous point.
"lifetime capture"
Maybe discuss the "lifetime capture" problem in impl Trait?
This didn't happen and we'll probably shelve it for now in favor of the next point.
Draft RFCs
centril plans to (at minimum) upload some draft RFCs to a new wg-traits repository.
Associated type bounds
alexreg has been working on associated type bounds in this Zulip
thread and will likely continue to do so.
Plans for the coming week
- Try to correct the
generics_of
query etc for constants so we can
observe what results.
- Help wanted! nikomatsakis is looking for someone to help
with investigating lazy normatlization. The task would be to
experimentally modify rustc and is best suited to someone
already vaguely familiar with the Rust query system etc.
- Read-over GAT use cases and try to theorize about what it would take to
support them in rustc etc (nikomatsakis)
- Schedule a call to talk over what chalk integration into RLS 2.0 might look like (nikomatsakis)
- Create a wg-traits repository to house draft RFCs and the like. (nikomatsakis)
- Upload drafts of various traits-related RFCs to wg-traits (centril)
- Continue work on associated type bounds (alexreg)
1 Like
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.