Size: a a a

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

2020 March 03

DS

Dmitry Sokolov in Rust — русскоговорящее сообществo
А в других языках такие же проблемы с этим  "orphan rule"?
источник

m

mAX in Rust — русскоговорящее сообществo
Спасибо! разобрался.. работает!)
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
Dmitry Sokolov
А в других языках такие же проблемы с этим  "orphan rule"?
в цпп вроде как пофиг потому что там вообще принцип "разворачиваем шаблон - а там посмотрим что получится"
источник

RA

Roman Akberov in Rust — русскоговорящее сообществo
Oleg Andreev
См. "orphan rule". Ты не можешь иметь две потенциально конфликтующие реализации трейта на один и тот же тип. В твоем случае второй импл имеет трейт баунд на внешний трейт. Если б он был объявлен в твоем же крейте, то ты бы мог так написать и компилятор проверил бы что у тебя нет impl protobuf::Message for bool (из-за конфликтов). А поскольку протобуф - из другого крейта, то кто-то там может объявить impl protobuf::Message for bool и тогда будет конфликт с твоей либой.
Это перекрытие, а не orphan rule.
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
Roman Akberov
Это перекрытие, а не orphan rule.
да. Я имел в виду, что orphan rule сделан потому что перекрытие проверяется локально для крейта.
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
хотя, мож, я не прав. И даже с полностью локальными трейтами этот номер не пройдет
источник

В

Вафель in Rust — русскоговорящее сообществo
Oleg Andreev
хотя, мож, я не прав. И даже с полностью локальными трейтами этот номер не пройдет
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
rustc - умничка
источник

m

mAX in Rust — русскоговорящее сообществo
Товарищи, а еще такой вопрос
сделал я обертку
pub struct ProtoMsg<M: protobuf::Message>(pub M);
все работает..
но мне нужно Vec<ProtoMsg<Id>> допустим сконвертить в Vec<Id>
допустим как-то так..
let arr: Vec<_> = arr.iter().map(|i| i.0).collect();
но i у нас передается как &i а есть ли какой-то map чтобы arr потреблял и move элементам делал?
Иначе получается мне нужно Clone() делать или мутить что-то с Option<> из которого take() делать например
хочется красивое решение)
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
mAX
Товарищи, а еще такой вопрос
сделал я обертку
pub struct ProtoMsg<M: protobuf::Message>(pub M);
все работает..
но мне нужно Vec<ProtoMsg<Id>> допустим сконвертить в Vec<Id>
допустим как-то так..
let arr: Vec<_> = arr.iter().map(|i| i.0).collect();
но i у нас передается как &i а есть ли какой-то map чтобы arr потреблял и move элементам делал?
Иначе получается мне нужно Clone() делать или мутить что-то с Option<> из которого take() делать например
хочется красивое решение)
into_iter не подойдёт?
источник

m

mAX in Rust — русскоговорящее сообществo
Mikhail Voronov
into_iter не подойдёт?
вроде да.. собралось, блин я не знал про него и нагуглить не смог! спасибо)
источник

P

Pavel in Rust — русскоговорящее сообществo
Вафель
Потому что последнее поле в структуре может быть ?Sized. Такую структуру создать нельзя, но

struct Lol<T: ?Sized> {
   pub func: T
}


С T = dyn Trait можно.
можно ж создать, просто за указателем хранить надо
источник

P

Pavel in Rust — русскоговорящее сообществo
polunin.ai
нет, я проверял(
странно, я так делал
источник

P

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

P

Pavel in Rust — русскоговорящее сообществo
ну, это про другое
источник

P

Pavel in Rust — русскоговорящее сообществo
Oleg Andreev
См. "orphan rule". Ты не можешь иметь две потенциально конфликтующие реализации трейта на один и тот же тип. В твоем случае второй импл имеет трейт баунд на внешний трейт. Если б он был объявлен в твоем же крейте, то ты бы мог так написать и компилятор проверил бы что у тебя нет impl protobuf::Message for bool (из-за конфликтов). А поскольку протобуф - из другого крейта, то кто-то там может объявить impl protobuf::Message for bool и тогда будет конфликт с твоей либой.
это кстати интересно тем, что мы всё равно у себя собираем эти крейты и по-идее, должны будем увидеть, когда появится такой импл
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Pavel
это кстати интересно тем, что мы всё равно у себя собираем эти крейты и по-идее, должны будем увидеть, когда появится такой импл
Увидеть то увидим, непонятно что дальше делать.
источник

P

Pavel in Rust — русскоговорящее сообществo
Casual tears
Увидеть то увидим, непонятно что дальше делать.
ругаться точно так же, если оно появилось, значит обновили зависимости
источник

P

Pavel in Rust — русскоговорящее сообществo
хотя мб тут расчёт на то, что добавить могут в патч-версии
источник

P

Pavel in Rust — русскоговорящее сообществo
кстати, бесит, что карго игнорит буквальные патч-версии, хочешь даунгрейднуть? "удачки, у тебя написано 0.4.2 везде? а я всё равно заюзаю 0.4.3", обновил карго лок? ничего, всё равно заигнорит конкретные версии и надо писать =, если точно хочешь держать их
источник