Size: a a a

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

2020 March 28

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
drjackild
Немного кода, для наглядности:
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
Тогда у тебя get должен получать мутабельную ссылку.
источник

IB

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

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
drjackild
Немного кода, для наглядности:
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
Ты ведь понимаешь, что чтение из файла - мутирующая операция? :)
источник

YB

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

YB

Yevhenii Babichenko in Rust — русскоговорящее сообществo
ну и обожаемый всеми lazy_static под капотом всё же работает со static переменными
источник

В

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

В

Вафель in Rust — русскоговорящее сообществo
drjackild
Немного кода, для наглядности:
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
fn get(&mut self, key) { ... }

Должен решить проблему
источник

Э

Эрик in Rust — русскоговорящее сообществo
Eugene
а зачем тогда вообще нужны static переменные в rust?
Instant::now()
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Instant::now()
Где связь?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ты сорц его смотрел?
источник

YB

Yevhenii Babichenko in Rust — русскоговорящее сообществo
Эрик
Ты сорц его смотрел?
тсссс. сейчас увидят unsafe и пойдут говнить тех, кто писал стдлиб
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Max Frai
работает, но непонятно как. что делает flat_map?
просто операция монадического связывания на итераторах 🤷‍♂️
источник

В

Вафель in Rust — русскоговорящее сообществo
Yevhenii Babichenko
тсссс. сейчас увидят unsafe и пойдут говнить тех, кто писал стдлиб
😒
источник

Э

Эрик in Rust — русскоговорящее сообществo
Yevhenii Babichenko
тсссс. сейчас увидят unsafe и пойдут говнить тех, кто писал стдлиб
Это они ещё слайсовые итераторы не видели.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Там голый указатель на голом указателе и голым указателем погоняет.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Eugene
а зачем тогда вообще нужны static переменные в rust?
просто не нужны)
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
я вот на днях прогу писал, статик прожил ровно 30 минут
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Ты сорц его смотрел?
Прикольно. Хотя странно почему используется static mut + lock, а не обычный mutex
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вафель
Прикольно. Хотя странно почему используется static mut + lock, а не обычный mutex
Потому что скорость.
источник

Э

Эрик in Rust — русскоговорящее сообществo
У мутекса внутри ещё один бокс.
источник