自从我们发布 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。