Какова причина маркировки типа, который содержит! Send поля с чертой Send? - PullRequest
0 голосов
/ 22 октября 2018

Какова причина маркировки типа, содержащего поля !Send (например, Rc или NonNull), признаком Send?Например, стандартная библиотека LinkedList работает следующим образом: она содержит Option<NonNull<_>> полей и реализует черту Send (когда T равно Send).

Насколько это безопасно, каковы гарантии и способы безопасной работы с таким типом?

1 Ответ

0 голосов
/ 22 октября 2018

Посмотрите на обоснование для NonNull, являющегося !Send:

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

Но NonNull в LinkedList является частной реализацией.Если этот тип знает, что внутренний тип T равен Send, и его использование также является Send -безопасным (без небезопасности в общедоступном API), то он может повторно ввести черту Send.

Эта гарантия в основном сводится к тому, что вы не можете получить изменяемые псевдонимы для внутренних типов;и обеспечение отсутствия неожиданной внутренней изменчивости (получите изменяемую ссылку от неизменной).

Эти гарантии не даются NonNull, но они есть в LinkedList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...