编译器团队于 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
-
基础设施团队已完成对 GitHub Actions 的评估,我们正在切换!
- 这将对 CI 构建时间产生重大而积极的影响。
工作组同步
本周我们听取了三个工作组的汇报,因为上次会议时间不足。
wg-polonius
-
在完整性目标方面取得了很大进展,移动/初始化错误和子集错误都已接近完成。
-
修复了 rustc 测试套件中的最后一个失败项。
- 仍然存在与上次相同的 2 个 OOM (内存不足) 问题,我们还没有太多时间去研究它们。
-
在更多情况下使诊断输出与 NLL 匹配。
-
通过为我们的原子选择更好的名称来清理术语,希望能使过程更清晰,并且计划在这里进行更多工作。
- 用 "origin" 代替 "region"
- 用 "path" 代替 "MovePath"
-
现在有了一本 polonius 书!目前内容还不多,但更多文档工作正在进行并已计划。
-
提供更流程敏感(flow-sensitive)分析精度的规则的探索和原型开发也取得了很大进展。
-
还进行了一些重构,并在性能方面做了不少工作。由于性能工作可能会影响其他工作,反之亦然,我们决定先专注于完整性,待其实现后再重新调整并落地优化工作。
-
@nikomatsakis 在 RustBelt Rust 会议上做了一个关于 Polonius 的演讲。幻灯片
-
我们希望在 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 的总体规划正在进行讨论。