Size: a a a

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

2020 September 08

RS

Roma S in Rust — русскоговорящее сообществo
https://github.com/cgaebel/iobuf а вот есть порт жейнстритовского iobuf (который в похожую сторону тоже)
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
К тому же если типы разные, то ещё и с align бодаться надо.
ага, знаю
источник

Э

Эрик in Rust — русскоговорящее сообществo
И запихивание сзади — это довольно нишевая штука. Я из реальных примеров, где такое было бы нужно, знаю только flatbuffers.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
@larhat не, мне кажется это другое
источник

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
Не проще сделать struct BiVec(Vec<T>, BackwardsVec<U>); ?
источник

V

Vladimir in Rust — русскоговорящее сообществo
вафель 🧇
Ну вообще мне просто интересно по эксперементировать. А так, эдакая экономия на аллокациях и занимаемом месте.

У меня другая структура данных через это выражается
А реалокации?
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Ощущение какого-то оверинжиниринга.
да
источник

Э

Эрик in Rust — русскоговорящее сообществo
Vladimir
А реалокации?
Аллоцируешь новый aligned массив, копируешь левое в начало, правое в конец.
источник

V

Vladimir in Rust — русскоговорящее сообществo
Эрик
Аллоцируешь новый aligned массив, копируешь левое в начало, правое в конец.
Ага, очень удобно)
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Vladimir
Ага, очень удобно)
А что не так?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Vladimir
Ага, очень удобно)
Ну норм, в общем-то, там из нестандартного только фиксы align'а и копирование, а так большую часть кода можно скопипастить из std::vec::raw_vec.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Ну норм, в общем-то, там из нестандартного только фиксы align'а и копирование, а так большую часть кода можно скопипастить из std::vec::raw_vec.
Правда ещё с capacity непонятно что делать
источник

V

Vladimir in Rust — русскоговорящее сообществo
Ну хз, мне кажется эта экономия на алокациях выходит боком:
1) обратный порядок у элементов которые сзади, значит нельзя уже использовать как нормальный массив.
2) при этом если хоть один из массивов вырастает, нужно переалоцировать и заниматься перемещениями оба.
В адекватном варианте алокатора, тебе не всегда нужно делать memmove при реалокации вектора. А тут точно всегда.
источник

JG

JeisonWi Garrison in Rust — русскоговорящее сообществo
Тут в свое время срачик был про Linux Kernel + Clang - в 5.9 он официально поддерживается для x86-32bit https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.9-i386-Clang-Kernels
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Vladimir
Ну хз, мне кажется эта экономия на алокациях выходит боком:
1) обратный порядок у элементов которые сзади, значит нельзя уже использовать как нормальный массив.
2) при этом если хоть один из массивов вырастает, нужно переалоцировать и заниматься перемещениями оба.
В адекватном варианте алокатора, тебе не всегда нужно делать memmove при реалокации вектора. А тут точно всегда.
Справедливые замечания 🤔
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
Правда ещё с capacity непонятно что делать
struct BiVec<T, U> {
raw: RawVec, // ptr + capacity
left: usize, // where the left could be written
right: usize, // where the right could be written
}
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
struct BiVec<T, U> {
raw: RawVec, // ptr + capacity
left: usize, // where the left could be written
right: usize, // where the right could be written
}
RawVec<???>
источник

Э

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

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Ну вот и вопрос: что должна отображать capacity? Размер в байтах? Размер в T? Размер в U?
источник