Size: a a a

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

2021 June 30

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Немутабельный делать мутабельным нельзя, да. Но с ансейфом можно нарезать, если гарантированно пересекаться не будут.
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Вот так, например.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=9e26d71c8b3bc874641964402b39f269
Сейфти: не одалживать слайс на один и тот же индекс так, что их лайфтаймы пересекутся.
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
И в качестве безопасной обёртки тогда достаточно заимплементить IntoParallelIterator.
источник

АА

Александр А... in Rust — русскоговорящее сообщество
Ух ты - спасибо !
источник

АА

Александр А... in Rust — русскоговорящее сообщество
кстати делать из немутабельного мутабельный слайс - кроме того что это дирти хак , есть побочка? ну типа что оптимайзер компилятора может вытворить какуюто дичь?
источник

I

Ilia in Rust — русскоговорящее сообщество
Да, могут быть проблемы с алиасингом.

Из Nomicon:
> Transmuting an & to &mut is UB.
> Transmuting an & to &mut is always UB.
> No you can't do it.
> No you're not special.
источник

АА

Александр А... in Rust — русскоговорящее сообщество
Понятно)
источник

АА

Александр А... in Rust — русскоговорящее сообщество
pub unsafe fn make_mut_slice<T>(s: &[T]) -> &mut [T] {
   std::slice::from_raw_parts_mut(s.as_ptr() as *mut T, s.len())
}
вот так тоже нельзя?
источник

TK

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

VS

Vladimir SHCHerba in Rust — русскоговорящее сообщество
Это откуда?
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Из номикона
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Если интересно, почему именно, то потому, что ссылки имеют специальную семантику: они помечаются как noalias в LLVM.
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
зачем лезть как оно в ллвм устроено если куда проще на уровне языка объяснить
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Лайфтаймы и алиасинг это не только растовый борроучек, но и корректно работающая программа вкупе с компиляторными оптимизациями
источник

АА

Александр А... in Rust — русскоговорящее сообщество
в чем радикальная разница ?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
в том что у тебя unsafe с багом
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
В структуре лежит указатель, который копируется, и на него не действует семантика ссылок. Но лайфтайм указан на структуре и не нарушается.
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
&mut это уникальная ссылка. & - шареная. Делать из шареной ссылки уникальную - глупость, что вроде очевидно
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Там не из ссылки делается, и код мой
источник

АА

Александр А... in Rust — русскоговорящее сообщество
понял
источник