Size: a a a

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

2020 August 20

A

Andrey in Rust — русскоговорящее сообществo
Эрик
В асинхронных однотредовых рантаймах.
Где данные могут измениться асинхронно? Но все же это разве не опасно? Stack overflow можно ж достаточно незаметно сделать. И тут не спасёт даже Rust.
источник

V

Vladimir in Rust — русскоговорящее сообществo
И там разве не просто какой то интциализатор опенгл?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Andrey
Где данные могут измениться асинхронно? Но все же это разве не опасно? Stack overflow можно ж достаточно незаметно сделать. И тут не спасёт даже Rust.
А причем тут переполнение стека?
источник

MB

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

A

Andrey in Rust — русскоговорящее сообществo
Mikail Bagishov
А причем тут переполнение стека?
use crate::List::{Cons, Nil};
use std::cell::RefCell;
use std::rc::Rc;

#[derive(Debug)]
enum List {
   Cons(i32, RefCell<Rc<List>>),
   Nil,
}

impl List {
   fn tail(&self) -> Option<&RefCell<Rc<List>>> {
       match self {
           Cons(_, item) => Some(item),
           Nil => None,
       }
   }
}

fn main() {
   let a = Rc::new(Cons(5, RefCell::new(Rc::new(Nil))));

   println!("a initial rc count = {}", Rc::strong_count(&a));
   println!("a next item = {:?}", a.tail());

   let b = Rc::new(Cons(10, RefCell::new(Rc::clone(&a))));

   println!("a rc count after b creation = {}", Rc::strong_count(&a));
   println!("b initial rc count = {}", Rc::strong_count(&b));
   println!("b next item = {:?}", b.tail());

   if let Some(link) = a.tail() {
       *link.borrow_mut() = Rc::clone(&b);
   }

   println!("b rc count after changing a = {}", Rc::strong_count(&b));
   println!("a rc count after changing a = {}", Rc::strong_count(&a));

   // Uncomment the next line to see that we have a cycle;
   // it will overflow the stack
   // println!("a next item = {:?}", a.tail());
}
источник

A

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

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ну да, он тут переполнится конечно.
Но Rc далеко не единственный способ его вызвать, так что до сих пор непонятен вопрос.
источник

A

Andrey in Rust — русскоговорящее сообществo
Andrey
Rc<T>, RcRef<T> - почитал про совместное использование в книжке - для создания мок-объектов.

Кто-нибудь использует эти структуры данных в живых проектах?

Если да - для каких use cases. Можете примеры показать?
Вот вопрос
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Andrey
Где данные могут измениться асинхронно? Но все же это разве не опасно? Stack overflow можно ж достаточно незаметно сделать. И тут не спасёт даже Rust.
Их используют обычно не как часть каких-то деревьев, а просто чтобы вынести объект в кучу и держать несколько ссылок на него
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Именно "В асинхронных однотредовых рантаймах"
источник

K

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

Ct

Casual tears in Rust — русскоговорящее сообществo
> No need for the “unsafe” keyword unless something is known to be less safe than normal C++.
Жуть какая
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
>The good news is that this leaves just 8% of our functions which can’t be supported by the cxx model of interop. Most of these are passing C++ structs (by value) which have raw pointers within them. This seems largely insoluble in Rust but they’re so rare that we can create case-by-case idiomatic wrappers.
источник

OA

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

выглядит как охуенная фича для публичного АПИ
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
в смысле, если это должно быть публичным АПИ, то, разумеется, это будет работать через unsafe. Никаких переживаний тут быть не должно
источник

OA

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

K

Kitsu in Rust — русскоговорящее сообществo
Вафель
Погодите, плагин для идеи для RON платный? O_o
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Oleg Andreev
ансейф как раз вот для таких апи
unsafe он для API, которые требуют каких-либо предусловий. Не знаю как там в хромиуме, но тот C++ что я вижу требует этих предусловий налево и направо, а они хотят на это болт забить и предполагать, что их код всегда safe.
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Casual tears
> No need for the “unsafe” keyword unless something is known to be less safe than normal C++.
Жуть какая
Надеюсь, их образумят с этим
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
ilya sheprut
Как думаете, эта штука стоит добавления в std? Немного начинает Haskell напоминать.

Ещё в ссылках есть метод also, тоже аналогичный и полезный.

Apply пример
Метод also, also_deref
Мне таких штук иногда очень не хватает после котлина(
Впрочем, оно очень легко запиливается, но тут примерно как с dbg макросом - каждый когда оно нужно, проще обойтись без него, чем взять и написать. Потому и dbg в стд
источник