Size: a a a

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

2020 November 04

MP

Mag Pie in Rust — русскоговорящее сообществo
Matklad? Ы
источник

SL

S. L. in Rust — русскоговорящее сообществo
Иван Лещенко
"Скопировали вот эти 4 байта вот отсюда сюда, и с этими 4 байтами ничего не случилось"
так, получается что если реализован copy, то move не происходит. Мы просто копируем значение и теперь у нас есть оригинальные 4 байта в x и копированные четыре байта в y?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Мне нужен не префикс строки, а префикс пути
И для Path неудобная апишка, которая не позволяет получать любой срез компонентов
У меня получилось вот так, но с лишней аллокацией
источник

ИЛ

Иван Лещенко... in Rust — русскоговорящее сообществo
S. L.
так, получается что если реализован copy, то move не происходит. Мы просто копируем значение и теперь у нас есть оригинальные 4 байта в x и копированные четыре байта в y?
Типо того
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
S. L.
так, получается что если реализован copy, то move не происходит. Мы просто копируем значение и теперь у нас есть оригинальные 4 байта в x и копированные четыре байта в y?
Copies happen implicitly, for example as part of an assignment y = x. The behavior of Copy is not overloadable; it is always a simple bit-wise copy.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Да, посмотрел твой вариант — примерно так же
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Аллокация тут на самом деле не нужна, ответ — всегда слайс от левого пути
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Кстати, а почему для многих базовых типов Copy не заимплементирован? Например, что плохого в том, чтобы побитово копировать Vec?
источник

ИЛ

Иван Лещенко... in Rust — русскоговорящее сообществo
Ilya Lakhin
Кстати, а почему для многих базовых типов Copy не заимплементирован? Например, что плохого в том, чтобы побитово копировать Vec?
Vec кучу юзает
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ilya Lakhin
Кстати, а почему для многих базовых типов Copy не заимплементирован? Например, что плохого в том, чтобы побитово копировать Vec?
Vec в деструкторе освобождает память
источник

ИЛ

Иван Лещенко... in Rust — русскоговорящее сообществo
Ilya Lakhin
Кстати, а почему для многих базовых типов Copy не заимплементирован? Например, что плохого в том, чтобы побитово копировать Vec?
Если ты его скопируешь - получишь два указателя на один кусок памяти
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Если его побитово скопировать, то память будет освобождена два раза
Это unsound
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Поэтому Copy нельзя делать для объектов с деструкторами
Кроме того, Copy обычно не делают для тяжёлых по памяти объектов, чтобы не провоцировать их случайное копирование туда-сюда
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Иван Лещенко
Vec кучу юзает
А Copy типы разве всегда используют стек?
источник

SL

S. L. in Rust — русскоговорящее сообществo
Mag Pie
Copies happen implicitly, for example as part of an assignment y = x. The behavior of Copy is not overloadable; it is always a simple bit-wise copy.
Так-с. А если реализован не реализован copy, то работает move(как я понял для более сложных объектов).

x = ...
y = x

В таком случае я не смогу обратиться к x?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ilya Lakhin
А Copy типы разве всегда используют стек?
Copy-типы не имеют права иметь деструктор
Стало быть, они не смогут освободить память на куче, и, обычно, не выделяют её
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
S. L.
Так-с. А если реализован не реализован copy, то работает move(как я понял для более сложных объектов).

x = ...
y = x

В таком случае я не смогу обратиться к x?
Да
источник

SL

S. L. in Rust — русскоговорящее сообществo
Mag Pie
Да
но при этом x не удалится из памяти?
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
S. L.
но при этом x не удалится из памяти?
При этом y становится x, а значение х становится неопределенным
источник

SL

S. L. in Rust — русскоговорящее сообществo
окей, спасибо всем. Пойду разбираться дальше
источник