Nano Hash - криптовалюты, майнинг, программирование

Что означает восклицательный знак в реализации трейта?

Я нашел в справочнике по библиотеке для std::rc::Rc это реализация трейта

impl<T> !Send for Rc<T> 
where
    T: ?Sized, 

Что означает восклицательный знак перед Send?

Я проконсультировался с книгой Язык программирования Rust ¹ и The Rust Reference ², но не нашел объяснения. Пожалуйста, дайте ссылку в своем ответе.


¹ особенно [раздел 3.19 Черты характера
² и разделы 5.1 Черты и 5.1 реализации

17.05.2015

Ответы:


1

Это реализация отрицательного признака для признака Send, как описано в RFC 19.

Вкратце: характеристика Send - это автоматическая характеристика, что означает, что она автоматически реализуется для всех типов, которые содержат только другие Send типы:

unsafe auto trait Send {}

(Send также является небезопасным признаком, что означает, что его небезопасно реализовывать, но это не имеет отношения к вопросу.)

Характеристика auto не может определять какие-либо методы, что также делает ее маркерной характеристикой. (Синтаксис для определения автоматических характеристик в настоящее время доступен только в стандартной библиотеке или в ночном компиляторе, но их семантика стабильна.)

Чтобы отказаться от автоматической реализации Send, вы должны написать явную реализацию отрицательного признака:

impl !Send for MyType {}

Это означает, что даже несмотря на то, что MyType содержит только другие типы, которые являются Send, сам MyType не будет автоматически реализовывать Send.

См. Также ответ на другой вопрос: Что такое автоматический трейт в Rust?

18.05.2015
  • @mrnateriver Я только что просмотрел вашу правку и решил сохранить старый синтаксис, но добавить новый синтаксис, поскольку он все еще экспериментальный. Взгляните и дайте мне знать, если что-то отсутствует / не так 04.12.2019
  • @MindSwipe, конечно, без проблем. AFAI понимаю, что этот синтаксис является экспериментальным для пользователей, но он используется в stdlib без каких-либо атрибутов. Но в любом случае, я начал изучать Rust всего неделю назад, и я все еще пытаюсь осмыслить все RFC, экспериментальные функции, что стабильно, а что нет. 04.12.2019
  • Новый синтаксис по-прежнему работает только ночью, но старый синтаксис устарел, поэтому я обновил вопрос (снова), чтобы не вводить в заблуждение новых читателей, а также исправить семантику реализации автографов. 04.12.2019
  • Я сделал этот ответ вики сообщества, спасибо за сотрудничество. 04.12.2019

  • 2

    Это отрицательный trait impl, так что вы можете считать это отказом от Send trait.

    17.05.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..