Изучаем раст вместе
Dec. 24th, 2019 10:34 pmЯ тут недавно узнал, что не только я изучаю ржавчину. Но еще и
juan_gandhi (как минимум)
Первый прикол
Раст имеет понятие мутабельности. Мутабельное менять можно, а иммутабельное нельзя. Приводить одно к другому можно через небезопасный код внутри конструкции unsafe{} - но оптимизатор надеется, что вы не будете так делать. Поэтому если вы так сделаете - он наоптимизирует такого, шо ховайся. Поэтому на самом деле, оно хоть и можно технически - но так делать ненадо.
Мутабельноть может иметь две разные категории, которые могут скомбинироваться четырьмя способами. Если ссылка на структуру мутабельна - то ее (ссылку) можно изменить, чтобы она указывала на другую структуру. А структуру менять при этом нельзя.
А если у вас ссылка на мутабельную структуру - то ссылку менять нельзя, а поля структуры менять можно.
struct Foo{ v: u32 }
let mut foo = Foo{ v: 42 }; //наша структура
let foo1 = Foo{ v:43 };
let mut x = &foo; //мутабельная ссылка на иммутабельную структуру
let y = &mut foo; //иммутабельная ссылка на мутабельную структуру. Поля струтуры менять можно, а переназначить на foo1 нельзя
let mut u = &mut foo; //мутабельная ссылка на мутабельную структуру
let k = &foo; //иммутабельная ссылка на иммутабельную структуру
( Read more... )
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Первый прикол
Раст имеет понятие мутабельности. Мутабельное менять можно, а иммутабельное нельзя. Приводить одно к другому можно через небезопасный код внутри конструкции unsafe{} - но оптимизатор надеется, что вы не будете так делать. Поэтому если вы так сделаете - он наоптимизирует такого, шо ховайся. Поэтому на самом деле, оно хоть и можно технически - но так делать ненадо.
Мутабельноть может иметь две разные категории, которые могут скомбинироваться четырьмя способами. Если ссылка на структуру мутабельна - то ее (ссылку) можно изменить, чтобы она указывала на другую структуру. А структуру менять при этом нельзя.
А если у вас ссылка на мутабельную структуру - то ссылку менять нельзя, а поля структуры менять можно.
struct Foo{ v: u32 }
let mut foo = Foo{ v: 42 }; //наша структура
let foo1 = Foo{ v:43 };
let mut x = &foo; //мутабельная ссылка на иммутабельную структуру
let y = &mut foo; //иммутабельная ссылка на мутабельную структуру. Поля струтуры менять можно, а переназначить на foo1 нельзя
let mut u = &mut foo; //мутабельная ссылка на мутабельную структуру
let k = &foo; //иммутабельная ссылка на иммутабельную структуру
( Read more... )