宣布 Rustup 1.25.1

2022 年 7 月 12 日 · Rustup 工作组

Rustup 工作组宣布发布 rustup 版本 1.25.1。Rustup 是安装 Rust 的推荐工具,Rust 是一门赋能每个人构建可靠且高效软件的编程语言。

如果您安装了以前版本的 rustup,获取 rustup 1.25.1 非常简单,只需停止任何可能正在使用 Rustup 的程序(例如关闭您的 IDE)并运行

rustup self update

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

rustup update

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

rustup 1.25.1 有哪些新特性

此版本 rustup 修复了上一版本 (1.25.0) 中引入的一个退化问题,该问题导致某些工作流程失败。

使用不同工具链的嵌套 Cargo 调用中的退化

当您调用通过 rustup 安装的 Rust 或 Cargo 时,您并非直接运行它们。相反,您运行的是 rustup “代理”二进制文件,其作用是检测正确的工具链(解析 +channel CLI 参数或使用默认值之一)并运行它。

然而,运行这些代理并不是即时的,例如 cargo build 调用可能会执行多个代理(初始的 cargo 调用加上每个依赖项的 rustc 调用),从而减慢构建速度。

为了提高性能,rustup 1.25.0 修改了代理代码,在 RUSTCRUSTDOC 环境变量缺失时设置它们,这指示 Cargo 跳过代理,直接调用这些变量中定义的二进制文件。这在构建具有大量依赖项的 crate 时提供了性能提升。

不幸的是,这项更改导致 rustup 的一些用户遇到问题,他们执行的操作类似于

  • 第一次 Cargo 调用(例如一个扩展、一个别名或一个集成测试)使用工具链 foo,并设置指向该工具链的 RUSTCRUSTDOC 环境变量。

  • 第一次调用再次调用 Cargo,但这次使用工具链 bar(例如 cargo +bar build)。这不会设置指向 barRUSTCRUSTDOC 环境变量,因为这些变量已经存在。

  • 第二次 Cargo 调用随后使用 RUSTC 环境变量并跳过代理来调用 rustc,导致调用了 foo 工具链。之前版本的 rustup 会调用代理,代理会正确地检测并使用 bar 工具链。

Rustup 1.25.1 通过回滚这项更改修复了此退化问题。Rustup 工作组正在 issue #3035 中讨论在未来版本中重新引入这项更改的计划,同时避免造成问题。

致谢

再次感谢所有为 rustup 1.25.1 做出贡献的贡献者!

  • Daniel Silverstone (kinnison)
  • Robert Collins (rbtcollins)
  • Jynn Nelson (jyn514)
  • Pietro Albini (pietroalbini)