Веб-версияОткрыть в Telegram

Пост🐮 Cow: Ленивое клонирование

7 сентября 2026
R
Rust
🐮 Cow: Ленивое клонирование Все знают: лишний clone() - это грех. Но иногда нам нужно вернуть строку, которая может быть изменена, а может и нет. Допустим, мы чистим инпут от спецсимволов. 1. Если спецсимволов нет - зачем аллоцировать новую строку? Можно вернуть ссылку на исходную. 2. Если есть - придется создать новую String. Здесь на сцену выходит std::borrow::Cow (Clone on Write). use std::borrow::Cow; fn sanitize(input: &str) -> Cow<str> { if input.contains('!') { // Аллокация происходит только тут Cow::Owned(input.replace('!', "?")) } else { // Тут мы просто возвращаем ссылку. Zero allocation. Cow::Borrowed(input) } } Это мощнейший инструмент для хот-пасов (hot paths), где 90% данных не требуют изменений. Не ленитесь использовать Cow там, где можно избежать лишних аллокаций. #rust #performance #std 📲 Мы в MAX 👉 @rust_lib
16 · 917 ·

Рядом в ленте

RRust🛠 Cargo Expand: Загляни под капот макросам Признайтесь, у вас бывало такое: навесили #[derive(Serialize)] или сложный макрос из sqlx, получили странную ошибку кRRustВладение, заимствование и ссылки в Rust: как компилятор делает ваш код безопасным В Rust одна из самых непривычных для разработчиков тем — это ownership (владен
это сообщение
RRust🤠 Трюк Индианы Джонса: std::mem::take Типичная ситуация: у вас есть &mut self, и вы хотите забрать поле (например, String или Vec), что-то с ним сделать, и, возRRustПочему Vec::new() это ловушка для производительности. 📈 Векторный рост: Избегаем реаллокаций Мы часто пишем: let mut vec = Vec::new(); for item in heavy_iter {

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем