即使使用 Nightly,也无法在 Rust 中使用不稳定的库功能“stdsimd”

问题描述 投票:0回答:1

我正在尝试在 rust 的 nightly-x86_64-unknown-linux-gnu 版本中编译以下代码。


    #![cfg_attr(feature = "htm", feature(link_llvm_intrinsics))]
    #![cfg_attr(feature = "nightly", feature(stdsimd))]
    #![cfg_attr(feature = "nightly", feature(rtm_target_feature))]
    #![warn(missing_docs)]


    use core::arch::x86_64 as x86;
    use x86::{
       _xabort, _xbegin, _xend, _xtest, _XABORT_CONFLICT, _XABORT_EXPLICIT, _XABORT_RETRY,
       _XBEGIN_STARTED,
    };


   fn main() {
       let mut x:i64=0;

       _xbegin();
       x+=1;
       _xabort(0);
   }

但是它没有编译并给出以下错误。 错误[E0658]:使用不稳定的库功能“stdsimd”

我希望使用它来创建硬件事务

我使用以下命令编译它:-

rustup 默认每晚

货物运行

以下是给出的完整错误代码:-

Error code

rust rust-cargo
1个回答
0
投票
当运行夜间版本时,

feature = "nightly"
不会变为 true,而是在启用
nightly
Cargo 功能 时变为 true。要启用它,您需要在 Cargo.toml 中的
[features]
下声明它,并将
--features nightly
传递给 Cargo 命令(例如
cargo build
)(如果您是主 crate,或者如果您是图书馆,您的客户需要通过设置
features = ["nightly"]
来激活依赖项中的功能。

因此,由于删除了

#![feature]
,编译器会抱怨使用了实验性功能。

这是否是您想要做的事情取决于三件事:

  1. 如果您的板条箱需要实验性功能来编译,请不要有条件地激活它,只需使用
    #![feature]
    。如果使用非夜间编译器运行,用户将收到错误。当然,请务必记录您的板条箱每晚需要的事实。
  2. 如果夜间支持是可选的并启用额外的 API,那么使用 Cargo 功能是一个好主意。您可以在夜间运行时自动确定,正如我稍后将解释的那样,但这是一个坏主意,因为如果用户没有执行任何操作并且突然启用或禁用附加 API,它会让您的用户感到困惑。
  3. 如果 nightly 没有添加额外的功能,而是允许我们更好地实现现有功能(例如,更高的性能),并且您有后备方案,则可以自动确定何时在 nightly 上运行并启用它。有多种方法可以选择,最简单的是使用
    rustversion
    板条箱。
© www.soinside.com 2019 - 2024. All rights reserved.