Negative impl与Auto trait的隐式逻辑
探索Rust nightly中的negative trait impl如何影响auto trait派生和并发安全 · 难度:入门 · +10XP
Negative impl与Auto trait的隐式逻辑
Send、Sync、Unpin等auto trait自动为类型实现,但如果你想阻止某个类型实现Send?标准库用negative impl:impl !Send for MyType。本课程讲解auto trait的推导规则,如何用negative impl创建不可发送的包装器,以及这如何影响并发安全。还会涉及!Trait与PhantomData
#![feature(negative_impls)]
struct ThreadUnsafe(*mut u8);
impl !Send for ThreadUnsafe {}
impl !Sync for ThreadUnsafe {}
// 现在任何包含ThreadUnsafe的类型自动! Send
struct Container {
inner: ThreadUnsafe,
value: i32,
}
// Container: !Send 自动生效
fn main() {
// let c = Container { ... };
// std::thread::spawn(move || { c }); // 编译错误!
}