Size: a a a

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

2020 April 18

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
Ну камон, вопрос, по-моему, очевиден. Какая цель блокирвки, какой дата рейс он предотвращает? Прошу объяснить.
Вместо этого какой-то троллинг.
Ну не знаешь — проходи мимо, вопрос не тебе.
источник

D

Dima in Rust — русскоговорящее сообществo
еба, написано, черному по белому     https://github.com/rust-lang/backtrace-rs/blob/e8404c8aae6c826c74033f2961821d854898b4f9/src/backtrace/mod.rs#L52 неужели так трудно посмотреть на строчку ниже и понять что именно там не атомарно?
источник

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
Где там написано?
источник

D

Dima in Rust — русскоговорящее сообществo
trace_imp(&mut cb), mut cb !!!,  а дальше заглянуть в реализацию для платформы
источник

D

Dima in Rust — русскоговорящее сообществo
&mut cb
источник

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
И что, ты на каждый &mut T в Rust блокировку делаешь? &mut cb то как раз все как надо сделает — exclusive reference, только один владелец, и.т.д.
источник

D

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

D

Dima in Rust — русскоговорящее сообществo
чтоб один &mut cb был
источник

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
Эмм. Нет?
источник

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
&mut ссылки всегда только в одном экземляре в Rust. Для этого борроу чекер и нужен.
источник

D

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

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
Для вводного overview вот хороший пост: https://docs.rs/dtolnay/0.0.9/dtolnay/macro._02__reference_types.html
источник

D

Dima in Rust — русскоговорящее сообществo
pub unsafe fn trace_unsynchronized<F: FnMut(&Frame) -> bool>(mut cb: F) {
   trace_imp(&mut cb)
}
источник

D

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

D

Dima in Rust — русскоговорящее сообществo
ты сначалf берешь лок, а потом уже делаешь &mut ....
источник

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
Ну нет же. mut ты можешь взять потому что ты владеешь cb — оно передается “по значению” (move).
источник

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
То, что cb внутренне-мутабелен — кодируется через FnMut (против Fn и `FnOnce`).
источник

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
То есть в чисто Rust коде лок был бы не нужен — т.к борроу-чекер избавит тебя от data races. Как бы для этого он и нужен.
источник

D

Dima in Rust — русскоговорящее сообществo
не может быть 2 одновременных мут)
источник

ID

Ivan Dubrov in Rust — русскоговорящее сообществo
Ну да. Но это тебе компилятор обеспечит, а не рантайм блокировка (lock).
источник