Маjко
Маjко
Sergey
Маjко
Со ссылкой валидно
Sergey
То есть в аргументы ввели impl Trait ради перемещения?
Маjко
Разница в том что ссылка на трейт -- трейтобъект, по сути толстый указатель с vtable и динамикой
impl Trait выводит конкретный тип, как гереник
Cat
Маjко
Маjко
Sergey
Маjко
Маjко
Sergey
Sergey
Маjко
Не очень вижу смысла в этом в позиции аргумента, честно говоря.
Разве что для блочного вертикальношо форматирования аргументов это будет красивее значительно
Ну и для простых вещей типа impl Clone
Sergey
Маjко
Sergey
Cat
Будет, да
Sergey
Жесть
Sergey
Будет
Плохо иметь 2 разных синтаксиса Если это работает так же как дженерики
Cat
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,
) {}
Sergey
Sergey
Sergey
Ма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ко
Маjко
Плюс нету турборыбы
Турборыба не нужна для функций, принимающих параметризованное значение
Anton
Почему из расточата только выходят люди?
Anton
И никто не приходит
Anton
Или я не понимаю суть расточата?
Victor
я б тоже вышел. нахерачили больше 1000 сообщений за ночь. Сиди разгребай потом это вот всё. А полезного в итоге нет ничерта =(
Sherzod
Anton
Anton
Нужно что-то => ищешь по поиску
Victor
в надежде на дельные мысли. Я думал этот чат для того чтоб находить в нём что-то полезное для работы с растом.
Victor
можно, конечно, не читать. Но тогда зачем тут сидеть?...
Sherzod
Sherzod
я тебе как ностальгирующий по 2008 говорю
Sherzod
Sherzod
/stat@combot
Combot
combot.org/chat/-1001082778544
trfc
Anonymous
почему краб ?
Anonymous
раст это жи ржавчина
Kerrigan
crustaceans
Berkus
Berkus
достаточно простые правила д
Berkus
их может быть сложно читать из-за плотной записи )
Berkus
Berkus
тьюринг-полные шаблоны на макросах с зависимыми типами! ням-ням
Alex
Kerrigan
Євгеній 😌
-__-
раст это жи ржавчина
Нет, раст это грибы! 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
хорошо когда скомпилилось - значит работает, но чот я забодался с бороу чекером спорить
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