Size: a a a

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

2020 December 09

D

Denis in Rust — русскоговорящее сообществo
polunin.ai
перегнать Vec<f64> -> Vec<i32> без аллокаций
ну это выглядит не как задача, а как "решение"
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
@cykooz в общем имхо, я бы лучше в это болото вообще не лез/использовал .align_to_mut. Слишком много способов отстрела ноги.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Denis
ну это выглядит не как задача, а как "решение"
ну может памяти мало. микроконтроллер. или памяти нужно много, деаллоцировать не хочется. какая разница?
источник
2020 December 10

p

polunin.ai in Rust — русскоговорящее сообществo
если человек пишет такой вопрос скорее всего он знает зачем ему это
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
polunin.ai
ну может памяти мало. микроконтроллер. или памяти нужно много, деаллоцировать не хочется. какая разница?
Нужно сделать into_boxed_slice(), из слайса соорудить oneshot аллокатор, и в этом аллокаторе создать вектор
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
polunin.ai
если человек пишет такой вопрос скорее всего он знает зачем ему это
(нет)
источник

D

Denis in Rust — русскоговорящее сообществo
polunin.ai
если человек пишет такой вопрос скорее всего он знает зачем ему это
как показывает практика, почти всегда всё наоборот ))
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Denis
как показывает практика, почти всегда всё наоборот ))
+
источник

p

polunin.ai in Rust — русскоговорящее сообществo
меня вот тоже заебывает вектора переаллоцировать на разные типы. мой внутренний zero-cost перфекционист плачет.
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
polunin.ai
если человек пишет такой вопрос скорее всего он знает зачем ему это
Переношу код из C библиотеки в Rust - это там такая оптимизация. Но там на указателях всё, и просто в конце функции делается free для исходного указателя на буфер f64
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Переношу код из C библиотеки в Rust - это там такая оптимизация. Но там на указателях всё, и просто в конце функции делается free для исходного указателя на буфер f64
ну ты можешь попробовать вручную аллоцировать память, и играться вручную в функции, а возвращать вектор. наверное. но я бы без опыта не лез в это.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Переношу код из C библиотеки в Rust - это там такая оптимизация. Но там на указателях всё, и просто в конце функции делается free для исходного указателя на буфер f64
А тогда тебе точно Vec<i32> нужен, а не &mut [i32], если в С это была стековая переменная?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
я бы сделал с аллокациями и пометкой // TODO: remove allocating new vector.
источник

D

Denis in Rust — русскоговорящее сообществo
polunin.ai
я бы сделал с аллокациями и пометкой // TODO: remove allocating new vector.
👍
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Mikail Bagishov
А тогда тебе точно Vec<i32> нужен, а не &mut [i32], если в С это была стековая переменная?
Да, &[i32] вполне меня устроит
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Да, &[i32] вполне меня устроит
Ну тогда когда с f64 покончено, можно сделать vec.align_to_mut() (или вручную указатели покастовать (std::slice::from_raw_parts_mut(vec.as_ptr_mut(), vec.len()*2)), если там LLVM почему-то не прооптимизирует) и сделать &mut [f64] -> &mut [i32]
источник

A

Adv0cat in Rust — русскоговорящее сообществo
enum MyValues {
   f64(f64),
   i32(i32)
}

🤪
источник

D

Denis in Rust — русскоговорящее сообществo
Adv0cat
enum MyValues {
   f64(f64),
   i32(i32)
}

🤪
union может помочь кстати
источник

D

Denis in Rust — русскоговорящее сообществo
в енуме лишний байт всё-таки
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Adv0cat
enum MyValues {
   f64(f64),
   i32(i32)
}

🤪
Придётся пожертвовать одним байтом на дискриминант и доп проверки при использовании
источник