Size: a a a

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

2020 August 09

BD

Berkus Decker in Rust — русскоговорящее сообществo
твой арм умеет unaligned reads?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Eva Baka
так мужики помогайте и спасайте, как жить с #[repr(packed)] на arm? при обращении к полю струтуры (но не к первому) все падает. при условии, что те же плюсы это осиливают и работает как надо
Так старый баг arm'a, не?
источник

D

Denis in Rust — русскоговорящее сообществo
Eva Baka
так мужики помогайте и спасайте, как жить с #[repr(packed)] на arm? при обращении к полю струтуры (но не к первому) все падает. при условии, что те же плюсы это осиливают и работает как надо
по ссылке небось обращаешься?
источник

Э

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

Э

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

Э

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

D

Denis in Rust — русскоговорящее сообществo
хм, а есть плейграунд на арме?
источник

EB

Eva Baka in Rust — русскоговорящее сообществo
Berkus Decker
ты чего то путаешь, плюсы тут причем
ну я это ... через bindgen из плюсовых хидеров стыбзил структуры, он мне высрал в каждом packed. вот и говорю, что в расте все падает, а в тех же плюсах все ок
вот и спрашиваю, как жить
источник

D

Denis in Rust — русскоговорящее сообществo
Eva Baka
ну я это ... через bindgen из плюсовых хидеров стыбзил структуры, он мне высрал в каждом packed. вот и говорю, что в расте все падает, а в тех же плюсах все ок
вот и спрашиваю, как жить
к полям как обращаешься? го mve
источник

Э

Эрик in Rust — русскоговорящее сообществo
Eva Baka
ну я это ... через bindgen из плюсовых хидеров стыбзил структуры, он мне высрал в каждом packed. вот и говорю, что в расте все падает, а в тех же плюсах все ок
вот и спрашиваю, как жить
let unpacked: [u8; N] = unsafe { transmute(packed) }; или что-то вроде того.
источник

EB

Eva Baka in Rust — русскоговорящее сообществo
да, я понимаю, что могу просто высрать поинтер с каким-то оффсетом и прочитать его
но структуры и для того придуманы, чтобы такой хуйней не страдать
источник

D

Denis in Rust — русскоговорящее сообществo
MVE
В СТУДИЮ
источник

D

Denis in Rust — русскоговорящее сообществo
или MRE )
источник

D

Denis in Rust — русскоговорящее сообществo
хм, или даже MWE, как говорит педивикия
> In computing, a minimal working example (abbreviated MWE) is a collection of source code and other data files which allow a bug or problem to be demonstrated and reproduced.
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Eva Baka
ну я это ... через bindgen из плюсовых хидеров стыбзил структуры, он мне высрал в каждом packed. вот и говорю, что в расте все падает, а в тех же плюсах все ок
вот и спрашиваю, как жить
https://doc.rust-lang.org/std/ptr/fn.read_unaligned.html
Можешь поля вот так читать, если они Copy.
источник

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
Он из крестов берёт, там всё Copy.
источник

EB

Eva Baka in Rust — русскоговорящее сообществo
о, с таким еще жить можно, спасибо
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Eva Baka
о, с таким еще жить можно, спасибо
Там прямо в доках написано, что оно всё еще будет технически UB, но по идее работать должно.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вообще, идеальный вариант — делать true Rust структуру из packed C++
struct Unpacked {
 i: i8,
 f: f32
}

impl Unpacked {
 fn from_packed(pack: CppStruct) -> Self {
   const SIZE: usize = mem::size_of<CppStruct>();
   let buf: [u8; SIZE] = unsafe { mem::transmute(pack) };
   Self { i: buf[0] as i8, f: f32::from_ne_bytes(buf[1..]);
 }
}
источник