Маjко
Только наверное bar: impl Trait, без &
Ну если нужно мувнуть да)
Маjко
Со ссылкой валидно
Sergey
То есть в аргументы ввели impl Trait ради перемещения?
Маjко
Разница в том что ссылка на трейт -- трейтобъект, по сути толстый указатель с vtable и динамикой impl Trait выводит конкретный тип, как гереник
Маjко
То есть в аргументы ввели impl Trait ради перемещения?
Не, для консистентности, по большому счету
Маjко
Он будет создавать по функции для каждого типа?
Не экспериментировал, но думаю да
Sergey
Читается как "нечто реализующее трейт"
С дженериками не так просто читается
Маjко
Не очень вижу смысла в этом в позиции аргумента, честно говоря. Разве что для блочного вертикальношо форматирования аргументов это будет красивее значительно Ну и для простых вещей типа impl Clone
Sergey
Cat
Будет, да
Sergey
Жесть
Sergey
Будет
Плохо иметь 2 разных синтаксиса Если это работает так же как дженерики
Cat
Одни минусы
Маjко
fn generic<A: Copy + Clone, B: MyTrait, C: Hash + Eq + PartialEq>(a: A, b: B, c: C) {} fn generic( a: impl Copy + Clone, b: impl MyTrait, c: impl Hash + Eq + PartialEq, ) {}
Маjко
Плохо иметь 2 разных синтаксиса Если это работает так же как дженерики
Согласен, надеюсь хотя бы на уровне конвенций кодстайла что-то с этим сделают и включат линты в rustfmt/clippt
Маjко
Для первого варианта есть where
Есть, но все равно <A, B, C>
Маjко
Я с телефона просто, лень 3 варианта писать, where форматировать сложно руками в телеге
Маjко
Если кому-то удобнее, напишите все 3 варианта вместе для сравнения
Sergey
fn generic<A: Copy + Clone, B: MyTrait, C: Hash + Eq + PartialEq>(a: A, b: B, c: C) {} fn generic<A, B, C>(a: A, b: B, c: C) where A: Copy + Clone, B: MyTrait, C: Hash + Eq + PartialEq {} fn generic( a: impl Copy + Clone, b: impl MyTrait, c: impl Hash + Eq + PartialEq, ) {}
Sergey
Вроде так
Sergey
fn generic<A: Copy + Clone, B: MyTrait, C: Hash + Eq + PartialEq>(a: A, b: B, c: C) {} fn generic<A, B, C>(a: A, b: B, c: C) where A: Copy + Clone, B: MyTrait, C: Hash + Eq + PartialEq {} fn generic( a: impl Copy + Clone, b: impl MyTrait, c: impl Hash + Eq + PartialEq, ) {}
Но 2 вариант не идеален: 3 раза приходится писать имя дженерик типа. Описание типа ниже использования в аргументах, сложновато иногда выискивать.
Маjко
Ну вот с where мне как-то ближе, пока в трейтах, структурах и ассоц. типах нельзя писать impl Trait
Маjко
Так как-то консистентнее
Маjко
С возвращением генерик значения понятно что impl Trait рулит и педалит)
Маjко
А с позицией в аргументе чет неоднозначно
Маjко
Короче, надеюсь на линт консистентности в rustfmt, чтобы не было такого что пол кодовой базы с генерик функциями, написаными так, а половина иначе
Маjко
Но 2 вариант не идеален: 3 раза приходится писать имя дженерик типа. Описание типа ниже использования в аргументах, сложновато иногда выискивать.
Но с другой стороны если a: &mut impl Trait выглядит еще более-менее, то a: &impl Trait это какой-то пиздец Ссылка на импл? Что?
Маjко
Плюс нету турборыбы
Турборыба не нужна для функций, принимающих параметризованное значение
Anton
Почему из расточата только выходят люди?
Anton
И никто не приходит
Anton
Или я не понимаю суть расточата?
Victor
я б тоже вышел. нахерачили больше 1000 сообщений за ночь. Сиди разгребай потом это вот всё. А полезного в итоге нет ничерта =(
Anton
Нужно что-то => ищешь по поиску
Anton
Есть статистика?
Было 666, стало 661 При чем 666 было дней 5 назад
red75prime
Есть статистика?
Конечно, 8 часов назад было 666 человек, сейчас 661
Victor
в надежде на дельные мысли. Я думал этот чат для того чтоб находить в нём что-то полезное для работы с растом.
Victor
можно, конечно, не читать. Но тогда зачем тут сидеть?...
Sherzod
я тебе как ностальгирующий по 2008 говорю
Sherzod
Sherzod
/stat@combot
Combot
combot.org/chat/-1001082778544
trfc
извините, не удержался
Anonymous
почему краб ?
Anonymous
раст это жи ржавчина
Kerrigan
crustaceans
Berkus
достаточно простые правила д
Berkus
их может быть сложно читать из-за плотной записи )
Anonymous
к концу года обгонит с++!
не думаю что ТАК быстро, это 100% Произойдёт но не в следующем году точно
Berkus
тьюринг-полные шаблоны на макросах с зависимыми типами! ням-ням
Kerrigan
Как в Haxe?
как в пхп
-__-
раст это жи ржавчина
Нет, раст это грибы! https://ru.wikipedia.org/wiki/%D0%9F%D1%83%D0%BA%D1%86%D0%B8%D0%BD%D0%B8%D0%B5%D0%B2%D1%8B%D0%B5_(%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA)
պլհկ
Пуккиналес
Loo
https://github.com/mgeisler/version-sync
Berkus
хорошо когда скомпилилось - значит работает, но чот я забодался с бороу чекером спорить
Berkus
вопрос, чюваки struct Writer { buffer: objpool::Item<Vec<u8>>, // owning packet: Packet, // reference to buffer builder: Builder, // reference to packet } impl Writer { fn new(pool_item: objpool::Item<Vec<u8>>) -> Self { Self { buffer: pool_item, packet: Packet::new(&mut pool_item), builder: Builder::new(&mut packet), } } } как вот это сделать то
պլհկ
owning_ref?
Berkus
мм, похоже, спасибо!
Filipp
Лишняя аллокация :( Как там с пином дела в найтли, кто-нибудь знает?
պլհկ
https://doc.rust-lang.org/nightly/std/mem/struct.PinMut.html