Size: a a a

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

2020 August 13

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Ничего, со временем посмотрим на скорость выкатывания фич в язык и в компилятор
источник

S

Sergey in Rust — русскоговорящее сообществo
Привет, есть такая структурка
pub struct SomeScheduler {
   pub some_service: Arc<Box<SomeService>>
}

impl SomeScheduler {
   pub async fn init(mut self) {
       let mut scheduler = Scheduler::new();
       let service = self.some_service.clone();
       scheduler.every(1.day()).at("3:20 pm").run(move || {
           &rr.run();
       });
   }

(Использую либу для создания scheduler: clokwerk = "0.3.3")

Са
мо собой компилятор ругается
^^ move occurs because value has type bot_service::BotService, which does not implement the Copy trait

Но не могу допереть как мне это пофиксить, может быть кто-то подскажет?
источник

AN

Alex Noname in Rust — русскоговорящее сообществo
Все правильно делаешь arc клонировать
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Vladimir
Ну поидее только из мозилы сидят и пилят за деньги, про обратное не слышал
По-моему в ferrous systems тоже кто-то из тимы работает.
источник

AD

Andrew Demonov in Rust — русскоговорящее сообществo
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Подскажите, для WinAPI строка по сути &[u16] slice с nil в конце, где каждый элемент не больше 2 байт?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
По идее да.
Но вообще, есть OsString чтобы не задумываться об этом.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Mikail Bagishov
По идее да.
Но вообще, есть OsString чтобы не задумываться об этом.
Так понял, он не совсем доделан, раз там самому надо nil добавлять.
OsStr::new( value ).encode_wide().chain( once( 0 ) ).collect()
источник

Э

Эрик in Rust — русскоговорящее сообществo
Zymlex (Юрий)
Так понял, он не совсем доделан, раз там самому надо nil добавлять.
OsStr::new( value ).encode_wide().chain( once( 0 ) ).collect()
CStr
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
о, спс, а то взял widestring-rs, но каких-то явных преимуществ это не дало.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
И ещё вопрос, по подсчёту кол-во требуемой памяти для строки,
подойдёт ли core::mem::size_of_val(slice)?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Zymlex (Юрий)
И ещё вопрос, по подсчёту кол-во требуемой памяти для строки,
подойдёт ли core::mem::size_of_val(slice)?
Должно.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Не то, так как WinAPI принимает [u16]
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
там ill-formed UTF-16LE
источник

A

Agrailag in Rust — русскоговорящее сообществo
Что за вброс, Нико написал, что он работает дальше. Другого парня из кортимы уволили.

То есть уволили явно не всех
источник

Э

Эрик in Rust — русскоговорящее сообществo
Действительно, нет кастов между cstring и osstring. Ну сделай
struct WinapiBytes(Vec<u16>);

impl WinapiBytes {
 const fn new() -> Self { Self(Vec::new()) }

 fn from_osstr(s: &OsStr) -> Self { /* */ }

 fn cstr_like(&self) -> &[u16] {
   &self.0[..]
 }

 fn str_like(&self) -> &[u16] {
   // This struct always has `nil` at the end.
   &self.0[..self.len() - 1]
 }

 fn push_str(&mut self, s: &OsStr) {
   self.0.pop();
   self.0.extend(s.encode_wide());
   self.push_nil();
 }

 fn push_nil(&mut self) {
   self.0.push(0);
 }
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
Хотя лучше вместо прямой имплементации push_str сделать

impl Extend<u16> for WinapiBytes {
 fn extend<T>(&mut self, iter: T)
   where
       T: IntoIterator<Item = u16>
 {
   self.0.pop();
   self.0.extend(iter);
   self.push_nil();
 }
}

// …

fn push_str(&mut self, s: &OsStr) { self.extend(s.encode_wide()); }
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну и можно добавить

fn size_with_nil(&self) -> usize { self.0.len() * mem::size_of::<u16>() }

fn size_without_nil(&self) -> usize { (self.0.len() - 1) * mem::size_of::<u16>() }
источник

Z

Zver in Rust — русскоговорящее сообществo
Adv0cat
Чот я так и не понял, кто-то пустил утку что может быть Rust не будет мозилой поддерживаться?)
Не утка, а правда жизни.
источник

R

Roman in Rust — русскоговорящее сообществo
Zymlex (Юрий)
Не то, так как WinAPI принимает [u16]
в WinAPI все функции продублированы для wide и narrow charset, так что если вызовы далеки от hot-path, то можно использовать CStr и вызывать функции с суффиксом A (CreateFileA).
источник