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 更改了代理代码,使其在缺失时设置 RUSTC
和 RUSTDOC
环境变量,从而指示 Cargo 跳过代理并直接调用这些变量中定义的二进制文件。这在构建具有大量依赖项的 crate 时提供了性能提升。
不幸的是,此更改破坏了一些 rustup 用户,他们执行了类似的操作,例如:
-
第一个 Cargo 调用(例如扩展、别名或集成测试)使用工具链
foo
,设置指向该工具链的RUSTC
和RUSTDOC
环境变量。 -
第一个调用再次调用 Cargo,但这次使用工具链
bar
(例如cargo +bar build
)。这不会设置指向bar
的RUSTC
和RUSTDOC
环境变量,因为这些变量已经存在。 -
然后,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)