⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

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的等价性,以及为什么稳定版可以用不安全的Send替代。

#![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 }); // 编译错误! }

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 122 篇
0 完成
🔥 0