Это реализация отрицательного признака для признака Send
, как описано в RFC 19.
Вкратце: характеристика Send
- это автоматическая характеристика, что означает, что она автоматически реализуется для всех типов, которые содержат только другие Send
типы:
unsafe auto trait Send {}
(Send
также является небезопасным признаком, что означает, что его небезопасно реализовывать, но это не имеет отношения к вопросу.)
Характеристика auto
не может определять какие-либо методы, что также делает ее маркерной характеристикой. (Синтаксис для определения автоматических характеристик в настоящее время доступен только в стандартной библиотеке или в ночном компиляторе, но их семантика стабильна.)
Чтобы отказаться от автоматической реализации Send
, вы должны написать явную реализацию отрицательного признака:
impl !Send for MyType {}
Это означает, что даже несмотря на то, что MyType
содержит только другие типы, которые являются Send
, сам MyType
не будет автоматически реализовывать Send
.
См. Также ответ на другой вопрос: Что такое автоматический трейт в Rust?
18.05.2015
stdlib
без каких-либо атрибутов. Но в любом случае, я начал изучать Rust всего неделю назад, и я все еще пытаюсь осмыслить все RFC, экспериментальные функции, что стабильно, а что нет. 04.12.2019