Copy vs Clone в Rust: почему использование одногр почти не ест ресурсы а другое может стоить вам дорого
В Rust Copy и `Clone` часто воспринимают как одно и то же: «ну, просто сделать копию».
Но разница принципиальная.
Copy - это когда значение можно безопасно продублировать как набор байтов. Без вызова кода, без выделения памяти, без скрытой логики. Поэтому u32, bool, char, f64 и другие простые типы спокойно копируются автоматически.
Вы передали u32 в функцию - старое значение осталось доступно. Rust просто скопировал число.
С Clone другая история.
Clone означает: «создай новое значение такого же типа». А как именно это сделать, решает сам тип. Иногда это тоже дешево. Но иногда clone() запускает полноценную работу: выделяет память, копирует данные, пересобирает внутреннюю структуру.
Самый понятный пример - String.
Если бы Rust просто скопировал байты самой структуры String, мы получили бы два владельца одного и того же буфера в памяти. Это сломало бы модель владения.
Поэтому String::clone() создает новый буфер и копирует туда текст. Это уже не бесплатная операция.
Главная мысль простая:
Copy - для типов, которые можно безопасно копировать как байты.
Clone - для типов, которым может понадобиться настоящая работа, чтобы создать независимую копию.
Поэтому в Rust clone() в коде стоит замечать. Не паниковать, но понимать: здесь может быть цена.
🔥15
❤7
👍6
22 46 2.1K
Обсуждение
22
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсуждение 22
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram