自从我们发布 Rust 1.0-alpha 以来已经过去了五个星期!在这个发布周期下周结束之前,我们想给大家一份关于 1.0 最终版的状态报告和更新。
简而言之: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 的主要原因是,新的 path 和 IO API 是最近才实现的,我们希望有更多时间收集反馈,然后再将其标记为稳定。更多详细信息如下。
更新: 由于计算错误,本文的早期版本将 3 月 31 日列为 1.0-beta 发布日期。正确的日期是 4 月 3 日,正好是 alpha2 之后六周,也是 1.0 之前六周。
alpha2 中包含哪些内容?
我们已经设法实现了此前预期的几乎所有功能。
这里的主要标题是所有主要的 API 修订都已完成:path 和 IO 改革已经完成。至此,所有为 1.0 版本提供的模块都处于我们期望的最终形式,仅在 alpha2 周期中进行微小的调整。
其他亮点如下
-
闭包:Rust 现在支持完整的捕获子句推断,并弃用了临时
|:|
表示法,使闭包更易于使用。 -
析构函数:新的析构函数规则已完成,避免了对
#[unsafe destructor]
的需求。 -
Path 改革:
path
模块已经完全重新设计,以解决旧模块的许多语义和人体工程学问题,并利用 DST。 -
IO 改革:
io
系统已经彻底修订,以提高健壮性和跨平台行为,并避免对系统进行雄心勃勃的高级抽象。虽然几乎所有 API 都受到此更改的影响,但这些更改朝着更保守和一致的设计方向发展。 -
Deref 强制转换:新的强制转换将遵循智能指针,因此您可以在需要
&[T]
的地方传递&Vec<T>
,或者在需要&T
的地方传递&Arc<T>
。这消除了对显式切片或可怕的“交叉借用”&*
的大部分需求,并且意味着&
可以被认为是通用的“借用”运算符。 -
功能分期:Rust 现在具有类似于语言功能的命名 API 功能的概念,这是我们将来管理 API 稳定性的方式。这些命名的功能使管理
std
中的进度变得更加容易,并且可以检测 crate 所需的最低 Rust 版本。 -
For 循环:新的
IntoIterator
特性现在可用,并用于for
循环,从而可以编写for x in &vec
而不是for x in vec.iter()
。 -
范围表示法:我们最终确定了范围表示法,引入了
..
表示“完整范围”,这将使诸如collection.remove(..)
之类的 API 在将来成为可能。 -
特性系统:新的连贯性规则已最终确定,为特性实现提供了灵活性和健全性。
-
溢出语义:经过长期辩论,最终的整数溢出语义已确定,预计将在 alpha2 中实现。预计此更改将与模糊测试等结合使用时,更容易找到上/下溢出错误。
-
关联类型:修复了许多围绕关联类型的编译器错误,使其可以在大规模使用。
在撰写本文时,其他一些更改尚未完成,但预计将在 alpha2 中实现:类型参数的方差、Send 更改和伟大的整数审核。
完整详细信息将在下周的发行说明中提供。
为什么还要另一个 alpha?
主要原因是,我们希望将最近实现的 API(如 IO 和 path)保持不稳定状态几周,同时收集反馈,但是 beta 版本旨在禁止使用不稳定功能。
更详细地说,Rust 正在区分 alpha 和 beta,这与我们的稳定性系统相关。在 alpha 版本中,可以选择加入不稳定功能,但是在 beta 版本之后,只有在使用 nightly 版本时才有可能这样做。 beta 版本将标志着社区的很大一部分可以脱离 nightly 版本。
如上所述,我们已经完成了 1.0 版本所需的所有主要 API 修订,包括 path 和 IO 改革。但是,其中一些修订在周期中相对较晚地完成,并且作为一个社区,我们没有足够的使用修订 API 的经验来声明它们是稳定的。请注意,API 更改(除了少数例外)非常保守:它们通常使我们朝着现有成功的库的方向发展。
通过生成 1.0-alpha2,我们为这些 API 的调整留出了更长的窗口,然后再将其声明为稳定。该窗口将在 3 月 9 日左右关闭。
现在不转移到 beta 是否有滑坡的风险?
似乎不太可能。 1.0 所需的几乎所有语言和库功能都已完成,这意味着在 alpha2 和 1.0 最终版之间,我们将有 12 周的时间进行润色。
1.0 之前会发生什么?
发布 1.0 所需的所有功能现已完成。剩下的就是润色、性能改进、错误修复、文档编写,并对最近修订的 API 获得足够的信心以将其标记为 #[stable]
。
alpha2 版本将正式弃用(但保留可用)旧的 path 和 IO API。新的 API 计划于 3 月 9 日稳定。请尝试这些新的 API 并帮助发现问题!
在 3 月 9 日的截止日期之后,大量的 crate 应该可以与“稳定的 Rust”一起使用,即不使用任何 #[feature]
。在此期间和 beta 版本发布之间,我们希望直接与 crates.io 包的作者合作,以帮助将代码移至稳定的 Rust,并发现稳定化中的任何差距。
在 beta 版发布之前,我们希望生态系统的很大一部分脱离 nightly 版本并进入稳定版本。要实现这一目标,需要社区范围内的推动以实现稳定,我们正在通过 讨论进行协调 - 如果您还没有这样做,请访问并告诉我们您正在使用的关键不稳定 API。