发布 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 有什么新功能

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

配置文件(Profiles)

先前版本的 rustup 默认随每个工具链安装一些组件:编译器(rustc)、包管理器(cargo)、标准库(rust-std)和离线文档(rust-docs)。虽然这种方法在本地开发软件时很好,但有些组件(如 rust-docs)会减慢安装速度,要么是因为它们在构建服务器上不使用,要么是因为在 Windows 上安装的文件数量庞大。

为了解决这个问题,rustup 1.20.0 引入了“配置文件”(profiles)的概念。它们是您在安装新的 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 时也可以选择配置文件,可以通过选择“Customize installation”(自定义安装)选项进行交互式选择,或者通过传递 --profile=<name> 标志以编程方式选择。配置文件只会影响新安装的工具链:像往常一样,以后可以通过 rustup component add 添加单个组件。

安装最新的兼容 nightly 版本

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

从 rustup 1.20.0 开始,如果最新 nightly 版本缺少您之前安装的某个组件,rustup update 将会回溯查找包含您所需所有组件的最新版本。如果没有包含您所需所有组件的新 nightly 版本,您将需要等待或移除其中一些组件。

随着这一变化,rustup 1.20.0 为 rustup toolchain install 命令引入了 --component/-c--target/-t 选项,允许您在安装工具链时添加组件和目标(target)。如果当前 nightly 版本不包含所有请求的组件,这些标志也会搜索之前的 nightly 版本。

rustup doc 的改进

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

rustup doc std::iter::Iterator

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

致谢

感谢所有为 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