2019-11-14 编译器团队分诊会议

2019年11月19日 · Wesley Wiser 代表 编译器团队

编译器团队于 2019-11-14 召开了每周分诊会议。您可以在 会议记录 中找到,该记录位于 compiler-team 仓库。每周,我们会先发布团队的通用公告,然后由两个编译器团队工作组进行汇报。

公告

  • 寻求协助:"Rustc 崩溃 (NoSolution):无法证明 Binder(projection soup)" #65581

  • 寻求协助:"Rust 1.38 回归问题尚未完全分诊" #65577

  • 寻求协助:"在 Windows + LLVM 9 上,target-cpu=znver1 (AMD Ryzen 1000/2000 系列) 发生错误编译。" #63959

  • @cjgillot 用 derive 替换了许多 TypeFoldable impls #66384

  • 基础设施团队已完成对 GitHub Actions 的评估,我们正在切换!

    • 这将对 CI 构建时间产生重大而积极的影响。
  • @centril 正在修复无用的 <std macros> 跨度 #66364

工作组同步

本周我们听取了三个工作组的汇报,因为上次会议时间不足。

wg-polonius

  • 在完整性目标方面取得了很大进展,移动/初始化错误和子集错误都已接近完成。

  • 修复了 rustc 测试套件中的最后一个失败项。

    • 仍然存在与上次相同的 2 个 OOM (内存不足) 问题,我们还没有太多时间去研究它们。
  • 在更多情况下使诊断输出与 NLL 匹配。

  • 通过为我们的原子选择更好的名称来清理术语,希望能使过程更清晰,并且计划在这里进行更多工作。

    • 用 "origin" 代替 "region"
    • 用 "path" 代替 "MovePath"
  • 现在有了一本 polonius 书!目前内容还不多,但更多文档工作正在进行并已计划。

  • 提供更流程敏感(flow-sensitive)分析精度的规则的探索和原型开发也取得了很大进展。

  • 还进行了一些重构,并在性能方面做了不少工作。由于性能工作可能会影响其他工作,反之亦然,我们决定先专注于完整性,待其实现后再重新调整并落地优化工作。

  • @nikomatsakis 在 RustBelt Rust 会议上做了一个关于 Polonius 的演讲。幻灯片

  • @albins 已经完成了他们的硕士论文,目前正在重写大部分 草稿

  • 我们希望在 11 月底举行一次“polonius 工作周”,以便一起将进行中的工作推向终点。

wg-self-profile

  • 我们几乎完成了长期以来设定的 MVP(最小可行产品)目标!

    • @simulacrum 做了一些出色的工作来完善与 perf.rlo 的集成
    • 我们已经添加了对所有已知应跟踪事件的跟踪,除了 trait 选择。
      • 关于哪些内容有益于跟踪,我们非常需要一些输入!
  • @mw 一直在研究我们记录事件的二进制格式的一些更改。

    • 新格式更紧凑,因此生成更小的跟踪文件,并有望减少运行时开销。
    • 新格式也更适合记录查询键(query keys),这是一项强烈需要的功能。
  • @wesleywiser 添加了一些 crate 级别的文档,以便更容易理解代码。

  • @wesleywiser 还添加了代码来记录进程 ID、开始时间和参数到跟踪文件中,我们已经开始使用这项功能。

  • @andjo403 提交了许多出色的 PR,进展顺利!

    • 我们现在有了一个专门的工具可以直接生成火焰图(flamegraphs),因此不再需要使用 Perl 脚本了。
    • 一些内部重构使得添加新工具更加容易。
    • 在 Chromium 开发者工具导出器上做了大量工作
      • 新增选项可折叠不相交的线程,使其更易于管理
      • 新增选项可过滤掉低于可配置阈值的小事件(对于非常大的编译很有必要)
      • 现在可以在同一个导出文件中包含多个 crate 的编译信息。这类似于 `cargo build -Z timings` 的功能,但提供了更多细节。

wg-rls-2.0

  • 将 rust-analyzer 核心拆分成多个 crate 的工作正在进行中。

  • 查找用法(Find usages)功能已实现。

  • 宏展开现在可以将源代码范围映射到展开后的范围,因此“跳转到定义”(goto def)可以正确地进入宏调用“内部”。

  • 更多 chalk 和类型推断(type inference)工作,特别是对闭包(closures)的支持。

  • 关于 rustc、rls 和 rust-analyzer 的总体规划正在进行讨论。