Size: a a a

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

2020 March 13

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Ну там комметы негативные
источник
2020 March 14

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
возможно плохо искал, но можно ли как нибудь пометить структуру как NON-thread-safe? нужно для структуры-обертки над хендлами опенгл
источник

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
а вот
impl !Send for SpecialThreadToken {}
impl !Sync for SpecialThreadToken {}
источник

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
источник

АВ

Андрей Власов in RU Rust GameDev — русскоговорящее сообщество
Дмитрий Степанов
возможно плохо искал, но можно ли как нибудь пометить структуру как NON-thread-safe? нужно для структуры-обертки над хендлами опенгл
Она у тебя автоматически помечается сейфовой из-за полей?
источник

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
ага, там же просто u32
источник

AL

Andrey @ozkriff Lesnikov in RU Rust GameDev — русскоговорящее сообщество
приватное поле с сырым указателем еще можно добавить

upd: да, лучше фантомное
источник

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
блин, impl !Send for SpecialThreadToken {} еще не доступно в обычном расте
источник

АВ

Андрей Власов in RU Rust GameDev — русскоговорящее сообщество
Andrey @ozkriff Lesnikov
приватное поле с сырым указателем еще можно добавить

upd: да, лучше фантомное
PhantomData
источник

АВ

Андрей Власов in RU Rust GameDev — русскоговорящее сообщество
С чем-то, что не имплементит автотрейты. Box можно, наверное
источник

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
как-то так ?
pub struct GpuProgram {
   id: GLuint,  
   thread_mark: PhantomData<*const u8>
}
источник

АВ

Андрей Власов in RU Rust GameDev — русскоговорящее сообщество
Дмитрий Степанов
как-то так ?
pub struct GpuProgram {
   id: GLuint,  
   thread_mark: PhantomData<*const u8>
}
Вроде да
источник

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
сработало, спасибо
источник

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
кто-нибудь может объяснить причину почему из Arc нельзя вытащить *const T на внутрянку без вот такой мишуры?
fn arc_into_raw_ptr<T>(arc: Arc<T>) -> *const T {
   let ptr = Arc::into_raw(arc);
   unsafe { Arc::from_raw(ptr) };
   ptr
}
такой код нужен потому что в доках на into_raw идет:
To avoid a memory leak the pointer must be converted back to an Arc using Arc::from_raw`
источник

ДС

Дмитрий Степанов in RU Rust GameDev — русскоговорящее сообщество
в моем конкретном случае сырой указатель будет использоваться в качестве ключа в хешмапе для поиска гпу текстур по указателю на движковую текстуру. казалось бы если запись по указателю все равно требует unsafe то можно было бы просто вернуть его, но нет - нужна вот такая возня
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Эта функция удалит сразу T
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
если это был последний Arc<T>
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Тебе как раз таки нужно просто Arc::into_raw
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Сделать свои дела с сырым *mut T
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
А потом, когда он больше не нужен, сделать обратно Arc::from_raw
источник