Αλεχ
вы мне лучше объясните вот это
Αλεχ
Alex@ZPC MINGW64 ~/Documents/Rust/boyan_detector_bot (feature/mutiple_chats) $ cargo fmt error: toolchain 'nightly-2018-06-28-x86_64-pc-windows-gnu' does not have the binary `cargo-fmt.exe` Alex@ZPC MINGW64 ~/Documents/Rust/boyan_detector_bot (feature/mutiple_chats) $ cargo --version cargo 1.29.0-nightly (2cd36b4ed 2018-07-25) Alex@ZPC MINGW64 ~/Documents/Rust/boyan_detector_bot (feature/mutiple_chats) $ rustup component add rustfmt-preview --toolchain nightly-x86_64-pc-windows-gnu info: component 'rustfmt-preview' for target 'x86_64-pc-windows-gnu' is up to date
Αλεχ
он с какого-то хуя собирает под 06-28
Αλεχ
он должен на последнем найтли собирать
Αλεχ
тулчейн-файла нет
Αλεχ
а сука
Αλεχ
$ rustup toolchain list stable-x86_64-pc-windows-gnu nightly-2018-06-28-x86_64-pc-windows-gnu (default) nightly-2018-06-28-x86_64-pc-windows-msvc nightly-2018-07-24-x86_64-pc-windows-msvc nightly-x86_64-pc-windows-gnu
Αλεχ
понятно
Αλεχ
обновил компилятор - дефолт сбрсоился
Αλεχ
warning: it is more idiomatic to loop over references to containers instead of u sing explicit iteration methods --> imagedb\src\lib.rs:104:43 | 104 | for &(ref image, ref metadata) in self.images.iter() { | ^^^^^^^^^^^^^^^^^^ help: to writ e this more concisely, try: `&self.images` | = note: #[warn(explicit_iter_loop)] on by default = help: for further information visit https://rust-lang-nursery.github.io/ru st-clippy/v0.0.212/index.html#explicit_iter_loop
Αλεχ
хмм
Αλεχ
тут кто-то затирал, что лучше iter или мне кажется?
Денис
оооо, так в клиппи этого нет, потому что это завезли в компилятор!
Денис
а блин, это и есть клиппи
Αλεχ
https://play.rust-lang.org/?gist=8bb8500976a9f84a9f35b35c8ff9d29d&version=stable&mode=debug&edition=2015
Αλεχ
чет он тупой какой-то
Αλεχ
предлагает Default который уже есть
Денис
предлагает Default который уже есть
похоже с дженериками не справляется
Αλεχ
да
Αλεχ
я сначала подумал что ему констрейнт не нравится
Αλεχ
но он просто с ними не дружит
Денис
лол, если вручную заимплементить Default, то варнинга нет
Денис
https://play.rust-lang.org/?gist=8bb8500976a9f84a9f35b35c8ff9d29d&version=stable&mode=debug&edition=2015
тебе уже кстати говорили, что добавлять ограничения на дженерики при объявлении типа — моветон?
Αλεχ
нет
Αλεχ
я не люблю where если там не километровое определение
Денис
причём здесь where?
Αλεχ
тогда о чем речь?
Денис
про generic bound при объявлении типа
Денис
struct Lol<Wut: Debug> { ... }
Денис
ну то есть иногда это оправдано, особенно если ты юзаешь associated types из баунда, но обычно — нафиг не нужно
Денис
https://play.rust-lang.org/?gist=8bb8500976a9f84a9f35b35c8ff9d29d&version=stable&mode=debug&edition=2015
ты изменил код, или у меня галлюцинации, и у тебя там с самого начала было #![allow(unused)] ???
Roma
Debug требовать может быть странно, но в целом зависит же от того что за типа у тебя и чо за баунды
Денис
Roma
это, кстати, бесит; могли бы по умолчанию брать из структурки
Roma
но ок, твой пойнт — саму структурку держать чистой, а баунды только в импл? и чо так часто делают?
Денис
но ок, твой пойнт — саму структурку держать чистой, а баунды только в импл? и чо так часто делают?
угу, https://users.rust-lang.org/t/should-i-put-where-bounds-on-the-struct-or-on-the-impl/7064/4 , где-то был более развёрнутый ответ, но чё-т не гуглится
Αλεχ
если у тебя есть ограничение на структуре
Αλεχ
ты должен везде совать
Денис
если у тебя есть ограничение на структуре
я делаю ограничение на структуре, только когда это прям вообще необходимо
Денис
но это так и есть
ну в твоём случае с Clone, который ты убрал, это не "необходимо" =) тебе достаточно сделать баунд в impl-блоке, причём только для тех методов, где этот клон нужен
Αλεχ
для 100% методов
Денис
ну твоему методу new он не нужен, например :)
Αλεχ
ага
Денис
плюс этого подхода в том, что пользователю API будет сразу понятно, какие конкретно методы могут делать клонирование
Αλεχ
можно создать объект, только с ним ничо сделаь нельзя
Αλεχ
хз
Αλεχ
мне кажется ты не совсем прав
Денис
ну такое, minor thing, конечно
Αλεχ
если у тебя нет полезных методов без констрейнта
Αλεχ
то надо его делать на стурктуре
Денис
ну вот например https://doc.rust-lang.org/std/collections/struct.HashSet.html
Roma
угу, https://users.rust-lang.org/t/should-i-put-where-bounds-on-the-struct-or-on-the-impl/7064/4 , где-то был более развёрнутый ответ, но чё-т не гуглится
спасиб, норм пойнт — https://doc.rust-lang.org/src/std/collections/hash/map.rs.html#399 тут тож делают так
Roma
а чот клиппи на меня не наорал за это %(
Денис
а чот клиппи на меня не наорал за это %(
ну это имхо слишком minor issue + ему, вероятно, будет сложно понять, нужен ли тебе этот баунд реально в структурке или таки нет
Αλεχ
да понятное дело, что структура может быть полезной для любых типов Т
Αλεχ
а для конкретных реализовывать дополнительный функционал
Αλεχ
но в моем случае для любых типов не реализующих трейт структура бесполезная
Loyd
Чёт спор про монорепы поутих
Loyd
Но я отмечу, что есть промежуточный вариант — монорепа с крейтами, а они друг от друга по версиям уже.
Loyd
Ну, подход lerna и прочих
Loyd
С одной стороны нет хуйни, когда из одной части кода хер пойми что импортируется (а это дело очень любят, удобненько же). С другой, не надо заводить дублирующие ПРы, если репы однотипные (скажем, проекты одинаковые параллельно делаются и надо везде что-то добавить)
Loyd
Но подход больше для развесистых либ, вроде serde или babel-я, нежели для проектов
Loyd
второй-то не игрушечный)
Vladimir
Но я отмечу, что есть промежуточный вариант — монорепа с крейтами, а они друг от друга по версиям уже.
Ну про такой речь и шла, никто не говорит все складывать в один крейт, разные папки-разные файлы. Удобнее фиксить в случае смены апи, на начальных этапах
Loyd
А
Loyd
Ну это просто не совсем то, что понимают под "монорепой" в, например, яндексе
Vladimir
А там чё за говно? Просто думал что в контексте раста ток так
magras
При размещении баундов на структуре сообщение об ошибке менее запутано. Конечно если речь идет о максимально обощенном коде, то да лучше уменьшать скоуп, но мне чаще встречауется код, где первое предпочтительнее.
でゲソ
でゲソ
でゲソ
чяднт