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 1.25.1 的新特性

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

使用不同工具链的嵌套 Cargo 调用中的回归

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

但是,运行这些代理并非瞬时的,例如,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)