Size: a a a

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

2020 August 31

/

/bin/cat in Rust — русскоговорящее сообществo
* mut ссылка никуда не передается
источник

MB

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

/

/bin/cat in Rust — русскоговорящее сообществo
vec.with( * мутирует объект * )
structure { by_ref: shared ссылка на объект }
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Разве это уже не safe?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
Зачем?
LocalKey почему-то &mut-ы не отдает.
Потому что его сделали Send + Sync.
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Я правильно понимаю, что нужно не допускать передачи mut reference куда-то в userland?
источник

/

/bin/cat in Rust — русскоговорящее сообществo
В остальном это safe
источник

Э

Эрик in Rust — русскоговорящее сообществo
/bin/cat
Я правильно понимаю, что нужно не допускать передачи mut reference куда-то в userland?
Нет.

let cell = UnsafeCell::new(x);
let r: &X = &*cell.get();
let mr: &mut X = &mut *cell.get();
let s = Astruct { r, mr };

Тут UB.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Потому что его сделали Send + Sync.
А, ок.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Короче, надо контролировать уникальность мутабельных ссылок.
Штука, которую я тебе скинул, ее добивается.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вообще, это можно без ансейфа делать на Cell, если T: Default.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну либо оборачивать в Option, если там Default дорого создавать.
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Разве Cell не копирует?
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Или можно просто брать get_mut
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Некоторые его методы используют копирование, другие нет.
источник

Э

Эрик in Rust — русскоговорящее сообществo
/bin/cat
Или можно просто брать get_mut
get_mut — это только у RefCell.
источник

MB

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

Э

Эрик in Rust — русскоговорящее сообществo
Cell копирует, но у тебя все usize в кудахтере всегда копируются, если что.
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Эрик
get_mut — это только у RefCell.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Так что скопировать None<T>, если T меньше трёх usize — это вовсе не копирование.
источник