Size: a a a

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

2020 March 28

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Alex Zhukovsky
просто не нужны)
(офк нужны, но редко)
источник

В

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

d

drjackild in Rust — русскоговорящее сообществo
Вафель
fn get(&mut self, key) { ... }

Должен решить проблему
Нет, к сожалению не помогло( а в чем фишка? там же не мутабельная ссылка, там прям владение забирает:
error[E0507]: cannot move out of `self.storage` which is behind a mutable reference
 --> src/kv.rs:78:34
  |
78 |         let commands: Vec<Log> = self.storage
  |                                  ^^^^^^^^^^^^ move occurs because `self.storage` has type `T`, which does not implement the `Copy` trait

error: aborting due to previous error
источник

В

Вафель in Rust — русскоговорящее сообществo
drjackild
Нет, к сожалению не помогло( а в чем фишка? там же не мутабельная ссылка, там прям владение забирает:
error[E0507]: cannot move out of `self.storage` which is behind a mutable reference
 --> src/kv.rs:78:34
  |
78 |         let commands: Vec<Log> = self.storage
  |                                  ^^^^^^^^^^^^ move occurs because `self.storage` has type `T`, which does not implement the `Copy` trait

error: aborting due to previous error
self.storage.by_ref().map(...)?
источник

В

Вафель in Rust — русскоговорящее сообществo
drjackild
Нет, к сожалению не помогло( а в чем фишка? там же не мутабельная ссылка, там прям владение забирает:
error[E0507]: cannot move out of `self.storage` which is behind a mutable reference
 --> src/kv.rs:78:34
  |
78 |         let commands: Vec<Log> = self.storage
  |                                  ^^^^^^^^^^^^ move occurs because `self.storage` has type `T`, which does not implement the `Copy` trait

error: aborting due to previous error
В итераторе хоть практически всё и забирает владение, есть impl<I: Iterator> Iterator for &mut I, т.е. уникальная ссылка на итератор это тоже итератор
источник

d

drjackild in Rust — русскоговорящее сообществo
Вафель
self.storage.by_ref().map(...)?
&mut self и вот это помогло вместе помогло, спасибо!
источник
2020 March 29

d

drjackild in Rust — русскоговорящее сообществo
А кто-нибудь ловил бесконечный цикл при filter_map? Вот такой код:
let cmds = self
           .storage
           .by_ref()
           .filter_map(|ref line| match serde_json::from_str(line) {
               Ok(cmd) => match &cmd {
                   Log::Set(k, _) | Log::Remove(k) if &key == k => Some(cmd),
                   _ => None,
               },
               Err(_) => None,
           });
       for cmd in cmds {
           entry.run(&cmd);
       }

судя по дебагу, вообще не выходит из match Ok(..) => …, Err(_) => …
источник

d

drjackild in Rust — русскоговорящее сообществo
сам итератор реализован так:
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.trim().to_owned())
           },
           Err(_) => None,
       }
   }
}
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
drjackild
сам итератор реализован так:
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.trim().to_owned())
           },
           Err(_) => None,
       }
   }
}
а ты уверен что ридлайн не зависает в ожидании еще одной строки?
источник

d

drjackild in Rust — русскоговорящее сообществo
судя по дебагу, он постоянно обрабатывает новые элементы, но все-равно не уверен, проверю
источник

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
drjackild
сам итератор реализован так:
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.trim().to_owned())
           },
           Err(_) => None,
       }
   }
}
If this function (read_line) returns Ok(0), the stream has reached EOF.
источник

d

drjackild in Rust — русскоговорящее сообществo
да, read_line возращает Ok(0), а я ошибку ловил
источник

d

drjackild in Rust — русскоговорящее сообществo
увидел, спасибо!
источник

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
EOF в нормальных API не ошибка, так он может перемежаться с появлением новых данных.
источник

d

drjackild in Rust — русскоговорящее сообществo
да, я согласен, надо внимательней доки читать просто
источник

IB

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

d

drjackild in Rust — русскоговорящее сообществo
Ребят, если кому-нибудь будет не лень - поревьювайте плиз код здесь https://github.com/DrJackilD/kvs
Можно прямо там Issue открывать, либо же сюда/в личку писать. Буду очень благодарен за помощь
источник

ML

Mike Lubinets in Rust — русскоговорящее сообществo
drjackild
Ребят, если кому-нибудь будет не лень - поревьювайте плиз код здесь https://github.com/DrJackilD/kvs
Можно прямо там Issue открывать, либо же сюда/в личку писать. Буду очень благодарен за помощь
Запусти cargo clippy, у тебя там один потенциальный баг и три варнинга)
источник

d

drjackild in Rust — русскоговорящее сообществo
точняк, спасибо))
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Mike Lubinets
Запусти cargo clippy, у тебя там один потенциальный баг и три варнинга)
Коротко о том как я пользуюсь клиппи на ночнике

$ rustup update nightly
info: syncing channel updates for 'nightly-x86_64-pc-windows-msvc'
info: latest update on 2020-03-27, rust version 1.44.0-nightly (2fbb07525 2020-03-26)
info: skipping nightly which is missing installed component 'rustfmt-preview'
info: syncing channel updates for 'nightly-2020-03-26-x86_64-pc-windows-msvc'
info: latest update on 2020-03-26, rust version 1.44.0-nightly (a5fb9ae5b 2020-03-25)
info: skipping nightly which is missing installed component 'rustfmt-preview'
info: syncing channel updates for 'nightly-2020-03-25-x86_64-pc-windows-msvc'
info: latest update on 2020-03-25, rust version 1.44.0-nightly (02046a5d4 2020-03-24)
info: skipping nightly which is missing installed component 'rustfmt-preview'
info: syncing channel updates for 'nightly-2020-03-24-x86_64-pc-windows-msvc'
info: latest update on 2020-03-24, rust version 1.44.0-nightly (1edd389cc 2020-03-23)
info: skipping nightly which is missing installed component 'clippy-preview'
info: syncing channel updates for 'nightly-2020-03-23-x86_64-pc-windows-msvc'
info: latest update on 2020-03-23, rust version 1.44.0-nightly (d1e81ef23 2020-03-22)
info: skipping nightly which is missing installed component 'rustfmt-preview'
info: syncing channel updates for 'nightly-2020-03-22-x86_64-pc-windows-msvc'
info: latest update on 2020-03-22, rust version 1.44.0-nightly (38114ff16 2020-03-21)
info: skipping nightly which is missing installed component 'clippy-preview'
info: syncing channel updates for 'nightly-2020-03-21-x86_64-pc-windows-msvc'
info: latest update on 2020-03-21, rust version 1.44.0-nightly (1057dc97a 2020-03-20)
info: skipping nightly which is missing installed component 'clippy-preview'
info: syncing channel updates for 'nightly-2020-03-20-x86_64-pc-windows-msvc'
info: latest update on 2020-03-20, rust version 1.44.0-nightly (f4c675c47 2020-03-19)
info: skipping nightly which is missing installed component 'clippy-preview'
info: syncing channel updates for 'nightly-2020-03-19-x86_64-pc-windows-msvc'

 nightly-x86_64-pc-windows-msvc unchanged - rustc 1.44.0-nightly (f509b26a7 2020-03-18)

info: checking for self-updates
источник