Size: a a a

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

2020 August 28

V

Vladimir in Rust — русскоговорящее сообществo
Khachatur Harutyunyan
Изначальный вопрос в следующем.
let task = unsafe {
   mem::transmute::<Box<Task + Send + 'scope>,
                    Box<Task + Send + 'static>>(Box::new(job))
}
;

удалится ли то, что внутри task а при выходе из скопа ?
Внутренний лайфтайм не будет влиять никак на удаление.
Т.е. можешь считать что там нет трансмьюта. Он нужен только чтоб удовлетворить компилятор и/или внешнюю либу которая требует статик лайфтайм.
При неправильном использовании может вызвать use-after-free. Но если все удаляется когда надо, то не страшно
источник

KH

Khachatur Harutyunya... in Rust — русскоговорящее сообществo
Понятно. Спасибо. Библиотека какая-то не очень, много trasmute cast-ov UnsafeCell -ov ит.д.
источник

V

Vladimir in Rust — русскоговорящее сообществo
Khachatur Harutyunyan
Понятно. Спасибо. Библиотека какая-то не очень, много trasmute cast-ov UnsafeCell -ov ит.д.
Если она низкоуровневая, то это нормально.
(Логика которую ты скинул очень похожа на scoped threads из кросбима, правда они не немного поменяили уже https://docs.rs/crate/crossbeam/0.3.0/source/src/lib.rs )
источник

KH

Khachatur Harutyunya... in Rust — русскоговорящее сообществo
А может кто знает другую клиент библиотеку к Аэроспайк? Хотя crates.io выдает только эту, причем всего 4500 скачиваний. Неужели нет альтернативы, вроде база Аэроспайк не такая уж экзотика
источник

KH

Khachatur Harutyunya... in Rust — русскоговорящее сообществo
Vladimir
Если она низкоуровневая, то это нормально.
(Логика которую ты скинул очень похожа на scoped threads из кросбима, правда они не немного поменяили уже https://docs.rs/crate/crossbeam/0.3.0/source/src/lib.rs )
да, похоже на то
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
источник

KH

Khachatur Harutyunya... in Rust — русскоговорящее сообществo
ну так если есть утечка памяти, то первое на что подумаешь это ансейф
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Хм. Я вот не могу сходу придумать нормальный ансейфный способ утечь память.
Box::leak, MaybeUninit::new, ManuallyDrop::new, mem::forget, цикл из Arc-ов это все сейфовые.
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
alloc ручками позвать, как в старой доброй сишке)
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ну он почти что сейф.
источник

KH

Khachatur Harutyunya... in Rust — русскоговорящее сообществo
есть еще в библиотете такая структура, но тут думаю проблем не должно быть
pub struct SharedSlice<T> {
   
value: Arc<UnsafeCell<Vec<T>>>,
}
источник

MB

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

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ты точно хочешь искать утечку глазами?
источник

KH

Khachatur Harutyunya... in Rust — русскоговорящее сообществo
Mikail Bagishov
Ты точно хочешь искать утечку глазами?
Уже нет ))
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Mikail Bagishov
Хм. Я вот не могу сходу придумать нормальный ансейфный способ утечь память.
Box::leak, MaybeUninit::new, ManuallyDrop::new, mem::forget, цикл из Arc-ов это все сейфовые.
unsafe { &*Box::into_raw(b) }
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Хотя можно в референс не превращать, тогда тоже сейфовый
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Emmanuel Goldstein
unsafe { &*Box::into_raw(b) }
Это ж то же самое что Box::leak, который safe
источник

MS

Marat Safin in Rust — русскоговорящее сообществo
источник

DK

Dmitriy Knyaginin in Rust — русскоговорящее сообществo
Привет, у меня вопрос... Какая ниша сейчас у rust?
источник