2019-11-14 Compiler Team Triage Meeting

Nov. 19, 2019 · Wesley Wiser on behalf of the compiler team

The compiler team had our weekly triage meeting on 2019-11-14. You can find the minutes on the compiler-team repository. Each week, we have general announcements from the team followed by check-ins from two of the compiler team working groups.

Announcements

  • Request for assistance: "Rustc panics (NoSolution): could not prove Binder(projection soup)" #65581

  • Request for assistance: "Rust 1.38 regressions weren't fully triaged" #65577

  • Request for assistance: "Miscompilation with target-cpu=znver1 (AMD Ryzen 1000/2000 series) on Windows + LLVM 9." #63959

  • @cjgillot replaced a lot of TypeFoldable impls with a derive #66384

  • The Infra team has finished evaluating GitHub Actions and we're switching!

    • This will have a signficant, positive impact on CI build time.
  • @centril is fixing useless <std macros> spans #66364

Working group sync

This week we heard from three working groups because we ran out of time in the previous meeting.

wg-polonius

  • Made a lot of progress on the completeness goals with move/initialization errors and subset errors both getting close to completion.

  • Fixed the last failure in the rustc test suite.

    • There are still the same 2 OOMs as last time, we haven't had much time to look at those yet.
  • Made diagnostics output match NLL in a lot more cases.

  • Did some cleanup in our terminology by picking better names for our atoms hopefully making it clearer in the process, and more work is planned here.

    • "origin" instead of "region"
    • "path" instead of "MovePath"
  • There is a polonius book now! It's sparse at the moment but more documentation work is in-flight and planned.

  • The exploration and prototype on the rules offering more flow-sensitive precision for the analysis has also progressed a lot.

  • There's also been some refactoring, and quite a bit of work on performance. Since the latter can step on the other work and vice-versa, we decided to focus on completeness first, and then after that has been achieved, re-adapt and land the optimization work.

  • @nikomatsakis did a presentation on Polonius at RustBelt Rust. Slides

  • @albins has finished their master's thesis and is currently rewriting most of the draft.

  • We hope to have a "polonius work week" at the end of November to push the in-progress work over the finish line together.

wg-self-profile

  • We've nearly completed our long standing MVP goal!

    • @simulacrum has done some nice work to polish the integration with perf.rlo
    • We've added tracking for all the events we're aware of that should be traced with the exception of trait selection.
      • We could really use some input as to what would be helpful to track!
  • @mw has been working on some changes to the binary format we record events in.

    • The new format is more compact so results in a smaller trace file and hopefully less runtime overhead.
    • The new format is also more amenable to recording query keys, which is a highly requested feature.
  • @wesleywiser has added some crate level docs to make getting into the code easier.

  • @wesleywiser also added code to record process id, start time, and arguments to the trace file which we've started using.

  • @andjo403 has been a roll with a lot of great PRs!

    • We now have a dedicated tool for generating flamegraphs directly so you don't have to use the Perl scripts anymore.
    • Some internal refactoring that makes adding new tools easier.
    • Lots of work on the Chromium dev tools exporter:
      • New option to collapse disjoint threads so it's a little more manageable
      • New option to filter out small events under a configurable threshold (necessary for very large compilations)
      • You can now have multiple crate compilations in the same export file. This is similar to what cargo build -Z timings can do but much more detailed.

wg-rls-2.0

  • Work is procedding on splitting core of rust-analyzer into crates.

  • Find usages is implemented.

  • Macro expansion now can map source ranges to expanded ranges, so goto def correctly goes "inside" macro call.

  • More chalk an type inference work, specifically, support for closures.

  • There's ongoing discussion about the general planning about rustc, rls, and rust-analyzer.