Lang 团队十月更新

2021 年 10 月 8 日 · Niko Matsakis 代表 lang 团队

本周,lang 团队举行了十月计划会议(会议纪要)。我们每月第一个星期三举行这些会议。

计划会议用于

  • 检查我们的活跃倡议的状态
  • 规划本月剩余时间的方案会议

每次会议结束后,我们会发布更新(如这篇!),其中包含注释和会议公告。

活跃倡议的更新

以下是本月提交的更新。请注意,许多较新的倡议都有专门的存储库,其中包含设计过程的其他副产品(例如,评估文档、开放的设计问题等)。请查看!

  • 异步基础更新:
    • 它是什么? trait 中的 async fn,异步 drop,异步闭包
    • 已经指定了 trait 中异步函数的 MVP 版本,我们打算首先稳定这个版本,并且在后续步骤上进行了大量的探索(在不断发展的 评估文档中阅读)。
  • Impl trait 倡议更新
    • 它是什么?模块和 impl 级别的 type Foo = impl Trait
    • oli-obk 已经完成了推理引擎的重写,以更好地匹配 RFC 中提出的设计,并且正在缓慢地合并中
    • 我们正在编写解释器和稳定文档以说明“类型别名 impl trait”。
    • 我们希望添加语法来为函数类型命名,这将解锁“trait 中的 impl trait”
  • Dyn 上转型倡议更新
    • 它是什么?如果 trait Foo: Bar,则能够将 dyn Foo 转换为 dyn Bar
    • 取得了良好进展,需要解决一个健全性问题,然后就可以合并了。
  • 泛型关联类型倡议更新
    • 它是什么?能够在 trait 中使用泛型参数的关联类型,例如 type Foo<'me>
    • 通过决定一条保守的(即使不是最大人体工程学的)路径,解决了 where 子句默认值的问题。
    • 在朝着我们可以稳定的方向不断取得进展。目的是从一些已知的人体工程学缺陷开始,并在此基础上构建。
  • Let else 更新
    • 它是什么?let 通用化,允许你匹配某些东西,并在匹配失败时 panic、返回等
      • let Ok(x) = something else panic!()
    • 在 nightly 版本上可用,可能已完成功能
  • Deref 模式更新
    • 它是什么?在匹配的上下文中应用 Deref impls,例如 match rc { Some(x) => ..., None => ... }
    • 决定构建一个没有用于 deref 的显式语法并且针对“已知安全” std 类型的原型。
  • Never 类型稳定更新
    • 它是什么?never 类型 !1
    • 我们已经实现了一个改进的(如果很复杂)分析,使我们能够在当前行为(回退到 ())和新行为(回退到 !)之间进行选择,而不会破坏重要的现有代码。希望继续稳定化,并使用警告、版本或其他工具缓慢改进和简化规则。

除了以上报告,你还可以在 会议纪要中找到更详细的讨论。

即将举行的方案会议

我们计划了以下方案会议

  • 10 月 13 日:GAT 和类型别名中 where 子句的语法 (lang-team#120)
  • 10 月 20 日:dyn 上转型的安全性考虑 (lang-team#119)
  • 10 月 27 日:禁止从 drop impls 中展开 (lang-team#97)

方案会议的预期

  • 会议文档必须在周二的分类会议之前准备好,并发布到跟踪问题中。
    • 如果届时没有发出,会议将被取消。这会给人们 24 小时的通知。
  • 没有要求人们在会议之前阅读文档。会议将从对文档的总结开始。
    • 但是,没有规则反对提前阅读文档并提供有关如何改进它的反馈或建议。
  1. never 类型之所以被称为 never,是因为它永远不会稳定。哈!我笑死我了。 --nikomatsakis