owned this note
owned this note
Published
Linked with GitHub
# wg-traits sprint 2020-05-26 .. 2020-07-07
[Previous sprint goals](https://hackmd.io/kYWsWI9IS0213x0qX_1RDw?both)
* Goal: chalk crate structure and publishing
* **Who?** jackh726 to mentor, mcat12, pksunkara
* Releases: We are making weekly releases which permits a regular integration cycle. There is some doubt as to whether to continue this setup
* Bors: We would like to setup bors.
* Crate structure:
* Currently exploring "inverted" struture, where the SLG and recursive solver crates take chalk-solve, chalk-ir and so forth as dependencies.
* This means they can work with concrete types and we don't require as many traits.
* We have a sample PR.
* Goal: improve caching strategy for recursive solver
* **Who?** nikomatsakis, flodiebold, others
* Extended the chalk book with documentation for the recursive solver
* Laid out a plan to handle salsa integration, where salsa is extended to handle monotonic cycles.
* Laid out a plan for exending the recursive solver to handle co-induction as well.
* Encountered one other obstacle, in recursive solver means we are not strictly monotonic.
* Opened PR with support for negative cycles, but then realized we may not want them. We have to explore specialization a bit more to be sure.
* Goal: GAT support in rustc
* **Who?** Matthew Jasper has been pushing this
* [ ] Introduce ForAll and Implies predicates
* [x] Associated type bounds refactor part 1: ([PR 72788](https://github.com/rust-lang/rust/pull/72788))
* Goal: Extracting a shared library representing types ([tracking issue](https://github.com/rust-lang/wg-traits/issues/16))
* **Who?** nikomatsakis to mentor
* [x] Intern predicates in rustc ([PR 72055](https://github.com/rust-lang/rust/pull/72055))
* [x] Recover performance from PR 72055
* [ ] Refactor rustc binders to include kinds, so that we can represent `forall<T>` and friends ([PR 73503](https://github.com/rust-lang/rust/pull/73503))
* [ ] Create MCP for the `kind` and `kind(tcx)` refactorings
* [ ] Refactor rustc to use the `kind()` pattern and have generic types
* [ ] Refactor chalk to use the `Kind` naming scheme (?)
* [ ] Adjust the variants for types and lifetimes to be closer to chalk
* [ ] Refactor how rustc handles late-bound lifetimes so that they always have clear indices, and we store the kinds in the binder
* [ ] Stretch: Align rustc folders and visitors
* Goal: increase Chalk performance (very open-ended)
* **Who?** Jack to mentor
* [ ] Create a set of benchmarks
* [x] Add tracing support
* opened a [draft PR](https://github.com/rust-lang/chalk/pull/409)
* [ ] Track memory usage and try to decrease as necessary
* Goal: experiments
* **Who?** Jack to mentor
* [ ] Using equivalence edges in SLG -- did some exploration but found that the work on distinguishing semantic vs syntactic equality would be useful.
* Goal: Writing a `.chalk` file
* **Who?** Jack to mentor, super-tuple, David Ross
* Landed initial prototype, need to do some experimentation and gradual improvements.
* Next step is to integrate into rust-analyzer and document, then do experimentation and gradual improvements.
* Goal: improve opaque types support ([checklist](https://github.com/rust-lang/chalk/issues/335#issuecomment-615254659))
* **Who?** detrumi
* [x] Add support for "where clauses"
* [ ] Well-Formed checks
* [ ] Implied bounds interactions
* [ ] Documentation
* Goal: extend chalk to support Rust semantics
* **Who?** jackh726, nikomatsakis
* Chalk now supports nearly all of the Rust types (see [chalk#368](https://github.com/rust-lang/chalk/issues/368), including closures and function definitions, and we are working on adding support for generators and ADTs.
* Chalk now supports integer and float literal inference variables.
* We have been updating rustc to make use of that support, making everything cleaner.
* We are now working on extending chalk to be able to support subtyping and not just type unification. [#418](https://github.com/rust-lang/chalk/issues/418)
* [ ] Auto trait handling for builtin chalk types
* Goal: Handle region constraints in rustc integration
* **Who?** Jack
* We integrated lifetime-outlives goals into chalk and are working on making the mechanism more elegant in [#538](https://github.com/rust-lang/chalk/pull/543).
* We need to extend rustc to translate the chalk region constraints back into rustc region constraints.
* Goal: const generics and chalk
* **Who?** Areredify, nikomatsakis
* We didn't do much on this in the current sprint. Current status is that chalk supports the basics of const generics but we still need to extend it with more complex notions such as associated constants and working out the full story around unevaluated constants.
* Goal: semantic vs syntactic equality
* **Who?** Areredify, nikomatsakis
* We identified some bugs in how chalk was handling canonicalization and closed them.
* We would like to cleanup how that code works [#512](https://github.com/rust-lang/chalk/issues/512) and then dust off some of the existing PRs.
* Goal: Document solver details in the Chalk book
* [x] Basics of the recursive solver (it's getting a lot more attention)
* [ ] The `?0`, `^0`, `!0` notations
* [ ] What is a "bound variable", an "inference variable", and a "placeholder variable", and what do they *mean* semantically