# wg-traits meeting agenda and dev log ## Instructions During the week, find the section for the upcoming meeting. Add into the "Log of notable events" any interesting things that you did -- PRs opened, notes made, problems encountered. Then add to the Agenda possible topics for focused discussion. During the meeting we'll focus on some of the agenda items, and we'll add a link to the Zulip topic so you can read the details. ## Current sprint The current sprint runs from 2020.05.26 to 2020.07.07. You can find our [sprint goals here](https://hackmd.io/D_wskAmRT52zL9xmhmg0Kg). # Upcoming meeting topics # Previous meeting topics ## [2021.03.30] * Type library and planning ## [2020.10.20] **To discuss** * In progress work * Binder refactor ([rust#76814]) * ~~Binder `map_bound_ref` ([rust#77685])~~ * `TyKind` -> `TyData` ([rust#77768]) * Subtyping/variance ([chalk#609]) * Sem/syn equality ([chalk#589]) * Const evaluation ([chalk#596]) [rust#76814]: https://github.com/rust-lang/rust/pull/76814 [rust#77685]: https://github.com/rust-lang/rust/pull/77685 [rust#77768]: https://github.com/rust-lang/rust/pull/77768 [chalk#609]: https://github.com/rust-lang/chalk/pull/609 [chalk#589]: https://github.com/rust-lang/chalk/pull/589 [chalk#596]: https://github.com/rust-lang/chalk/pull/596 ## [2020.09.29] **To discuss** * Issue [#77187](https://github.com/rust-lang/rust/pull/77187): What do we need to do for >1 type parameters on fundamental types? * Issue [#76814](https://github.com/rust-lang/rust/pull/76814): Is it potentially worth it to have a prelim PR that adds a `rebind` function to `Binder`? * `dummy`: adds a level of binding *without* allowing capturing escaping vars (enforced) * `bind`: potentially captures escaping vars * `rebind`: (potentially) recaptures escaping vars * would rather use `map`/`map_ref`, but this isn't possible in a lot of cases currently * `wrap_nonbinding`: adds a level of binding, shifting vars to avoid captures * Design meeting: Wellformed **Action items** * Open issue for coherence rules with >1 param (Jack) * Open PR to import coherence doc into book (Jack) * Open PR for new coherence rules with >1 param (anyone, Jack) * Prepare discussion points for WF design meeting (Jack) * Post a summary of `Kind` changes to MCP topic (Jack) ## [2020.09.22] * Topic: placeholder canonicalization ## [2020.09.15] **Action Items** * File issue for adding `ReStatic` (Jack) * Review conversation on placeholder canonicalization (Niko, all) ## [2020.09.08](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/meeting.202020-09-08) **Meeting notes** * Sprint planning * https://hackmd.io/s1MfBn4bRjyir-aqHZzbKQ ## [2020.09.01](https://zulip-archive.rust-lang.org/144729wgtraits/51412meeting09012020.html) **Action Items** * Review Chalk upgrade PR (#75173) (Niko) * Add rustc-chalk integration tracking issue (Jack) * Elaborate on opaque types WF w/ implied bounds (detrumi) * File issue for auto and builtin traits with builtin types (Jack) * Update well known traits table for closures extern types (Jack) * Update skill tree (Niko) **Meeting notes** * Catching up from the summer * chalk/rustc integration (no issue) * rust#75173 -- needs review * next steps: * variance * placeholder canonicalization * params * chalk-ty lib extraction ([rust-lang/wg-traits#16](https://github.com/rust-lang/wg-traits/issues/16)) * rust#75077 -- basically ready to land, but blocked on the question of whether to return `&TyKind`; [we hit some complications trying to do so](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/fn.20kind%28%29.20-.3E.20TypeKind.20or.20-.3E.20.26TypeKind/near/208444172) * builtin traits ([rust-lang/chalk#363](https://github.com/rust-lang/chalk/issues/363)) * need `Unpin`, `CoerceUnsied`, `DispatchFromDyn` * builtin types([rust-lang/chalk#368]) * generators ([chalk#593]) and extern types * recursive solver * opaque types ([tracking issue](https://github.com/rust-lang/chalk/issues/335#issuecomment-615254659)) * chalk#559 -- needs tests fixed so it can be merged * chalk#579 -- waiting for r+ * auto traits with builtin types * good starter issue * builtin traits with builtin types * sem-syn inequality * pending PR chalk#589 but causes some perf regressions in rust-analyzer that will require investigation * variance and subtyping * [chalk#520] -- needs some testing [chalk#593]: https://github.com/rust-lang/chalk/pull/593 [chalk#520]: https://github.com/rust-lang/chalk/pull/520 ## [2020.06.02](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/meeting.2006.2E02.2E2020/near/199544881) ### Notes from meeting * chalk 0.11.0 was published last week :tada: * also some crate structure refactors * some talk about making the solver more parallel * opaque types are [getting close](https://github.com/rust-lang/chalk/issues/335#issuecomment-615254659) * discussion on [subtyping](https://github.com/rust-lang/chalk/issues/418), variance ## [2020.05.26](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/design.20meeting.202020.2E05.2E26) ### Agenda and possible topics * Possible future meeting topics * implied bounds -- continuing from last meeting * how to manage consts in chalk writer * shared type library next steps * wf checks on types * chalk's support for coherence ## [2020.05.12](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/design.20meeting.202020.2E05.2E12) ### Agenda and possible topics * Minutes updating on rust-lang/wg-traits (last is 2020.03.03) * Will also close meeting issues * Sprint overview * Blog post? * Next sprint planning ### Log of notable events, please feel free to add * rustc Chalk integration MVP PR landed ## [2020.05.05](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/design.20meeting.202020.2E05.2E05/near/196359047) ### Agenda and possible topics * Decide on the approach for dealing with const types * ObjectSafe(Trait) ### Log of notable events, please feel free to add * ## [2020.04.28](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/design.20meeting.202020.2E04.2E28/near/195618205) ### Agenda and possible topics * Sprint progress - 2 weeks left * Release? * Mdbook linkcheck - should we block * `from_fallible` on `Interner` list-like types * Implied bounds ## [2020.04.21](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/design.20meeting.202020.2E04.2E21/near/194853430) ### Agenda and possible topics * Design meeting: discuss implied bounds ([tracking issue](https://github.com/rust-lang/wg-traits/issues/17)) ### Log of notable events, please feel free to add * The [recursive solver](https://github.com/rust-lang/chalk/pull/372) was added as an alternative to the existing solver * Basic support for [`impl Trait`](https://github.com/rust-lang/chalk/issues/335) landed * Added support for the [`Copy`, `Clone` and `Drop`](https://github.com/rust-lang/chalk/pull/385/files) traits * The new-style trait solving chapter was moved from [rustc-dev-guide](https://rustc-dev-guide.rust-lang.org/traits/index.html) to the [chalk book](https://rust-lang.github.io/chalk/book/clauses.html) * ## [2020.04.14](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/design.20meeting.202020.2E04.2E14/near/193949693) ### Agenda and possible topics * crate.io release * Where should "builtin" types go? `chalk-ir` or `chalk-rust-ir`? ([#368](https://github.com/rust-lang/chalk/issues/368) and [#371](https://github.com/rust-lang/chalk/pull/371)) * If in `chalk-rust-ir`, `chalk_ir::ApplicationType.name` would have to an associated type on `Interner`. And then `chalk_solve` would have to have some way to constrain this for a fixed set of types. * rustc integration * `RegionOutlives`, `TypeOutlives` * We need some way to register `Constraint`s. * `LifetimeEq` -> `Outlives`? * `Subtype` * What to do here? How do we handle super traits currently? * State of "old" PRs * https://github.com/rust-lang/chalk/pull/230 * https://github.com/rust-lang/chalk/pull/277 * https://github.com/rust-lang/chalk/pull/331 * Not enough sprint issues for the many new contributors ### Log of notable events, please feel free to add * 8 PRs merged (11 if you include those merged last Tuesday) * 11(!) open now too ## [2020.04.07](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/design.20meeting.202020.2E04.2E07/near/193239347) ### Agenda and possible topics * Discuss what to do about const generics ([tracking issue](https://github.com/rust-lang/wg-traits/issues/15)) ### Notes from meeting * created [hackmd](https://hackmd.io/n0Um5UtyS8md4l9r7B8rCw) with notes ### Log of notable events, please feel free to add * rustc integration is getting close * many Chalk PRs in a lot of areas * extending `TypeName` * built-in traits like `Sized`, `Drop`, `Copy`, and `Clone` * adding a `Visitor` * an open PR for the recursive solver * impl Trait * Progress towards leak check removal in rustc ## [2020.03.31](https://zulip-archive.rust-lang.org/144729wgtraits/61131designmeeting20200331.html) ### Agenda and possible topics * We discussed the sprint goals, got into more details, and enumerated planned meetings ### Notes from meeting ### Log of notable events, please feel free to add * Sprint start * Landed PR to [count binders, not variables](https://github.com/rust-lang/chalk/pull/360) * Landed initial work on [builtin traits](https://github.com/rust-lang/chalk/pull/359) * Landed [stopgap measure for builtin traits](https://github.com/rust-lang/chalk/pull/367) ## [2020.03.24](https://zulip-archive.rust-lang.org/144729wgtraits/26669designmeeting20200324.html) ### Agenda and possible topics * Sprint is over - retrospective * Next sprint - March 31st to May 12th? * Goals/Topic * Goal: Rustc integration MVP * In this version: * rustc types are converted to chalk types deeply and eagerly * region integration is basically ignored, so not sound * chalk is responsible for generating builtin trait rules, and those may be approximated in some cases * constants are not handled, they are translated to `()` type for now * closures and the fn traits are "reach items" * unsizing is out of scope * Work items (required): * Write code to eagerly, deeply convert rustc types to chalk types * Define builtin traits mechanism * Implement rules for Sized * Implement rules for Clone * Implement rules for Copy * Some kind of interim solution `*Outlives` and `Subtype` * Land Jack's branch :) * Work items (reach): * Implement rules for `Fn` traits as applied to fn-def and closures * Goal: Plan for what const integration looks like * Hold a design meeting, or multiple * Goal: Move towards alignment of rustc and chalk types, and towards extracting a shared library * Adopt "count binder"-style debruijn indices (in progress, carried over) * Adapt *rustc* to support binder lists and (perhaps) indices in late-bound regions ([discussion](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/debruijn.20indices.20and.20bound.20variables.20chalk.23334/near/191636362)) * Extend chalk with types like Rustc's `FnDef` and `Closure` * In some order: * Adapt *rustc* to use `ty.kind(tcx)` instead of `ty.kind` * Align names of rustc and chalk types (eg., `GenericArg`) * Extract or identify items from rustc that would ultimately live in the new library * Goal: basic support for impl Trait * Land existing PR * Accomodatic generic opaque types fully * Lazy access of hidden type * Well-formedness rules for opaque types * Goal: progress towards removing leak check in rustc * Next step: extend NLL solver with the notion of * Goal: exploration and research * exploring recursive solver (flodiebold) * explore converting semantic-to-syntactic equality * create a chalk file from any given program * Goal: increase Chalk performance (very open-ended) * Create a set of benchmarks * Add tracing support (in progress) * Track memory usage and try to decrease as necessary * Creating a .chalk from a given program for reproducing * See https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/.22skill.20tree.22/near/190652842 to add to skill-tree? * rustc integration: `TypeOutlives`, `RegionOutlives`, `Subtype` * `*Outlives` are `WhereClause` variants, `Subtype` is `GoalKind` * Possible issue with `any_future_answer`/`MayInvalidate`: https://github.com/rust-lang/chalk/pull/331 ### Log of notable events, please feel free to add * Niko pushed more on debruijn branch, making some progress ## [2020.03.17](https://zulip-archive.rust-lang.org/144729wgtraits/92207designmeeting20200317.html) ### Agenda and possible topics * Design meeting of compiler to discuss extracting a rust-ty library -- nikomatsakis * How does this work interact with this group? Maybe a good thing for next sprint * Rustc integration blocking items (for next sprint?) * `Sized` and other built-in Traits * Fn and closures * Next sprint planning? ### Notes from meeting Ongoing things from this sprint * modeling impl Trait * making the Interner a value that gets passed around (probably.. 75% done) * exploring the recursive solver (yay @Florian Diebold) * exploring rustc integration (the most nebuluous, but we've definitely made progress) * tracing (added:) Discussing next sprint topics * Goal: extending the `interner` data methods to have `&self` * yaahc has made great progress here, we need to land and maybe tweak it * Goal: implement the "builtin traits" * Possible goal: rustc refactors to move closer to chalk-ir model * e.g., `ty.kind` to `ty.kind(tcx)` * Goal: continue exploration of recursive solver * flodiebold has made great progress here * Goal: explore equivalence edges * Goal: move to tracing * Possible goal: refactor NLL solver in rustc to further the work in removing the leak check (is this really wg-traits?? maybe not. --niko) * Goal: complete the *chalk part* of impl Trait modeling * i.e., given that some other layer is managing the inference of the hidden type ### Log of notable events, please feel free to add * Niko [updated a gist exploring how to the "debruijn index" question](https://gist.github.com/nikomatsakis/fe440aec437f7e8ad4cce8319954a973) * Niko was [updating roadmap slightly](https://github.com/rust-lang/wg-traits/pull/14) to account for function/closure types, which are baked into rustc's trait matching just a it ## [2020.03.10](https://zulip-archive.rust-lang.org/144729wgtraits/33448designmeeting20200310.html) ### Agenda and possible topics * Design meeting of compiler to discuss extracting a rust-ty library -- nikomatsakis * How does this work interact with this group? Maybe a good thing for next sprint * How to handle debruijn and type parameter indexing? -- nikomatsakis * building on [the gist](https://gist.github.com/fe440aec437f7e8ad4cce8319954a973) that I wrote, I'm not sure what to do * Expected pattern for integrating impl Trait into rust-analyzer etc -- nikomatsakis * I'd like to understand better what detrumi + flodiebold were discussing -- nikomatsakis * rustc integration: `TypeOutlives`, `RegionOutlives`, `Subtype` ### Log of notable events, please feel free to add * yaahc made a number of PRs related to [chalk#340](https://github.com/rust-lang/chalk/issues/340), adding `&self` to all the other interning methods besides typing * yaahc opened a "WIP" PR * flodiebold [resurrected the recursive trait solver](https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/recursive.20solver) from older versions of chalk * flodiebold + detrumi explored integration of impl Trait into rust-analyzer * nikomatsakis pursued debruijn interation and encountered some questions, started writing [a gist](https://gist.github.com/fe440aec437f7e8ad4cce8319954a973) that explains how things work today * goal is to eventually produce a proposal :)