Size: a a a

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

2020 September 25

Э

Эрик in Rust — русскоговорящее сообществo
Хотя на самом деле делать надо вот так вот:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a8bf2472351abc0714413afc44682943
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну и если Clone нужен, то вместо боксы Arc или Rc. Или DynClone используй.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Хотя там же нет Sync, арка не склонируется.
источник

V

Vladimir in Rust — русскоговорящее сообществo
Roman
eyre::Report
чем это отличается от anyhow?
источник

f

folex in Rust — русскоговорящее сообществo
Эрик
Ну и если Clone нужен, то вместо боксы Arc или Rc. Или DynClone используй.
источник

f

folex in Rust — русскоговорящее сообществo
Подразумевается, что callback в итоге будет вызываться из разных потоков
источник

f

folex in Rust — русскоговорящее сообществo
Как же жалко что в плейграунде нету async_std -_-
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну просто фигачишь + Sync в баунды коллбека и пихаешь его в Arc.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Всё, собственно, потому что Fn вызывается по ссылке.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну, то есть, вместо Box<dyn Fn()> делаешь
Arc<dyn Fn() + Send + Sync + 'static>.
источник

R

Roman in Rust — русскоговорящее сообществo
Vladimir
чем это отличается от anyhow?
Немного богаче функционал.
Умеет собирать trace из tracing и backtrace собирать.
А потом красиво в лог расписвать через color-eyre
источник

Э

Эрик in Rust — русскоговорящее сообществo
ну или Arc<Box<dyn Fn()>>
источник

f

folex in Rust — русскоговорящее сообществo
угу, осталось это всё внедрить в реальный код :) Спасибо!
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Stanislav Tkach
А есть что-то готовое (макрос) для преобразование enum во что-нибудь (не число, а, например, строку) и обратно? Проще, наверное, будет на примере:
enum E {
   A,
   B,
}

impl E {
   fn from_str(s: &str) -> Option<Self> {
       match s {
           "eee" => Some(Self::A),
           "z" => Some(Self::B),
           _ => None,
       }
   }
   
   fn as_str(&self) -> &'static str {
       match self {
           Self::A => "eee",
           Self::B => "z",
       }
   }
}

То есть, enum без данных и строки никак не связаны с названием вариантов. Так-то и руками написать несложно, но не нравится дублирование. Можно завернуть в макрос, но наверняка есть что-то готовое.
strum?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
ну или Arc<Box<dyn Fn()>>
Это же почти бесполезная вещь.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
Это же почти бесполезная вещь.
Ты ещё Arc<Box<FnOnce()>> не видел.
источник

ST

Stanislav Tkach in Rust — русскоговорящее сообществo
Спасибо, EnumString оттуда выглядит как то, что нужно.
источник

R

Roman in Rust — русскоговорящее сообществo
Эрик
Ты ещё Arc<Box<FnOnce()>> не видел.
Ну почему. Можно ж достать Box<FnOnce()> оттуда.
Если ты последний владелец
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Roman
Немного богаче функционал.
Умеет собирать trace из tracing и backtrace собирать.
А потом красиво в лог расписвать через color-eyre
Ещё color-eyre например умеет автоматом создавать ссылки в issue tracker (github например). Классная штука :)
источник

Э

Эрик in Rust — русскоговорящее сообществo
Roman
Ну почему. Можно ж достать Box<FnOnce()> оттуда.
Если ты последний владелец
Нельзя, мутабельной ссылки нет.
источник