Size: a a a

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

2020 March 31

АМ

Александр Маглеванный in Rust — русскоговорящее сообществo
Denis
а что значит "асинхронная", может тебе что-то конкретное нужно?
У меня инициализация grpc канала один раз за время жизни программы происходит, а так как инициализация требует некоторого IO, она асинхронная по дефолту. Я использую tonic.
Ну и чтобы на каждый запрос не начинать эту инициализацию каждый запрос, хочу чтобы она один раз дернулась.
источник

D

Denis in Rust — русскоговорящее сообществo
Эрик
static mut GLOBAL: (AtomicBool, Option<&'static T>) = (AtomicBool::new(false), None);

match GLOBAL.0.compare_and_swap(false, true, AcqRel) {
 true => {
   loop {
     match GLOBAL.1 {
       Some(t) => t,
       None => continue,
   }
 },
 false => {
   let a = Box::leak(Box::new(T::default()));
   unsafe { GLOBAL = Some(a); }
   a
 }
}

Нуладна.
:)))
источник

lp

lil pep in Rust — русскоговорящее сообществo
Эрик
static mut GLOBAL: (AtomicBool, Option<&'static T>) = (AtomicBool::new(false), None);

match GLOBAL.0.compare_and_swap(false, true, AcqRel) {
 true => {
   loop {
     match GLOBAL.1 {
       Some(t) => t,
       None => continue,
   }
 },
 false => {
   let a = Box::leak(Box::new(T::default()));
   unsafe { GLOBAL = Some(a); }
   a
 }
}

Нуладна.
loop { GLOBAL.1 } может не завершиться никогда, потому что грубо говоря компилятор предполагает что код однопоточный и GLOBAL.1 никогда не измениться )
источник

D

Denis in Rust — русскоговорящее сообществo
Эрик
static mut GLOBAL: (AtomicBool, Option<&'static T>) = (AtomicBool::new(false), None);

match GLOBAL.0.compare_and_swap(false, true, AcqRel) {
 true => {
   loop {
     match GLOBAL.1 {
       Some(t) => t,
       None => continue,
   }
 },
 false => {
   let a = Box::leak(Box::new(T::default()));
   unsafe { GLOBAL = Some(a); }
   a
 }
}

Нуладна.
кстати этого мало
источник

r

red75prime in Rust — русскоговорящее сообществo
UnsafeCell нужен
источник

АМ

Александр Маглеванный in Rust — русскоговорящее сообществo
Александр Маглеванный
У меня инициализация grpc канала один раз за время жизни программы происходит, а так как инициализация требует некоторого IO, она асинхронная по дефолту. Я использую tonic.
Ну и чтобы на каждый запрос не начинать эту инициализацию каждый запрос, хочу чтобы она один раз дернулась.
А lazy_static не умеет в async :(
источник

D

Denis in Rust — русскоговорящее сообществo
Александр Маглеванный
У меня инициализация grpc канала один раз за время жизни программы происходит, а так как инициализация требует некоторого IO, она асинхронная по дефолту. Я использую tonic.
Ну и чтобы на каждый запрос не начинать эту инициализацию каждый запрос, хочу чтобы она один раз дернулась.
тогда once_cell тоже не подойдёт
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
выглядит как попытка вставить КОСТЫЛИЩЕ
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
вместо построения архитектуры
источник

АМ

Александр Маглеванный in Rust — русскоговорящее сообществo
🦉 ⁣
выглядит как попытка вставить КОСТЫЛИЩЕ
:)
источник

N[

Ned Ogl [0xA]🚜🏍 in Rust — русскоговорящее сообществo
есть тут кто-то, кто работает с Qt?
источник

H

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

p

polunin.ai in Rust — русскоговорящее сообществo
Oleg Andreev
типа чтоб dbg!(message) вывело одну строчку Message::Something, а не полэкрана со всеми данными внутри него
вроде только переопределить Debug нужно
источник

D

Dmitry in Rust — русскоговорящее сообществo
Ned Ogl [0xA]🚜🏍
есть тут кто-то, кто работает с Qt?
источник

N[

Ned Ogl [0xA]🚜🏍 in Rust — русскоговорящее сообществo
крч, какой крейт из 3х биндингов наиболее стабильный?
источник

YT

Yauheni Tsiarokhin in Rust — русскоговорящее сообществo
парни привет
подскажите пожалуйста
я тут с фьючурами 0.3 страдаю
я не могу понять почему Future теперь не заимплеменчен для Result?
источник

NV

Nikita Vilunov in Rust — русскоговорящее сообществo
Yauheni Tsiarokhin
парни привет
подскажите пожалуйста
я тут с фьючурами 0.3 страдаю
я не могу понять почему Future теперь не заимплеменчен для Result?
Потому что у них теперь нет встроенного канала передачи ошибок
источник

YT

Yauheni Tsiarokhin in Rust — русскоговорящее сообществo
Nikita Vilunov
Потому что у них теперь нет встроенного канала передачи ошибок
хорошо тогда более конкретный вопрос
        rx
           .take_while(|command| match command {
               Command::AuditEntry(_) => Ok(true),
               Command::Shutdown => Ok(false),
           })
           .filter_map(|command| match command {
               Command::AuditEntry(entry) => Some(entry),
               Command::Shutdown => None,
           })

как вот такое теперь чейнить?
источник

ph

pl 🦑 hk in Rust — русскоговорящее сообществo
Зачем чейнить, почему не написать

while let Some(cmd) = rx.next().await {
match cmd(...) {...}
}
источник

YT

Yauheni Tsiarokhin in Rust — русскоговорящее сообществo
pl 🦑 hk
Зачем чейнить, почему не написать

while let Some(cmd) = rx.next().await {
match cmd(...) {...}
}
потому что мне надо вернуть фьючур который будет обработкой сообщенек заниматься
а не вытащить одну сообщеньку

    pub fn init(config: &AuditClientConfig) -> (Self, impl Future<Item = (), Error = AuditError>) {
       let (tx, rx) = mpsc::channel(0);
       let client = AuditClientApi { tx };
       let future_socket = UdpSocket::bind(&config.src_addr)
       let running = future_socket
           .and_then(move |socket| {
               rx
                   .take_while(|command| match command {
                        //
                   })
                   .filter_map(|command| match command {
                       //
                   })
                   .fold(socket, move |socket, entry| {
                        //
                   })
           })
       (client, running)
   }
источник