Size: a a a

Rust — русскоговорящее сообществo

2020 October 20

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
А impl Sync в таком случае выглядит уместным
Если там unsync::OnceCell, то гонка данных же.
источник

К

Кирилл in Rust — русскоговорящее сообществo
Эрик
Если там unsync::OnceCell, то гонка данных же.
там sync::OnceCell
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Если там unsync::OnceCell, то гонка данных же.
Я подразумеваю, что там все-таки sync::OnceCell, но замечание разумное
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Mikail Bagishov
Хотя не, impl Debug убери
И вообще нельзя ничего вызывать относительно &T, в том числе Debug, Display.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Кстати, наверное можно T завернуть в мьютекс. Это немного увеличит расход памяти, но без ансейфа вообще
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Mikail Bagishov
Кстати, наверное можно T завернуть в мьютекс. Это немного увеличит расход памяти, но без ансейфа вообще
А, нет. Там же будут беды у геттера тогда
источник

Э

Эрик in Rust — русскоговорящее сообществo
Значение придётся сразу заворачивать, или внутри лока Option держать
источник

К

Кирилл in Rust — русскоговорящее сообществo
Я думал, что тот факт, что оно set-ится только один раз из одного места, поможет мне облегчить логику синхронизации
источник

Э

Эрик in Rust — русскоговорящее сообществo
Кирилл
Я думал, что тот факт, что оно set-ится только один раз из одного места, поможет мне облегчить логику синхронизации
Если оно сеттится только раз, то там не нужен Send и Sync.
источник

К

Кирилл in Rust — русскоговорящее сообществo
Эрик
Если оно сеттится только раз, то там не нужен Send и Sync.
Оно сеттится в другом потоке
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Тут вот такая штука поможет:

struct Foo<T>(T);

unsafe impl<T> Sync for Foo<T>;

impl<T> Foo<T> {
   fn new(T) -> Self;
   fn get(&mut self) -> &mut T;
   unsafe fn get_unchecked(&self) -> &T;
}
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Оно поможет не навесить какой-нибудь дерайв случайно.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Кирилл
Оно сеттится в другом потоке
А читается после джойна потока?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Кстати, выглядит как oneshot mpsc вместимости 1
источник

К

Кирилл in Rust — русскоговорящее сообществo
Эрик
А читается после джойна потока?
В любое время. Может быть, даже когда ещё не засетилось.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вообще, по-моему, проще не interior mutability делать, а просто oneshot-channel.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Mikail Bagishov
Кстати, выглядит как oneshot mpsc вместимости 1
Но я таких не видел
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
Но я таких не видел
Да были где-то ваншоты.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Да были где-то ваншоты.
Но у них Sender не клонируется
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну, как минимум дефолтный std channel создаётся ваншотным.
источник