Anonymous
)00)
Loyd
Нет, ты в типе фактически структуру вычислений показываешь
Loyd
И если ты объединяешь необъединимое, то абстракция хуёвая у тебя
Oleg
Oleg
Oleg
это разные типы, реализующие один заранее известный trait
Oleg
абстракция уровня impl Trait
Loyd
Oleg
да, я вижу как обойтись здесь без аллокации на хипе
Oleg
т.е. без Box
Oleg
такие вопросы здесь постоянно задают
Loyd
Который не влезет в кеш
Oleg
вот тот же вопрос
Oleg
https://is.gd/TO7J6Y
подскажите, как это побороть?
Oleg
Anonymous
кк
Oleg
|x| x *2 - это не Fn(usize) -> usize
Oleg
т.е. это замыкание, а не функция
Oleg
попробуй сам
Anonymous
pub struct Filter<I, P>
Anonymous
P это функция
Oleg
ну хорошо
fn my_iter(coef: &usize) {
.. match {
true => xs.map(|x| x * *coef)
Oleg
так точно не Fn
Loyd
Так F, который F: Fn...
Loyd
Без impl никак, очевидно же
Loyd
Что за детские вопросы
Loyd
Oleg
Oleg
представим, что у меня бесконечный итератор
Anonymous
分解物質
分解物質
они же медленные и аллоцируют
Oleg
В общем, не понравилась моя идея никому
Anonymous
https://github.com/rust-lang/rfcs/pull/1450
Oleg
Автогенерируемых енумов
Oleg
Loyd
А, можешь же
Oleg
Loyd
Конечно
Anonymous
я не знаю что релевантно к слову "запихнуть"
Loyd
enum Lol<I> { A(I) }
fn g(v: Vec<u32>) -> Lol<impl Iterator<Item = u32>> { Lol::a(v.into_iter()) }
Oleg
Oleg
теперь вопрос
Anonymous
что это за синтакс вообще
Oleg
неужели удобно руками писать каждый раз енумы
Oleg
и реализовывать каждый раз тривиальным образом трейты
Loyd
Что?
Loyd
О чём ты вообще?
Loyd
Ты спросил "как запихнуть в enum"
Loyd
Тебе показали.
分解物質
Oleg
Вопрос был скорее о снятии бойлерплейта
Michael
Anonymous
что вообще значит impl перед названием типа
Anonymous
кроме обозначения блока с имплементацией трейта
Anonymous
ок, трейта
Anonymous
оч смешно
Loyd
Потому что кроме как вызова аллокатора (а jemalloc хорошо оптимизирован, чтобы отдавать постоянно одинаковые размеры, не slab, конечно, но тоже неплохо), выигрыша нет.
Loyd
А с точки зрения cpu может быть и проигрыш
Loyd
Ты дальше обрабатывать этот тип должен
Oleg
Loyd
и внутри него будет такой код:
fn do_smthng(...) -> ... {
match self {
A(a) => a.do_smthng(),
B(b) => b.do_smthng()
}
}
Loyd
Что инлайн? Ты вот эти ветки как инлайнить собрался?
Loyd
Инлайнишь каждую ветку => вылетаешь из кеша, не инлайнишь => у тебя всё равно jmp. Лежат ветки рядом или нет — одному компилятору известно