Size: a a a

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

2020 September 16

Э

Эрик in Rust — русскоговорящее сообществo
А если не будет имплементить, как Arc<RwLock<Cell<T>>>, то твой impl — это UB.
источник

m

mAX in Rust — русскоговорящее сообществo
да.. блин, я другое пробовал, без Arc внутри.. там нужно было Send Senc)
спасибо! Хотелось разобраться как сделать такую структуру которую шарить между потоков можно и как этим управлять
источник

m

mAX in Rust — русскоговорящее сообществo
Эрик
А если не будет имплементить, как Arc<RwLock<Cell<T>>>, то твой impl — это UB.
понятно, внутри мне не сложно уже Arc<RwLock<>> использовать
главное что из библиотеки наружу  будет торчать условный SegmentsCache с которым легко работать
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
mAX
Товарищи, подскажите пожалуйста!
хочу сделать удобный доступ к объекту из разных потоков
Не очень хочется таскать за собой Arc<RwLock<>> каждый раз и хочется спрятать все в одну структуру и сделать чтобы ее можно было клонировать и отправлять между потоками, тасками tokio

пусть внутри такой структуры уже будет Arc<RwLock<>> и весь код работы с примитивами синхронизации я хочу спрятать в ее методах

Допустим сделал вот так

#[derive(Debug)]
struct SegmentsStore {}

#[derive(Clone, Debug)]
struct SegmentsCache {
   store: std::sync::Arc<parking_lot::RwLock<SegmentsStore>>
}
unsafe impl Send for SegmentsCache {}
unsafe impl Sync for SegmentsCache {}

impl SegmentsCache {
   fn new() -> Self {
       Self { store: std::sync::Arc::new(parking_lot::RwLock::new(SegmentsStore {})) }
   }
   fn add(&self) {  unimplemented!() }
   fn remove(&self) {  unimplemented!() }
}

Достаточно ли этого?
Не понимаю как работают Send и Sync т.к. всегда использовал Arc<> и не парился) И есть опасение что мой вариант хоть и компилится, но может что-то поломать)
Вместо parking_lot::RwLock в асинхронном коде лучше использовать tokio::sync::RwLock, потому что первый блочит таску. Так можно дедлок получить (я получал)
источник

m

mAX in Rust — русскоговорящее сообществo
Andrey Vlasov
Вместо parking_lot::RwLock в асинхронном коде лучше использовать tokio::sync::RwLock, потому что первый блочит таску. Так можно дедлок получить (я получал)
Да, спасибо! Читал про это заметку на хабре. В конкретно моем случае я не использую асинхронные операции после блокировки, и код используется не только с токио. Грубо говоря просто кладу или забираю буффер в hashmap
источник

m

mAX in Rust — русскоговорящее сообществo
как раз поэтому хотел все обернуть в отдельную стркутуру чтобы наружу ничего не торчало и все блокировки обрабатывались внутри ее методов
источник

E

Evgeniy in Rust — русскоговорящее сообществo
Всем привет! Ребят, подскажите пожалуйста. models.rs лежат в /src. Как их правильно импортировать. Доку читаю, не могу понят(((
источник

b

in Rust — русскоговорящее сообществo
в main.rs mod models
источник

E

Evgeniy in Rust — русскоговорящее сообществo
в main.rs mod models
Спасибо
источник

Э

Эрик in Rust — русскоговорящее сообществo
в main.rs mod models
Или в lib.rs, если либа.
источник

E

Evgeniy in Rust — русскоговорящее сообществo
Эрик
Или в lib.rs, если либа.
Уже
pub mod schema;
pub mod models;
источник

Э

Эрик in Rust — русскоговорящее сообществo
Почему pub?
источник

E

Evgeniy in Rust — русскоговорящее сообществo
Эрик
Почему pub?
публичный
источник

Э

Эрик in Rust — русскоговорящее сообществo
Зачем он публичный, если у тебя не либа, а бинарь, и ты только внутри бинаря это всё используешь?
источник

E

Evgeniy in Rust — русскоговорящее сообществo
Эрик
Зачем он публичный, если у тебя не либа, а бинарь, и ты только внутри бинаря это всё используешь?
эти два хочу в либе использовать
источник

Э

Эрик in Rust — русскоговорящее сообществo
Из бинаря в либу тащить? Может наоборот надо?
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Подскажите, существует ли nameof, что бы получить имя переменной как строковую константу при компиляции?
источник

E

Evgeniy in Rust — русскоговорящее сообществo
Эрик
Из бинаря в либу тащить? Может наоборот надо?
Понял спасибо
источник

Э

Эрик in Rust — русскоговорящее сообществo
Zymlex (Юрий)
Подскажите, существует ли nameof, что бы получить имя переменной как строковую константу при компиляции?
Имя типа есть, имени переменной нет, разве что stringify!(x), но он тебе и выдаст что ты в него положишь (то есть "x").
источник

b

in Rust — русскоговорящее сообществo
Evgeniy
Понял спасибо
ну ты добавил в main.rs mod models, а из teacher.rs хочешь вызвать что-то из models?
источник