Size: a a a

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

2020 September 21

Э

Эрик in Rust — русскоговорящее сообществo
Или iter().rev().position().
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
iter().rposition()
Да, этот вариант по идее лучше
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Спс
источник
2020 September 22

q

qthree in Rust — русскоговорящее сообществo
Привет. У кого нибудь получалось dyn FnOnce в bumpalo::boxed::Box запихнуть? Пишет expected trait object dyn std::ops::FnOnce, found closure
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
Bumpalo наверное хочет sized, а dyn FnOnce ансайзд
источник

KR

Kai Ren in Rust — русскоговорящее сообществo
qthree
Привет. У кого нибудь получалось dyn FnOnce в bumpalo::boxed::Box запихнуть? Пишет expected trait object dyn std::ops::FnOnce, found closure
Вероятно вывод типов не могёт. Попробуй as _.
источник

q

qthree in Rust — русскоговорящее сообществo
Oleg Andreev
Bumpalo наверное хочет sized, а dyn FnOnce ансайзд
Не, если без Box аллоцировать, а напрямую, то &mut FnOnce выдаёт, только от него толку мало, т.к. FnOnce функции по self вызываются.
источник

q

qthree in Rust — русскоговорящее сообществo
Как вариант заменил Box<dyn FnOnce> на &mut FnMut, значение которое захватывается замыканием обернул в Option и внутри FnMut делаю take().unwrap()
источник

q

qthree in Rust — русскоговорящее сообществo
Kai Ren
Вероятно вывод типов не могёт. Попробуй as _.
Пробовал уже:
bumpalo::boxed::Box:new_in((move || value.consume()) as dyn FnOnce, bump) - жалуется что нельзя кастовать в unsized.
bumpalo::boxed::Box:new_in((move || value.consume()), bump) as bumpalo::boxed::Box<dyn FnOnce> - жалуется что не примитивный каст.
Подозреваю там какая то компиляторная магия в случае с std::boxed::Box<dyn Trait>, которая не работает с пользовательскими типами.
источник

Э

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

Э

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

q

qthree in Rust — русскоговорящее сообществo
Второе это про вызов функции без разыменования референса, про первое не уверен (и оно всё равно nightly-only). Проблема в том что он анонимный тип замыкания не кастит к трейт-объекту.
источник

R

Roman in Rust — русскоговорящее сообществo
qthree
Привет. У кого нибудь получалось dyn FnOnce в bumpalo::boxed::Box запихнуть? Пишет expected trait object dyn std::ops::FnOnce, found closure
Имплементация coersing-а для своих типов доступна только в nightly
источник

R

Roman in Rust — русскоговорящее сообществo
Потому что нужно вот это вот заимплементить
https://doc.rust-lang.org/std/ops/trait.CoerceUnsized.html
источник

R

Roman in Rust — русскоговорящее сообществo
Попробуй руками вот так

let f: *mut dyn FnOnce() = bump.alloc(move |args| yada-yada);
bumpallo::boxed::Box::from_raw(f);
источник

R

Roman in Rust — русскоговорящее сообществo
Ну или аллоцируй через bumpallo::boxed::Box, конвертни в указатель, скасти и пихай обратно в Box
источник

Э

Эрик in Rust — русскоговорящее сообществo
Roman
Ну или аллоцируй через bumpallo::boxed::Box, конвертни в указатель, скасти и пихай обратно в Box
А дропаться оно как будет?
источник

Э

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

R

Roman in Rust — русскоговорящее сообществo
Ну конечно. Надо в функции это сделать, что б на входе и на выходе lifetime сохранить
источник

R

Roman in Rust — русскоговорящее сообществo
Иначе может быть use-after-free
источник