感叹号在特质实施中意味着什么?

nal*_*ply 11 traits rust

我在库参考中找到了std::rc::Rc这个特征实现

impl<T> !Send for Rc<T> 
where
    T: ?Sized, 
Run Code Online (Sandbox Code Playgroud)

前面的感叹号Send是什么意思?

我查阅了Rust编程语言 ¹书和The RustReference²,但没有找到解释.请在答案中提供参考.


¹ 特别是[ 3.19特征
² 5.1特征5.1实施部分]

nal*_*ply 11

这是RFC 19中描述的特征的负面特征实现.Send

总结:Send特质是一种不安全的特质.RFC说:

[它]实施起来是不安全的,因为实施它会带来语义保证,如果受到损害,会深深地威胁到内存安全.

默认情况下,它们适用于所有类型:

unsafe impl Send for .. { }
Run Code Online (Sandbox Code Playgroud)

注意..作为默认实现的语法.特征也必须没有定义任何方法.默认实现是由所有类型实现的标记特征.

因此,要选择退出Send,写一个负面的特质实现:

impl !Send for MyType { }
Run Code Online (Sandbox Code Playgroud)


fjh*_*fjh 8

这是一个负面的特质impl,因此您可以将其视为选择退出Send特征.