Size: a a a

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

2020 September 09

Э

Эрик in Rust — русскоговорящее сообществo
Mnwa
Ну там
unsafe impl<T: ?Sized + Send> Send
Вместо этого можно просто запихать PhantomData<&mut T> в MutexGuard, и оно само там везде нужный Send проставит.
источник

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
call eax
Уверен, что он корректно работает, особенно на архитектурах с weak ordering?
Отвечу за автора: Relaxed не используется, так что поведение будет идентично и на стронк и на weak.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А вот замечание про лайфтайм похоже на правду. Твой мутекс UB, если Waker где-то дропнется. Вместо указателя надо делать waker.clone() и хранить склонированное.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Правда, чтобы хранить склонированное, нужен мутекс. Или какая-то очень хитрая логика на атомиках.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Что-то вроде

WakerPtr {
ptr: AtomicPtr<Waker>,
}

impl WakerPtr {
const fn new() -> Self { Self { ptr: AtomicPtr::new(null_ptr()) } }

fn swap(&self, b: Box<Waker>) -> Option<Box<Waker>> {
 let new_waker = b.into_raw();
 let old = self.ptr.swap(new_waker);
 if old.is_null() {
  None
 } else {
  // SAFETY:
  // the pointer could be either `NULL` or valid,
  // and it is not `NULL` here.
  unsafe {
   Some(Box::from_raw(old))
  }
 }
}
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
Эрик
Что-то вроде

WakerPtr {
ptr: AtomicPtr<Waker>,
}

impl WakerPtr {
const fn new() -> Self { Self { ptr: AtomicPtr::new(null_ptr()) } }

fn swap(&self, b: Box<Waker>) -> Option<Box<Waker>> {
 let new_waker = b.into_raw();
 let old = self.ptr.swap(new_waker);
 if old.is_null() {
  None
 } else {
  // SAFETY:
  // the pointer could be either `NULL` or valid,
  // and it is not `NULL` here.
  unsafe {
   Some(Box::from_raw(old))
  }
 }
}
}
И на дропе надо не забыть бокс сделать.
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Ахмет Иванов
Привет, вопрос по rocket.rs. Нужно сделать что то типа каталога с товарами и фильтры к ним. Думаю сделать через ajax запрос, но встает вопрос, как на него ответить, если мне нужно отправить одновременно текст в виде описаний товаров и прочего и их фоток.
Текст - текстом, картинки - ссылками.
источник

Э

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

impl WakerPtr {
// Sets the waker if it is unset.
// Does nothing otherwise.
fn set_once(&self, w: &Waker) {
 if self.ptr.load() == null_mut() {
  let new_waker = Box::into_raw(Box::new(w.clone()));
  if self.ptr.compare_exchange(null_mut(), new_waker).is_err() {
   // Some flaw in atomic fences, and another thread already set the waker.
   // SAFETY:
   // `new_waker` was *not* set, thus there's no owner anywhere and it is safe.
   unsafe { drop(Box::from_raw(new_waker)) }
  }
 }
}
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
Можно ещё с этим вот пооптимизироваться, чтобы лишнего не делать.
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
А можно какой-нить rust-analyzer настроить так, чтоб он показывал какие типы импортируются через звездочку? Типа того:
источник

OA

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

OA

Oleg Andreev in Rust — русскоговорящее сообществo
(сфотошоплено)
источник

Э

Эрик in Rust — русскоговорящее сообществo
Oleg Andreev
А можно какой-нить rust-analyzer настроить так, чтоб он показывал какие типы импортируются через звездочку? Типа того:
Если у тебя VScode, то можно развернуть звезду.
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
VSCode есть, как развернуть не нашел
источник

Э

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

OA

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

OA

Oleg Andreev in Rust — русскоговорящее сообществo
хотя вроде все компилится и ошибок нет
источник

Э

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

DT

Dim Turov in Rust — русскоговорящее сообществo
это в VS коде так круто работает?
источник