Если ты пишешь на Rust и постоянно выбираешь между:
- взять
&str (быстро, без аллокаций)- или
String (гибко, но дорого)…то
Cow - это третья опция, о которой многие забывают.Cow (Clone-on-Write) - тип, который позволяет переиспользовать данные без копирования, пока это возможно.Идея простая:
- пока строку можно просто читать - она хранится как Borrowed (`&str`)
- если нужно изменить - Rust делает копию только в этот момент и переводит в Owned (`String`)
То есть копирование происходит лениво и строго по необходимости.
Где
Cow реально спасает:- парсинг и нормализация текста
- чистка строк без лишних аллокаций
- API, где иногда достаточно ссылки, а иногда нужна новая строка
- Serde/конвертации, где важна скорость
Ощущается как магия:
ты пишешь код “как удобно”, а под капотом Rust экономит память и CPU.
https://deterministic.space/secret-life-of-cows.html
