Size: a a a

2020 December 18

K

Kitsu in Rust Beginners
Andrey Pushkar
Я хочу или функцию с сигнатурой fn<T>(value: &T) -> &[u8], которая бы если T - это struct возвращала бы байты самой структуры, а если T - это Vec структур, то возвращала бы байты содержимого вектора.
Печенкой я чую, что вряд ли это возможно (но вдруг?), так что альтернативно - я хочу две функции с такой же сигнатурой (отдельно для value-типов и векторов), но хочу какие-то trait bounds или еще что-то в таком духе, чтобы их нельзя было случайно перепутать :)
А, ну это специализацией решается (которая в найтли)
источник

НТ

Никита Тыманович... in Rust Beginners
Kitsu
as_ref - каст между референсами, необязательно одинаковыми, например есть impl AsRef<OsStr> for str
borrow - неожиданно борровинг, т.е. заимствование объекта у овнед типа
т.е. borrow дает только заимствование текущего типа, а as_ref произвольного ?
источник

K

Kitsu in Rust Beginners
у меня есть подозрение, к слову, что без packed получать слайс из произвольной структуры — UB
источник

AP

Andrey Pushkar in Rust Beginners
Kitsu
А, ну это специализацией решается (которая в найтли)
Понятно, спасибо большое
источник

MB

Mikail Bagishov in Rust Beginners
Kitsu
у меня есть подозрение, к слову, что без packed получать слайс из произвольной структуры — UB
Да.
Гораздо лучше &[MaybeUninit<u8>]
источник

K

Kitsu in Rust Beginners
Kitsu
у меня есть подозрение, к слову, что без packed получать слайс из произвольной структуры — UB
^конкретно для fn<T>(value: &T) -> &[u8] по крайней мере
источник

AP

Andrey Pushkar in Rust Beginners
Kitsu
у меня есть подозрение, к слову, что без packed получать слайс из произвольной структуры — UB
Хм, спасибо, звучит довольно разумно
источник

AT

Alexander T in Rust Beginners
Mikail Bagishov
Дальше можно делать
loop {
   select! {
       _ = my_fut => {
          ...
       }
       _ = token.cancelled() => {
           break
      }
   }
}
эта штука сработала, спасибо огромное! без всяких лайфтаймов и box dyn фигни.
правда не понимаю, как в select! юзать другие макросы (типа dbg!), ну разберусь.
источник

K

Kitsu in Rust Beginners
Andrey Pushkar
Понятно, спасибо большое
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ee04f4cb9981225dc1fe3e77dc142d90
Хы, автореф хак со специализацией работает. Но я не уверен, что тут нет УБ
источник

AP

Andrey Pushkar in Rust Beginners
Аа, так специализация не только в найтли есть?
источник

K

Kitsu in Rust Beginners
это "урезанная" специализация
источник

AP

Andrey Pushkar in Rust Beginners
А вообще более глобально, я так понимаю, лучше всего не играть с огнем, и какой-нибудь bincode использовать для изготовления блобов из чего угодно? Я просто к нему с подозрением отношусь, потому что когда-то напоролся на то, что сериализация больших объектов (даже простых, как Vec<u8>) просто чудовищно долго в дебаг-сборках работала, прям шоустоппер это был. Так что теперь не уверен, как лучше поступить - рисковать UB или терпеть столлы :(
источник

K

Kitsu in Rust Beginners
Почти всегда лучше использовать бинкод, да
источник

AP

Andrey Pushkar in Rust Beginners
Печально :( Я просто еще сериализацию в другом месте использую для передачи данных, в т. ч. картинок из крейта image через zeromq, и там пришлось извратиться и сделать специальный случай - что все сообщения передаются за один раз, и только картинки за два - сначала сериализованные метаданные, а потом само содержимое напрямую массивом байт, минуя bincode
источник

AP

Andrey Pushkar in Rust Beginners
И очень не хочется еще и тут такую муть городить
источник

AP

Andrey Pushkar in Rust Beginners
Но спасибо большое еще раз всем, буду думать, как жить дальше :)
источник

c

call eax in Rust Beginners
Alexander T
то есть, к примеру, в tbot’е делаю stateful_event_loop, туда кладу список моих тасок, и из каждого хендлера могу их стартовать-тормозить?
Teloxide
источник

AT

Alexander T in Rust Beginners
call eax
Teloxide
что телоксайд?
источник

c

call eax in Rust Beginners
Alexander T
что телоксайд?
Либа для ботов
источник

AT

Alexander T in Rust Beginners
call eax
Либа для ботов
я в курсе. и что с ней?
источник