宣布 Rustup 1.20.0

2019 年 10 月 15 日 · Rustup 工作组

Rustup 工作组很高兴地宣布发布 Rustup 版本 1.20.0。 Rustup 是安装 Rust 的推荐工具,Rust 是一种编程语言,它赋予每个人构建可靠高效软件的能力。

如果您已安装了以前版本的 rustup,获取 rustup 1.20.0 就像

rustup self update

Rustup 还会在正常工具链更新结束时自动更新自身

rustup update

如果您还没有,您可以从我们网站上的相应页面 获取 rustup

Rustup 1.20.0 中的新功能

此版本的主要亮点包括配置文件支持、获取包含所有所需组件的最新可用 nightly 版本的能力,以及对 rustup doc 命令的改进。您还可以查看 更改日志,以获取此版本中包含的所有更改的列表。

配置文件

以前版本的 rustup 在每个工具链中默认安装了一些组件:编译器 (rustc)、包管理器 (cargo)、标准库 (rust-std) 和离线文档 (rust-docs)。虽然这种方法在本地开发软件时很好,但一些组件(如 rust-docs)会减慢安装速度,原因是它们在构建服务器上未使用,或者在 Windows 上由于安装了大量文件而导致速度变慢。

为了解决这个问题,rustup 1.20.0 引入了“配置文件”的概念。它们是您在安装新的 Rust 工具链时可以选择下载的组件组。目前可用的配置文件有 minimaldefaultcomplete

  • minimal 配置文件包含尽可能少的组件,以获得一个可工作的编译器 (rustcrust-stdcargo)。建议在 Windows 系统上使用此组件,如果您不使用本地文档,以及在 CI 中使用。
  • default 配置文件包含以前默认安装的所有组件 (rustcrust-stdcargorust-docs),以及 rustfmtclippy。此配置文件将被 rustup 默认使用,也是推荐用于一般用途的配置文件。
  • complete 配置文件包含通过 rustup 可用的所有组件,包括 miri 和 IDE 集成工具 (rlsrust-analysis)。

要更改 rustup 配置文件,您可以使用 rustup set profile 命令。例如,要选择 minimal 配置文件,您可以使用

rustup set profile minimal

您也可以在首次安装 rustup 时选择配置文件,可以通过交互式选择“自定义安装”选项,或者通过传递 --profile=<name> 标志以编程方式选择。配置文件只会影响新安装的工具链:与往常一样,您可以使用 rustup component add 在以后安装单个组件。

安装最新的兼容 nightly 版本

虽然大多数组件都保证存在于 一级平台 的稳定版本上,但 nightly 版本没有相同的保证。通常,rustfmtclippyrls 等工具在最新的 nightly 版本中缺失。如果您依赖这些工具,那么更新 nightly 版本就会很困难,因为如果缺少您之前安装的组件,rustup 会阻止升级。

从 rustup 1.20.0 开始,如果最新的 nightly 版本中缺少您之前安装的组件,rustup update 将倒退到时间轴上,以找到包含所有所需组件的最新版本。如果没有包含所有所需组件的新 nightly 版本,您要么需要等待,要么需要删除其中一些组件。

除了此更改之外,rustup 1.20.0 还为 rustup toolchain install 命令引入了 --component/-c--target/-t 选项,允许您在安装工具链时添加组件和目标。这些标志也会搜索过去的 nightly 版本,如果当前版本没有包含所有请求的组件。

rustup doc 的改进

rustup doc 命令在您的浏览器中打开本地安装的文档,无需任何互联网连接。rustup 1.20.0 增强了该命令,允许您直接打开特定项目的 API 文档。例如,要查看 Iterator 的文档,您可以使用

rustup doc std::iter::Iterator

这适用于特征、结构体/枚举、宏和模块,并且可以将您带到 stdalloccore 这些 crate 中。但是请注意,此功能只有在您的工具链中安装了 rust-docs 组件时才有效。我们将随着时间的推移改进该命令的 UX,因此如果您有任何想法,请告诉我们!

感谢

感谢所有为 rustup 1.20.0 贡献力量的人!

  • Andy McCaffrey
  • Artem Borisovskiy
  • Benjamin Chen
  • Daniel Silverstone
  • Jon Gjengset
  • Lzu Tao
  • Matt Kantor
  • Mitchell Hynes
  • Nick Cameron
  • PicoJr
  • Pietro Albini