Size: a a a

2020 October 12

E

Eugene in Rust Beginners
Odim
Я решил поэкспериментировать со связным списком. Ничего серьёзного.
"If you're not sure if you should use NonNull<T>, just use *mut T"
источник

O

Odim in Rust Beginners
Eugene
"If you're not sure if you should use NonNull<T>, just use *mut T"
Да, я видел. Но всё равно интересно.
источник

E

Eugene in Rust Beginners
Odim
Я решил поэкспериментировать со связным списком. Ничего серьёзного.
связный список разве нельзя реализовать на *mut T  вместо NonNull?
источник

O

Odim in Rust Beginners
Eugene
связный список разве нельзя реализовать на *mut T  вместо NonNull?
Не пробовал. В реализации связного списка из std используется nonnull, поэтому я и задал такой вопрос.
источник

O

Odim in Rust Beginners
Eugene
связный список разве нельзя реализовать на *mut T  вместо NonNull?
Так то через сырые указатели много графовых структур данных можно реализовать, но хочется, чтобы они ещё и выглядели идиоматично.
источник

E

Eugene in Rust Beginners
Odim
Так то через сырые указатели много графовых структур данных можно реализовать, но хочется, чтобы они ещё и выглядели идиоматично.
идеоматично - это как?
источник

O

Odim in Rust Beginners
Eugene
идеоматично - это как?
Хорошо смотреться в rust коде. Грамотно использовали его возможности.
источник
2020 October 13

EG

Emmanuel Goldstein in Rust Beginners
NonNull нужен, если собираешься делать Option<NonNull<T>>
источник

EG

Emmanuel Goldstein in Rust Beginners
Или подобный энум
источник

SS

Slava Sokolovsky in Rust Beginners
Есть какой-нибудь аллокатор, который не позволяет брать из него памяти больше, чем укажешь? И ещё чтобы печатал ошибку в случае невозможности аллокации
источник

Kr

Kemal raihan in Rust Beginners
why not
источник

A

Aleksandr in Rust Beginners
Привет всем.

Столкнулся с ошибкой expected trait FirstTrait, found trait SecondTrait

Написал компактный код чтобы воспроизвести

pub trait FirstTrait {
   fn first_fn(&self, first_struct: Rc<RefCell<dyn FirstTrait>>);
}
pub trait SecondTrait: FirstTrait {
   fn second_fn(&self);
}

pub struct FirstStruct {}
impl FirstTrait for FirstStruct {
   fn first_fn(&self, first_struct: Rc<RefCell<dyn FirstTrait>>) {}
}

pub struct SecondStruct {}
impl FirstTrait for SecondStruct {
   fn first_fn(&self, first_struct: Rc<RefCell<dyn FirstTrait>>) {}
}
impl SecondTrait for SecondStruct {
   fn second_fn(&self) {}
}

fn main() {
       let first_struct: Rc<RefCell<dyn FirstTrait>> = Rc::new(RefCell::new(FirstStruct {}));
       let second_struct: Rc<RefCell<dyn SecondTrait>> = Rc::new(RefCell::new(SecondStruct {}));

       first_struct.borrow_mut().first_fn(Rc::clone(&second_struct));
}


Ошибка появляется с использованием Rc и RefCell, если их убрать то все ок, но они необходимы, как быть?
источник

A

Aleksandr in Rust Beginners
источник

IB

Ilya Bogdanov in Rust Beginners
Использование dyn Trait скрывает конкретный тип, узнать его снова не получится. Как только ты один раз создал dyn SecondTrait - он навсегда dyn SecondTrait
источник

DD

Dmitry D. Chernov in Rust Beginners
Ilya Bogdanov
Использование dyn Trait скрывает конкретный тип, узнать его снова не получится. Как только ты один раз создал dyn SecondTrait - он навсегда dyn SecondTrait
ну вообще иногда можно, через typeid
источник

IB

Ilya Bogdanov in Rust Beginners
Dmitry D. Chernov
ну вообще иногда можно, через typeid
источник

DD

Dmitry D. Chernov in Rust Beginners
источник

DD

Dmitry D. Chernov in Rust Beginners
хотя мб мы просто друг друга не понимаем
источник

IB

Ilya Bogdanov in Rust Beginners
ну для этого или нужен метод as_any, или должен использоваться сам dyn Any
источник

IB

Ilya Bogdanov in Rust Beginners
Информация о типах стирается
источник