我想确定这迫使其执行者在任何情况下被发送到,或之间,线程共享一个特点。 它应该足以标记性状如!Send
,但锈似乎并没有让我。
可能吗?
实施例( 运动场 ):
#![feature(optin_builtin_traits)]
// This is a syntax error
//trait ThreadThing : !Send {}
// This doesn't work either
trait ThreadThing { }
impl !Send for ThreadThing {}
不,你不能让!Send
的条件ThreadThing
。 编译器只是不支持那种逻辑。
如果会有人使用您的箱子做一个类型中隐含有可能Send
包含在其执行没有不安全的代码的任何地方,并使其不安全只是通过实施ThreadThing
它-在这种情况下,你会作出ThreadThing
的unsafe trait
,表明有不安全的代码的地方,依赖于无法在类型系统描述不变:不变“的东西,是Send
没有实现ThreadThing
”。
如果像更有可能,这只是不安全实现Send
手动实现一种ThreadThing
-在这种情况下,你不需要做任何事情,因为手动执行Send
是不安全的已经 。 如果实现者ThreadThing
决定手动执行Send
,他们承担,不仅保证自己不变,但也负担ThreadThing
的。
答案是:是的,你可以,一些非常具体的条件下。 你是否应该需要做的,这是另一回事。
如果你是否定的特点是可以定义为另一个性状的负面特质的实现:
所以,下面的工作( 操场 ):
#![feature(optin_builtin_traits)]
auto trait Scary {}
trait ThreadThing { }
impl !Scary for ThreadThing {}
但是,如果你试图做它不会工作:
impl !Send for ThreadThing {}
或者,如果Scary
是没有自动特质。
然而需要注意的是,一般它不应该是必要的标记性状!Send
这种方式。 性状的具体实施方案将被标记Send
或!Send
通过基于实现结构的内容锈编译器。