Rust 1.0:状态报告和最终时间线

2015 年 2 月 13 日 · Rust 核心团队

自从我们发布 Rust 1.0-alpha 已经过去了五周!在下一个星期结束这个发布周期之前,我们想发布一个状态报告,并更新 1.0 最终版的发布路线图。

TL;DR:Rust 1.0 最终版将于 2015 年 5 月 15 日发布

总体时间线是什么?

根据本发布周期的进展,我们现在可以确定 1.0 的精确发布时间表。

  • Rust 1.0-alpha2 -- 2 月 20 日
  • 所有 1.0 模块在 nightly 上稳定 -- 大约 3 月 9 日
  • Rust 1.0-beta -- 4 月 3 日
  • Rust 1.0 -- 5 月 15 日

此时间表与 先前的时间表 不同,因为它确定了一组确切的发布周期。它还选择发布第二个 alpha 版本,并且只发布一个 beta 版本。

将下一个版本称为 alpha2 而不是 beta1 的主要原因是,新的路径和 IO API 只是最近才发布,我们希望在将它们标记为稳定之前有更多时间收集反馈。更多详细信息见下文。

更新:由于计算错误,本文的早期版本将 3 月 31 日列为 1.0-beta 发布日期。正确的日期是 4 月 3 日,正好是 alpha2 发布六周后,也是 1.0 发布六周前。

alpha2 中发布了什么?

我们已经成功发布了几乎所有 先前预期 在本周期发布的功能。

这里最大的新闻是所有主要的 API 修订都已完成:路径和 IO 改革已发布。在这一点上,所有为 1.0 发布的模块都处于我们预期中的最终形式,除了在 alpha2 周期中进行的微调之外。

其他亮点如下

  • 闭包:Rust 现在支持 完整的捕获子句推断,并且已弃用临时 |:| 符号,使闭包的使用更加符合人体工程学。

  • 析构函数:新的 析构函数规则 已发布,不再需要 #[unsafe destructor]

  • 路径改革path 模块已完全 重新设计,以解决旧模块中的一些语义和人体工程学问题,并利用 DST。

  • IO 改革io 系统已 彻底修改,以提高健壮性和跨平台行为,并避免在系统上进行雄心勃勃的高级抽象。虽然几乎所有 API 都受到此更改的影响,但这些更改朝着更加保守和一致的设计方向发展。

  • Deref 强制转换:一个 新的强制转换 将遵循智能指针,以便您可以将 &Vec<T> 传递到需要 &[T] 的地方,或将 &Arc<T> 传递到需要 &T 的地方。这消除了大多数对显式切片或令人恐惧的“交叉借用”&* 的需求,这意味着 & 可以被认为是一个通用的“借用”运算符。

  • 功能分阶段:Rust 现在具有 命名 API 功能 的概念,类似于语言功能,这是我们将来管理 API 稳定性的方式。这些命名功能使管理 std 中的进度变得更加容易,并且使检测箱子所需的 Rust 最小版本成为可能。

  • for 循环:新的 IntoIterator 特性现在可用,并用于 for 循环,使编写 for x in &vec 而不是 for x in vec.iter() 成为可能。

  • 范围符号:我们已 最终确定范围符号,引入了 .. 表示“完整范围”,这将使将来像 collection.remove(..) 这样的 API 成为可能。

  • 特性系统:新的一致性规则已 最终确定,为特性实现提供了灵活性和健壮性。

  • 溢出语义:经过长时间的讨论,最终的整数溢出语义已 确定,预计将在 alpha2 中发布。此更改预计将使在与模糊测试等结合使用时更容易找到溢出/下溢错误。

  • 关联类型:已修复与关联类型相关的许多编译器错误,使其能够大规模使用。

在撰写本文时,一些其他更改尚未发布,但预计将在 alpha2 中发布:类型参数的方差Send 更改 以及 伟大的整数审核

完整的详细信息将在下周的发布说明中提供。

为什么是另一个 alpha 版本?

主要原因是我们希望将最近发布的 API(如 IO 和路径)保持不稳定状态几周,以便我们收集反馈——但 beta 版本旨在禁止使用不稳定功能。

更详细地说,Rust 在 alpha 和 beta 之间 划定了区别,这与我们的 稳定性系统 相关。在 alpha 版本中,可以选择使用不稳定功能,但在 beta 版本之后,只有在使用 nightly 版本时才能使用。beta 版本将标志着社区中相当一部分人可以从 nightly 版本迁移到稳定版本的时刻。

如上所述,我们已经发布了 1.0 版本所需的所有主要 API 修订,包括路径和 IO 改革。但是,其中一些修订是在本周期的后期发布的,作为社区,我们还没有足够的经验来使用这些经过修订的 API,因此还不能宣布它们是稳定的。请注意,除了少数例外,API 更改非常保守:它们通常使我们朝着现有成功库的方向发展。

通过发布 1.0-alpha2,我们在宣布这些 API 稳定之前为它们提供了一个更长的调整窗口。该窗口将在 3 月 9 日左右关闭。

现在不迁移到 beta 版本是否有滑点的风险?

似乎不太可能。实际上,1.0 所需的所有语言和库功能都已经发布,这意味着我们将有12 周的时间来完善 alpha2 和 1.0 最终版之间的版本。

1.0 之前会发生什么?

所有发布 1.0 所需的功能现已发布。剩下的就是完善、性能改进、错误修复、文档——以及对最近修订的 API 充满信心,以便将其标记为 #[stable]

alpha2 版本将正式弃用(但仍保留)旧的路径和 IO API。新的 API 预计将在 3 月 9 日之前稳定。请尝试使用这些新的 API 并帮助发现问题!

在 3 月 9 日截止日期之后,大量的箱子应该能够使用“稳定版 Rust”,即不使用任何 #[feature]。在那之后到 beta 版本发布之前,我们希望直接与 crates.io 包的作者合作,帮助将代码迁移到稳定版 Rust,并发现稳定性方面的任何差距。

到 beta 版本发布时,我们希望生态系统中相当一部分将从 nightly 版本迁移到稳定版本。要实现这一目标,需要社区共同努力实现稳定性,我们正在通过 讨论 进行协调——如果您还没有,请加入并告诉我们您正在使用的关键不稳定 API。