距离我们发布 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 的主要原因是,新的 path 和 IO API 刚落地不久,我们希望有更多时间收集反馈,然后再将它们标记为稳定。更多细节如下。
更新:此文章的早期版本由于计算错误,将 1.0-beta 发布日期列为 3 月 31 日。正确的日期是 4 月 3 日,恰好是 alpha2 之后六周,也是 1.0 之前六周。
alpha2 中包含哪些内容?
我们已经成功落地了本周期先前预期的所有主要功能。
这里的重点是所有主要的 API 修订都已完成:path 和 IO 改革已落地。至此,1.0 版本包含的所有模块都已达到我们预期的最终形态,只在 alpha2 周期内进行微调。
其他亮点如下
-
闭包(Closures):Rust 现在支持完整的捕获子句推断,并弃用了临时的
|:|符号,使得闭包使用起来更加符合人体工程学。 -
析构函数(Destructors):新的析构函数规则已落地,不再需要
#[unsafe destructor]。 -
路径改革(Path reform):
path模块已完全重新设计,以解决旧模块存在的许多语义和人体工程学问题,并利用 DST。 -
IO 改革(IO reform):
io系统已彻底修订,以提高健壮性和跨平台行为,并避免在系统之上构建过于 ambitious 的高层抽象。虽然几乎所有 API 都受到此更改的影响,但这些更改趋向于一种更加保守和一致的设计。 -
Deref 强制转换(Deref coercions):新的强制转换将遵循智能指针,以便您可以在需要
&[T]的地方传递&Vec<T>,或在需要&T的地方传递&Arc<T>。这消除了对显式切片或可怕的“交叉借用”&*的大部分需求,意味着&可以被视为一个通用的“借用”运算符。 -
功能分阶段(Feature staging):Rust 现在有了类似于语言功能的命名 API *功能*概念,我们将以此方式管理 API 的稳定化进程。这些命名功能使管理
std中的进展更加容易,并使其能够检测 crate 所需的最低 Rust 版本。 -
For 循环(For loops):新的
IntoIteratortrait 现在可用,并用于for循环,使得可以写for x in &vec而不是for x in vec.iter()。 -
范围符号(Range notation):我们已经最终确定了范围符号,引入
..表示“完整范围”,这将在未来使得诸如collection.remove(..)之类的 API 成为可能。 -
Trait 系统(Trait system):新的 coherence 规则已最终确定,为 trait 实现提供了灵活性和健全性。
-
溢出语义(Overflow semantics):经过长时间的讨论,最终的整数溢出语义已确定,预计将在 alpha2 中落地。预计这一更改与模糊测试等结合使用时,将更容易发现溢出/下溢错误。
-
关联类型(Associated types):与关联类型相关的许多编译器 bug 已修复,使其能够大规模使用。
一些其他更改在撰写本文时尚未落地,但预计将在 alpha2 中实现:类型参数的方差(variance for type parameters)、Send 更改(Send changes)以及大型整数审计(the great integer audit)。
完整细节将在下周的发布说明中提供。
为什么还要发布一个 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 版本转向稳定版本。实现这一目标需要社区范围内推动稳定化,我们正在通过 discuss 论坛进行协调——如果您还没有这样做,请过来告诉我们您正在使用的关键不稳定 API。