kalloc
не, я думал прежде чем раст выбрать
Vladimir
И перезапускать спокойно
Anton
Так, подскажите, как скастить Option<&mut T> к Option<&T>
Vladimir
Пыха, на сишке, да?
kalloc
да
kitsu
ага
Vladimir
Сериализация
Vladimir
Ну вот
Vladimir
Что и требовалось доказать си>руста
kalloc
быстрый шаблонизатор, да
Vladimir
Так, подскажите, как скастить Option<&mut T> к Option<&T>
А зачем? Оно поидее неявно скатится не?
Anton
mismatched types
kitsu
mismatched types
покажи код лучш
Vladimir
Ну вообще x.map(|x|&*x)
Anton
expected type std::option::Option<&Player> found type std::option::Option<&mut Player>
Vladimir
Ну или x.map(AsRef::as_ref)
Vladimir
Нас не обманишь
Vladimir
Мы на русте иногда пишем
Vladimir
А не только в чатике сидим
Anton
fn find_player(&mut self, socket: Rc<RefCell<ws::Sender>>) -> Option<&Player> { self.all_players() .find(|player| player.socket.as_ref() == Some(&socket)) }
Anton
Я не хочу mut возвращать)
Vladimir
А all_players что возвращает?
Anton
impl Iterator<Item = &mut Player>
Vladimir
Сделай map как я выше писал
Vladimir
Ну вообще x.map(|x|&*x)
Vladimir
Ну или x.map(AsRef::as_ref)
Anton
Ага, помогло
Anton
Но грустно)
kalloc
грустно
Vladimir
Ага, помогло
А вообще есть такой уговор в Русте - делать по два метода когда они возвращают что-то заимствующее: 1) без постфикса иммутабельный 2) с постфиксом _mut и мутабельныц
Vladimir
Тоесть тебе all_players разбить надо на две части
Vladimir
Тогда и сигнатура find_players поменяется &self
Anton
В принципе звучит разумно, думаю, я к этому и так пришёл бы в итоге
Anton
С другой стороны бойлерплейт выходит
Anton
Нельзя сделать дженерик по мутабельности?
Vladimir
Нет(
Anton
И RFC не было?
kitsu
странно что тип не выводится
Cat
И RFC не было?
этого не планируется
Vladimir
И RFC не было?
Это в Русте вообще не возможно
Cat
дженерик определяет только тип
Cat
лайфтаймы часть типа
Vladimir
Но это было в "мыслях" создателя руста
Vladimir
Типа когда у него спросили что он думает будет в новых языках
Vladimir
лайфтаймы часть типа
Мутабельность тоже
Vladimir
Вот тебе поворот
Anton
Это из-за того, что тайпчекер и борроучекер — две разные системы?
Vladimir
эмм..
& и &mut разные типы, не?
Cat
да, я не совсем точно сказал, я имел в виду type parameters
Cat
& и &mut разные типы, не?
дженерики за это не отвечают
Vladimir
Ну тогда лайфтайм всё-таки не type parametr
Vladimir
А lifetime parameters если быть уже занудой
Vladimir
Это немного разные сущности, лайфтайм не существует - это все выдумки руста
Vladimir
Короче по хорошему, могли б сделать генерики по мутабельности
Nikita
Тут кто-нибудь уже вкурил пропосал по Pin?
Vladimir
Тут кто-нибудь уже вкурил пропосал по Pin?
Ну там вроде все отличие в self referential типах
Nikita
Ну там вроде все отличие в self referential типах
Они просто хотят ввести новый тип референса, который ведет как &mut для большинства типов, но как & для особенных self-referential типов?
Маjко
Vladimir
Они просто хотят ввести новый тип референса, который ведет как &mut для большинства типов, но как & для особенных self-referential типов?
Типа тот же &mut self в общем случае, но посколько селфреферент может мувится, то чтоб создать пин из него нужно переменную замувить в пин
Vladimir
Вроде так
Vladimir
&mut X -> Pin<X> для не селфреферент X -> Pin<X> для оных
Vladimir
Пока тип не селфрент
Nikita
Ага, то есть селфреференты предоставляют апишку для создания пинов
Vladimir
А не
Vladimir
Они вообще для селфрентов не существуют
Vladimir
Все ещё проще
Антон
Nikita
В том-то и дело, что они существуют для !Unpin
Антон
Там нет этого убого бороучекера
лол атомарный счётчик для каждой структуры
Nikita
лол атомарный счётчик для каждой структуры
Нет ГЦ и нет бороучекера. Звучит как идеальный язык
Vladimir
В том-то и дело, что они существуют для !Unpin
Во, я понял, там есть ещё PinBox вот он для селфрентов
Vladimir
Тоесть дальше как я говорил
Nikita
Во, я понял, там есть ещё PinBox вот он для селфрентов
Они красными примером предлагают генераторы, вряд ли бы они захотели запихивать каждый генератор в бокс