Size: a a a

2021 March 10

AN

Alex Noname in rust_offtopic
Поэтому плохо
источник

AN

Alex Noname in rust_offtopic
С телефона не удобно набирать код с обяснением
источник

D

Dima in rust_offtopic
в текущей версии stacked borrows, одно ub а второе нет
источник

AN

Alex Noname in rust_offtopic
вот таком месте тольк сомнительный от этих всех правил. потому что поидее компилятор сам может вывести тут всё.
источник

А

Алексей in rust_offtopic
Alex Noname
вот таком месте тольк сомнительный от этих всех правил. потому что поидее компилятор сам может вывести тут всё.
вне ансейф компилятор и не даст стделать две мутабельные ссылки на одну переменную
источник

А

Алексей in rust_offtopic
а в ансейф ты сам по себе
источник

AN

Alex Noname in rust_offtopic
я не о том. я про компилятор ллвм. тут ему не нужны хинты никакие что ссылки уникальные. это и так понятно
источник

А

Алексей in rust_offtopic
в примере выше как раз ссылки не уникальны
источник

А

Алексей in rust_offtopic
причём в обоих примерах
источник

AN

Alex Noname in rust_offtopic
я не правильно выразился. и так понятно уникально или нет.
источник

А

Алексей in rust_offtopic
человеку - да, компилятору - уже не очень
источник

D

Dima in rust_offtopic
Алексей
в примере выше как раз ссылки не уникальны
как раз таки во втором случае все уникальное
источник

А

Алексей in rust_offtopic
ну или человеку не понятно
источник

А

Алексей in rust_offtopic
потому что во втором случае вроде как тоже не уникально
источник

А

Алексей in rust_offtopic
let mut_ref = &mut *mut_ptr;
потому что вот это даст ту же самую ссылку
источник

AN

Alex Noname in rust_offtopic
ты ее не используешь. она лочит mut_ptr на время использования.
источник

D

Dima in rust_offtopic
Алексей
let mut_ref = &mut *mut_ptr;
потому что вот это даст ту же самую ссылку
перепиши вот так если тебе невидно
fn main() {
   let mut x = 0;
   let mut_ptr = &mut x as * mut _;
   
   // ub, according to miri
   /*
   unsafe {
       {
           let mut_ref = &mut x;
           *mut_ref = 2;
           
       }
       *mut_ptr;
   }*/
   
   unsafe {
       {
           let mut_ref = &mut *mut_ptr;
           *mut_ref = 2;
       }

       *mut_ptr;
   }
}
источник

А

Алексей in rust_offtopic
Alex Noname
ты ее не используешь. она лочит mut_ptr на время использования.
mut_ptr - это же указатель, его нельзя "залочить"
источник

AN

Alex Noname in rust_offtopic
Алексей
mut_ptr - это же указатель, его нельзя "залочить"
в miri можно. но да там чуть другой алгоритм.
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Алексей
mut_ptr - это же указатель, его нельзя "залочить"
ты про stacked borrow читал?
источник