Size: a a a

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

2020 March 28

p

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

AI

Alex Ilizarov in Rust — русскоговорящее сообществo
Оно в теории эффективно должно и с clear скомпилиться, потому что у u8 нет drop
источник

V

Vladimir in Rust — русскоговорящее сообществo
polunin.ai
ну ок, уговорили, пока сделаю .clear()
Когда будешь менять на set_len не забудь обращение по индексу на get_unchecked заменить тоже
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
polunin.ai
ну ок, уговорили, пока сделаю .clear()
https://godbolt.org/z/byxJVQ
Идентичный асм (поэтому варианты для safe функций не отображаются)
источник

OA

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

В

Вафель in Rust — русскоговорящее сообществo
Alex Ilizarov
А то заберешь слайс из вектора, а потом сделаешь ему set_len
Не возьмёшь, там &mut self. (Что не отменяет факта что ансейф ненужен тут)
источник

В

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

t🥔

tpouhuk 🥔 in Rust — русскоговорящее сообществo
Oleg Andreev
ансейфами надежнее обмазываться не до, а после того, как заработает правильно
ансейфами никогда не надёжно обмазываться
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
верно. И это не отменяет моего утверждения ;-)
источник

E

Eugene in Rust — русскоговорящее сообществo
подскажите те, у кого опыт есть: часто ли приходилось использовать static переменные?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Зачем? Используй lasy_static
источник

E

Eugene in Rust — русскоговорящее сообществo
как раз и хочу понять: оправдано ли вообще использовать static переменные
источник

В

Вафель in Rust — русскоговорящее сообществo
polunin.ai
Зачем? Используй lasy_static
s/lazy_static/once_cell
источник

d

drjackild in Rust — русскоговорящее сообществo
Ребят, есть вопрос. У меня есть структура, у которой есть аттрибут, в котором реализован Iterator. Мне надо иметь возможность делать map, или же просто for _ in, но я не могу этого делать, потому что fn next овнит self. Есть какие-нибудь варианты это обойти? Я так понимаю, что обычная практика - это объявить какой-нибудь метод, типа .iter, которая будет возвращать сруктуру итератора и там уже владение будет возможно, но не совсем понимаю, как это реализовывать
источник

В

Вафель in Rust — русскоговорящее сообществo
Eugene
подскажите те, у кого опыт есть: часто ли приходилось использовать static переменные?
Да вроде не особо. В библиотечном коде так и вообще никогда. А вот const не редко.
источник

AI

Alex Ilizarov in Rust — русскоговорящее сообществo
Вафель
Не возьмёшь, там &mut self. (Что не отменяет факта что ансейф ненужен тут)
Почему не возьму? Сделаю еще один unsafe, я же не задумываясь когда делаю в set_len, что будет плохого если я их здесь тоже заюзаю? (Сарказм если что)
источник

d

drjackild in Rust — русскоговорящее сообществo
Немного кода, для наглядности:
pub struct KvStore<T> {
   storage: T,  // здесь будет FileStorage при инициализации
}

pub struct FileStorage {
   file: File,
   reader: BufReader<File>,
}

impl Iterator for FileStorage {
   type Item = String;

   fn next(&mut self) -> Option<Self::Item> {
       let mut buff = String::new();
       match self.reader.read_line(&mut buff) {
           Ok(_) => Some(buff),
           Err(_) => None,
       }
   }
}


а вот тут возникает ошибка:

fn get(&self, key) { self.storage.map(…) }
// cannot move out of `self.storage` which is behind a shared reference
источник

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
drjackild
Ребят, есть вопрос. У меня есть структура, у которой есть аттрибут, в котором реализован Iterator. Мне надо иметь возможность делать map, или же просто for _ in, но я не могу этого делать, потому что fn next овнит self. Есть какие-нибудь варианты это обойти? Я так понимаю, что обычная практика - это объявить какой-нибудь метод, типа .iter, которая будет возвращать сруктуру итератора и там уже владение будет возможно, но не совсем понимаю, как это реализовывать
Не надо хранить там итератор, а надо ссылку на исходный контейнер.
источник

E

Eugene in Rust — русскоговорящее сообществo
Вафель
Да вроде не особо. В библиотечном коде так и вообще никогда. А вот const не редко.
а зачем тогда вообще нужны static переменные в rust?
источник

d

drjackild in Rust — русскоговорящее сообществo
Ivan Boldyrev
Не надо хранить там итератор, а надо ссылку на исходный контейнер.
но почему? внутренняя структура нигде больше не нужна, она создается и хранится только в момент создания KvStore, то есть, мне придется на ровном месте держать там ссылки и разруливать лайфтаймы
источник