Rust 使用#时如何导出副本![没有标准]?

Rust 使用#时如何导出副本![没有标准]?,rust,Rust,我正在做一个使用#的项目![no_std],我希望能够获得一些有用的特性,比如复制和克隆。我尝试添加pub use core::prelude::*到项目根目录和我实际要在其中使用它的文件。但是,任何试图#[派生(复制)]的行为都会导致 错误:尝试实现不存在的trait std::marker::Copy 我不明白我做错了什么。正在尝试添加 use core::marker::Copy 结果如下: 错误:已在此模块中导入名为Copy的类型 #[派生]被打断了![no_std]pub mod s

我正在做一个使用
#的项目![no_std]
,我希望能够获得一些有用的特性,比如
复制
克隆
。我尝试添加
pub use core::prelude::*
到项目根目录和我实际要在其中使用它的文件。但是,任何试图
#[派生(复制)]
的行为都会导致

错误:尝试实现不存在的trait std::marker::Copy

我不明白我做错了什么。正在尝试添加

use core::marker::Copy
结果如下:

错误:已在此模块中导入名为Copy的类型


#[派生]被打断了![no_std]
pub mod std{pub use core::*;}
将修复它,它将
的实例替换为
::core::
,允许您从
core
派生编译器认为在
std
中的特性。您始终可以使用
impl
实现标记特性:

impl Copy for MyStruct {}

它只对标记特征有效,
Clone
和其他类似特征仍然需要
派生

这是预期的行为,还是存在可以链接到的锈菌?@Shepmaster,我相信这是因为
derivate
s只是AST转换,正是编译器插件所做的,因此,他们必须在标识符中指定全名。在大多数程序中,默认链接的是
std
,而不是
core
,因此它们使用
::std
。然而,我不知道是否有公开的证据。我也不确定,IRC中的一些人提到了它,他们认为什么是标记特征,为什么不需要提供一个实际的impl?标记特征不包含方法,它的存在仅仅是为了用一些属性标记类型。例如,
Copy
表示该类型可自动复制
Send
表示该类型可以跨任务边界发送,等等。因为它们没有方法,所以没有任何要实现的内容,所以它们的impl块为空。