通往 Rust 之路(译文)
本篇为译文,来源: https://blog.rust-lang.org/2014/09/15/Rust-1.0.html
通往 Rust 1.0 之路
九月 15, 2014 · Niko Matsakis
Rust 1.0 即将问世!我们已经确定了具体的功能列表,并正在努力实现它们。我们计划在年底左右发布 1.0 测试版。如果一切顺利,测试期结束后,它将成为 1.0 版本。1.0 发布后,未来的 1.x 版本将向后兼容,这意味着现有代码将继续编译而无需修改(当然,前提是没有编译器错误)。
Rust 1.0 的发布不仅意味着“您的代码将继续编译”。更重要的是,这标志着我们认为 Rust 的设计终于走上了正确的道路。具体来说,它变得 更加简约。语言现在专注于一个简单的核心概念,即所有权和借用(稍后会详细介绍)。通过所有权和借用,我们能够在库中构建我们所需的一切。这令人兴奋,因为我们可以编写的任何库,您也可以编写。这确实让我们有信心,Rust 不仅能实现其最初的目标,还会超越它,应用于我们甚至未曾设想的各种领域。
Rust 的演变
Rust 经历了漫长的演变。如果您有一段时间没有关注 Rust,您可能会对目前的变化感到惊讶:在过去的一年里,我们一直在彻底简化设计。作为一个突出的例子,Rust 曾经具有多种指针类型,它们通过不同的符号表示,而现在这些指针类型已被简化为仅剩下引用类型(&T
, &mut T
)。我们还成功地整合和简化了许多其他语言功能,例如闭包,它们曾经有多种选择。(其中一些变化仍在进行中。)
所有这些变化的关键在于关注 所有权和借用 的核心概念。最初,我们引入所有权是为了在任务之间安全高效地传输数据,但随着时间的推移,我们意识到这一机制同样允许我们将各种功能从语言中移出并移入库中。最终的设计不仅更易于学习,而且比我们以前想象的更“接近金属”。Rust 的所有语言构造都与机器操作有着非常直接的映射,且 Rust 不需要运行时或外部依赖项。在其最小配置下,Rust 甚至可以用来编写 操作系统 内核。
然而,在这些变化中,Rust 始终坚持其目标,即同时提供现代编程语言的 安全性 和 便利性,并保持 C 和 C++ 提供的 效率 和 低级控制。基本上,如果您希望亲自操作裸机,但又不想花费数小时来追踪段错误和数据竞争,Rust 是您的最佳选择。
如果您还不熟悉 Rust,请不要担心。在接下来的几个月里,我们计划定期发布一系列博客文章来探索该语言。前几篇将重点介绍所有权的不同方面以及如何利用它实现安全的手动内存管理、并发等。之后,我们将转向 Rust 语言和生态系统的其他方面。
剩下的工作
我们已经取得了显著进展,但在发布之前还有许多工作要做。以下是我们目前正在进行的重大更改的列表:
- 动态大小类型:这个类型系统扩展允许我们统一处理编译时未知大小的类型,例如数组类型。这使我们能够支持用户设计的智能指针,包含数组或对象。Nicholas Cameron 最近提交了一份英雄式的提交,实现了大部分工作。
- 无箱闭包:我们新的闭包设计统一了闭包与对象类型。大部分规范已实现。
- 关联类型:我们正在将特征系统迁移到使用 关联类型,这确实有助于减少编写高级泛型库所需的泛型注释级别。Patrick Walton 已完成初步实施。
- Where 子句:我们正在添加一种灵活的新约束形式,称为where 子句。Patrick Walton 已获得对基本语法的支持,我已在一个分支上实现了剩余功能,应该很快就会实现。
- 多分派特征:我们正在扩展特征,以便它们可以同时匹配多种类型,这为更符合人体工程学的 API 开辟了许多新的机会。我已在一个分支上对这项工作进行了原型设计。
- 析构函数:我们正在改进析构函数语义,使其不再需要将内存归零,这应该会缩短编译和执行时间。Felix Klock 已实施了必要的分析,目前正在进行中。
- 绿色线程:我们将从标准库中删除对绿色线程的支持,并将其移出到外部包中。这使得 Rust 模型与底层操作系统更加匹配,从而提高程序的效率。Aaron Turon 已经编写了 RFC,现在正着手这项工作。
在库级别,我们目前正在对 libstd 进行全面检查,以确定哪些部分是稳定的,哪些部分不是。您可以在此处监控进度。(请注意,许多“不稳定”项目只是名称会略有更改以符合惯例或其他细微调整的内容。)
Cargo 和库生态系统
我之前提到,Rust 1.0 与其说是一个终点,不如说是一个起点。这是千真万确的。Rust 1.0 的目标是成为构建高效库的灵活基础——但如果没人能找到它们,或者它们很难安装,那么库就没有任何用处。
因此,Rust 包管理器 Cargo 的出现至关重要。Cargo 最近发展迅速,功能已经相当完备。到 1.0 发布时,我们计划建立一个中央存储库,这意味着创建和分发 Rust 库(我们称之为“crates”)将变得非常简单。哦,当然,Cargo 及其相关服务器都是用 Rust 编写的。
发布流程
Rust 的发布长期以来一直遵循着一个时间表,我们并不打算改变这一点。然而,一旦我们开始发布稳定版本,我们也会建立更多的基础设施。我们的计划是采用许多其他项目(如 Firefox、Chrome 和 Ember.js 使用的“渠道”系统。
我们的想法是有三个渠道:Nightly、Beta 和 Stable。如果您想要最新最好的版本,可以使用 Nightly 渠道:它包含不稳定的功能和库,这些功能和库可能仍会以向后不兼容的方式发生变化。每六周,我们会切出一个新分支并称之为 Beta。此分支排除了所有不稳定的部分,因此您知道,如果您使用的是 Beta 或 Stable,您的代码将继续编译。同时,现有的 Beta 分支将升级为稳定版本。我们预计生产用户将更愿意在 Beta 分支上进行测试,并使用 Stable 分支进行发布。在 Beta 上进行测试可确保如果我们意外破坏了您所依赖的任何内容,我们会提前收到通知。
具体到 1.0 版本,我们的计划是先发布 1.0 测试版,然后按照同样的流程过渡到正式的 1.0 版本。但是,如果我们发现 1.0 测试版存在严重缺陷,我们可能会推迟并运行一两个额外的测试期。毕竟,最好等一段时间,而不是最终陷入某种有问题的境地。
期待
从很多方面来看,Rust 1.0 与其说是一个终点,不如说是一个起点。当然,我们计划继续开发 Rust:我们还有许多想要添加的功能,其中许多功能已经在筹备中。但对我来说,最令人兴奋的并不是 Rust 团队即将完成的工作。相反,我期待着拥有一个稳定的基础将使 Rust 社区和生态系统比现在增长得更快。我迫不及待地想看看结果会怎样。