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 CLI参数或使用其中的一个默认值)并运行它。
不过,运行这些代理并不是即时的,例如,一个cargo build 的调用可能会执行几个代理(初始的cargo 调用加上每个依赖的rustc ),从而减慢了构建速度。
为了提高性能,rustup 1.25.0修改了代理代码,在缺少环境变量时设置RUSTC 和RUSTDOC ,这指示Cargo跳过代理,直接调用这些变量中定义的二进制文件。这在构建有大量依赖关系的箱子时提供了性能提升。
不幸的是,这个变化破坏了一些使用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)
- Joshua Nelson (jyn514)
- Pietro Albini (pietroalbini)