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

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)。如果您不使用本地文档,并且在 CI 中,建议在 Windows 系统上使用此组件。
  • 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 版本不包含所有请求的组件,这些标志也会搜索过去的 nightly 版本。

rustup doc 的改进

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

rustup doc std::iter::Iterator

这适用于 trait、struct/enum、macro 和 module,并且可以将您带到 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