Size: a a a

2020 April 28

Т8

Т-34 85 in rust_offtopic
Emmanuel Goldstein
Апдейт: я нихуя не понял, как использовать Pin
@Psilon  на этом съел собаку, когда писал круды
источник

r

red75prime in rust_offtopic
Emmanuel Goldstein
struct Context<'a> {
   // other fields
   parent: Option<&'a Context<'a>>
}

impl<'a> Context<'a> {
   pub fn fork(&self) -> Self {
       Self {
           // other fields
           parent: Some(self)
       }
   }
}
https://doc.rust-lang.org/nightly/std/pin/index.html#example-self-referential-struct

Лайфтаймы по-прежнему не позволяют выразить self-referential структуры.
источник

EG

Emmanuel Goldstein in rust_offtopic
Я не понимаю, почему не работает
pub fn fork(self: &Pin<Box<Self>>) -> Pin<Box<Self>> {
   Self { parent: self.as_ref().get_ref() }
}
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Очень хочется
struct Pointer<'a, T> {
 index: usize,
 arena: &'a Arena<T>,
}
impl Deref for Pointer<'a, T> {
 type Target = T;
 
 fn deref(&self) -> Self::Target {
   self.arena[self.index]
 }
}
источник

EG

Emmanuel Goldstein in rust_offtopic
self.as_ref() должен перевести &Pin<Box<Self>> в Pin<&Self>, а .get_ref() должен получить референс с тем же лайфтаймом, что и пин
источник

EG

Emmanuel Goldstein in rust_offtopic
polunin.ai
struct Pointer<'a, T> {
 index: usize,
 arena: &'a Arena<T>,
}
impl Deref for Pointer<'a, T> {
 type Target = T;
 
 fn deref(&self) -> Self::Target {
   self.arena[self.index]
 }
}
Ага, и мне нужно будет заводить контекст контекста, чтобы держать там арену с контекстами
источник

EG

Emmanuel Goldstein in rust_offtopic
Хотя мб держать арену в рутовом контексте?
источник

EG

Emmanuel Goldstein in rust_offtopic
Нет, фигня, а ссылку на неё я как шарить буду
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Ага, и мне нужно будет заводить контекст контекста, чтобы держать там арену с контекстами
тебе арнеу нужно держать на самом верхнем уровне
источник

EG

Emmanuel Goldstein in rust_offtopic
Хранить ссылки на рутовый контекст и на арену мб?
источник

p

polunin.ai in rust_offtopic
там где контексты уже дропаются, там создавай арену и передавай ниже по ссылке
источник

EG

Emmanuel Goldstein in rust_offtopic
Ща попробую с ареной, спасибо
источник

EG

Emmanuel Goldstein in rust_offtopic
Нет, всё ещё фигня
А рутовый контекст кто положит на арену?
источник

EG

Emmanuel Goldstein in rust_offtopic
Или заставить юзера создавать арену?
источник

p

polunin.ai in rust_offtopic
да
источник

EG

Emmanuel Goldstein in rust_offtopic
Уныленько как-то
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Я не понимаю, почему не работает
pub fn fork(self: &Pin<Box<Self>>) -> Pin<Box<Self>> {
   Self { parent: self.as_ref().get_ref() }
}
у тебя должен быть вместо Option -> NonNull, посмотри в пример
источник

EG

Emmanuel Goldstein in rust_offtopic
NonNull это сырой указатель
источник

p

polunin.ai in rust_offtopic
источник

EG

Emmanuel Goldstein in rust_offtopic
:g/forbid(unsafe_code)/d
источник