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