Size: a a a

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

2020 March 31

Э

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

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
foo11 и foo2 обе создают по 2 указателя, обе единообразно их используют.
Обе добиваются того, что указатели алиасятся.
Но в первой один указатель сырой, поэтому все ОК
А во второй оба - ссылки, поэтому бан
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну да. Например смотри:
let mut b = Box::new(4);
let b_ref = &mut*b;
@iccsf вот начало треда
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
foo11 и foo2 обе создают по 2 указателя, обе единообразно их используют.
Обе добиваются того, что указатели алиасятся.
Но в первой один указатель сырой, поэтому все ОК
А во второй оба - ссылки, поэтому бан
Потому что компилятор никогда тебе не обозначит кешлайн, который ты голым указателем загрузил себе, как эксклюзивный. А вот с &mut он так может сделать.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Потому что компилятор никогда тебе не обозначит кешлайн, который ты голым указателем загрузил себе, как эксклюзивный. А вот с &mut он так может сделать.
Не стоит опускаться на уровень кэша. Модель памяти раста определена абстрактно. В Абстрактной Раст-Машине понятия кэша нет.

Твой коммент - это уже следствие, эксплуатация UB компилятором для оптимизации
источник

K

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

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Kitsu
с каких пор в расте появилась модель памяти?
В голове RalfJung - очень давно
источник

K

Kitsu in Rust — русскоговорящее сообществo
оч сомневаюсь, что даже у него есть целостное и полное видение
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Правила заимствований он даже описал в блог-посте.
А нам сейчас ничего за пределами заимствований и алиасинга не нужно.
источник

В

Вафель in Rust — русскоговорящее сообществo
Kitsu
с каких пор в расте появилась модель памяти?
Её нет, но вообще см stacked borrows
источник

RP

Roman Proskuryakov in Rust — русскоговорящее сообществo
Mikail Bagishov
Алиасинг - это ситуация, когда несколько указателей ссылаются на пересекающиеся куски памяти.
вот. у меня есть указатель на сырой кусок, мне его надо кастануть на указатель на данные
источник

RP

Roman Proskuryakov in Rust — русскоговорящее сообществo
мне использовать *c_void или можно оставить *u8?
источник

RP

Roman Proskuryakov in Rust — русскоговорящее сообществo
тот же memmap::MMap дерефает в [u8]
источник

Э

Эрик in Rust — русскоговорящее сообществo
Зависит от того, в какой памяти ты это делаешь. Если для C-defined FFI, то сивойд лучше. А если для раста и в расте, то пофигу как бы.
источник

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
fn поинтеры и *_ [] - нельзя, потому что они там разные могут быть.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Roman Proskuryakov
мне использовать *c_void или можно оставить *u8?
Насколько я все это понимаю, с т.з. алиасинга они эквиваленты. Но *mut u8 тупо удобнее.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Голые указатели на Sized объекты можно как угодно поворачивать, они внутри тупо usize, и всё тут.
Не совсем как угодно. Я вот удивился, когда узнал про provenance: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=edbe266980e814f7d2bc5b5719abc9b3
источник

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
slice.as_ptr() возвращает указатель на Sized элемент слайса.
источник