语言团队十月更新

2021 年 10 月 8 日 · Niko Matsakis 代表语言团队发布

本周,语言团队召开了十月规划会议(会议纪要)。我们每月第一个周三都会举行这样的会议。

规划会议用于

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

每次会议结束后,我们都会发布一篇更新(就像这篇!),包含记录和会议公告。

活跃倡议更新

以下是本月提交的更新。请注意,许多较新的倡议都有专门的仓库,其中包含设计过程中的其他产物(例如,评估文档、待解决的设计问题等)。欢迎查看!

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

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

即将到来的设计会议

我们已计划以下设计会议

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

设计会议期望

  • 会议文档必须在周二的分流会议 (triage meeting) 之前准备好,并发布到追踪问题 (tracking issue) 中。
    • 如果届时未能发出,会议将取消。这给了大家 24 小时的通知时间。
  • 不强制要求大家在会议前阅读文档。会议将以回顾文档开始。
    • 然而,并没有规定禁止提前阅读文档并提供反馈或改进建议。