【发布时间】:2017-02-06 07:43:13
【问题描述】:
如果你不能使用带有稳定编译器的不稳定模块,Rust 如何编译它的std?例如,std::Vec 使用了 alloc::raw_vec,这是一个不稳定的功能。
【问题讨论】:
-
不,你不能在稳定的 Rust 中使用不稳定的特性。你想做什么?
标签: rust
如果你不能使用带有稳定编译器的不稳定模块,Rust 如何编译它的std?例如,std::Vec 使用了 alloc::raw_vec,这是一个不稳定的功能。
【问题讨论】:
标签: rust
不,您不能在稳定的 Rust 上使用不稳定的功能。 That's the entire point of unstable features:
在马厩上允许不稳定的功能存在三个问题 释放。
首先,正如网络多次展示的那样,仅仅是广告 不稳定不起作用。一旦功能被广泛使用,它就非常 很难改变它们——一旦特性完全可用,它就是 很难阻止它们被使用。类似“供应商”的机制 用于支持实验的网络上的前缀” 反而导致了事实上的标准化。
其次,根据定义,不稳定的功能正在进行中。但是 beta/stable 快照在预定的时间点冻结功能, 而图书馆作者将希望使用最新版本的 功能。
最后,除非我们强制执行,否则我们根本无法为 Rust 提供稳定性 它。我们的承诺是,如果您使用的是 Rust 的稳定版本, 您永远不会害怕升级到下一个版本。如果图书馆可以 选择不稳定,那么我们只能信守这个承诺,如果所有 图书馆作者通过支持所有三个来保证同样的事情 同时发布频道。
Rust 如何编译它的
std?
不保证 Rust 是由 稳定的编译器 构建的,或者它是由提供下载的相同的稳定编译器构建的。拥有一个用于引导官方编译器的特殊编译器将非常简单。请参阅 Reflections on Trusting Trust 了解如何恶意完成此操作。
确实,Rust 之前使用了一个特殊的引导编译器,但是 nowadays it doesn't。相反,有一个神奇的配置值允许不稳定的特性与稳定的编译器一起使用。这样做是为了让 Linux 发行版可以选择使用自己的工具链构建自己的 Rust 版本。
出于尊重,我认为不适合公开分享具体细节。寻找答案的努力应该足以阻止大多数人在没有充分理由的情况下使用它。如果有一个任何人都可以使用搜索引擎轻松找到而不考虑后果的单行答案,这似乎并不理想。如果有心,他们可以研究 Rust 源代码并构建系统,这当然是开放的。
如果您需要使用不稳定的功能,请使用夜间版本的 Rust。这是最诚实的方法。
【讨论】: