火箭需要 Rust 夜版的最低版本,但更高的稳定版本已经安装了。

8

我试图运行Rocket,但是我在第一个障碍处失败了。尝试cargo run时,我收到以下错误:

error: failed to run custom build command for `pear_codegen v0.1.2`
Error: Pear requires a nightly or dev version of Rust.
Installed version is: 1.33.0 (2019-02-28). Minimum required: 1.31.0-nightly (2018-10-05).

我对Rust不熟悉,但是从其他语言过来,这个问题根本没有任何意义。它需要至少版本1.31.0,但我已经安装了版本1.33.0。

我做错了什么?


它声称需要编译器的“每夜版”。你的1.33.0只是一个稳定版本。请执行rustup toolchain add nightly - E net4
1
@E_net4 是的,我切换到了夜间版,它可以工作。只是看起来奇怪的是,稳定版1.33.0不能与夜间版1.31.0一起使用,我本以为经过测试等后,夜间版1.31.0的代码会被推入稳定版1.31.0+版本中。 - twigg
1
准确地说,夜间功能只有在经过稳定化过程后才能在稳定的编译器版本中使用,这可能需要很长时间,并且并没有明确定义所有功能的发布节奏。一些夜间功能可能会被直接删除。 - Vladimir Matveev
1
似乎稳定版1.33.0不能与夜间版1.31.0兼容,这很奇怪。事实上,并不是每个夜间版功能都会稳定下来并在每个版本中发布。它们的开发和测试周期比6周的发布周期要长得多。由于稳定版明确禁止使用所有夜间版功能(仅限稳定功能),这就是为什么您仍然需要夜间版的原因。 - U007D
@U007D 很好,那只是我不理解它的发布周期。 - twigg
Rust现在已经更新到1.45.0(2020-07-13),而pear_codegen v0.1.4仍然要求使用1.31.0-nightly(2018-10-05)版本。这确实很奇怪。1.31.0-nightly的功能是否会被纳入稳定版本呢? - Dirk Jäckel
2个回答

14
如果软件需要 Rust 的夜间版本,则不能替换为稳定版本:你必须使用夜间版。
Rust 的夜间频道是稳定 Rust 的超集。尚未完成或仅未证明其价值的功能包含在 Rust 的夜间构建中。您可以通过crate attribute选择使用给定功能。
这些不稳定的功能可能会完全更改或甚至被删除。换句话说,不稳定的功能从未保证存在于任何特定的 Rust 稳定版本中。
如果有帮助的话,您可以将夜间版本视为开发的“备用现实”轨道。夜间版的版本号仅是它们存在于时间的一个松散指示器;编译日期和 git 提交哈希值更具信息性。

我原以为 1.31.0 的夜间代码将在测试后推入稳定的 1.31.0+ 版本中

这就是beta频道的工作方式-任何在 1.x.y-beta 中的内容都将在 1.x.y-stable 中(假设没有重大紧急情况)。
另请参见:

2
我在想是否应该将“nightly”重命名为“experimental”,以使事情更清晰明了。 - Matthieu M.
SemVer 的意义上,x.y.zx.y.z-betax.y.z-nightly 之间没有关系。(预发布版本表示该版本不稳定,可能无法满足其关联的正常版本所表示的兼容性要求)。虽然“实验性”的名称可能更合适,但我怀疑现在进行任何此类更改是否超过了更改的成本。 ¯_(ツ)_/¯ - Shepmaster
2
你失去了一只手臂:. 我同意这可能不值得改变。 - Matthieu M.

5

你没有做错什么,Rocket需要使用Nightly版本才能访问Rust的新功能,这些功能可能尚未稳定。

根据官方文档,你可以选择只为你的Rocket项目使用Nightly版本:

rustup override set nightly

入门指南


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接