Aidar
Aidar
Мне вот не до фени когда оно лагает а когда нет
Aidar
Строки один из самых частоиспользуемых ресурсов
Andrew
Так и начинаются специальные использования, это не делает COW строку плохой в своих границах применимости.
Aidar
Делает
Andrew
Тут начинаются тонкости с тем, насколько у тебя часто происходят copy-write-delete на эти самые строки. Не везде это становится проблемой. не везде подойдут COW строки на атомиках.
Aidar
Из-за невозможности использования cow была придумана move semantics
Aidar
Когда оверхед начал что-то значить
Andrew
Но move semantics же не полностью заменяет COW...
Aidar
Ну никто не пишет cow ибо он говно
Andrew
И ничто не мешает сделать COW класс moveable
Andrew
Aidar
Cow остался в легаси
Aidar
Типа кьюта
Constantine
Anatoly
нужна ли COW реализация в виде самопала? не нужна, поскольку есть стандарный std::shared_ptr
Andrew
Критики в чатике 😊 Собственно, изначальный вопрос и был в том, сделано ли это уже где-нибудь и почему нет в стандарте, где есть string_view и shared_ptr по отдельности. Это потом все скатилось в "ты хочешь явную иерархию владения".
Aidar
Andrew
Square
Square
Не столько с процами, сколько с многопоточностью, имхо
Andrew
Подождите, вот есть сценарий: создаются строки, которые редко меняются и шарятся по многим местам/контейнерам и т.п. COW тут работает как добрый малый, который делает все довольно эффективно для использования, практически нулевой ценой для программиста. Я не понимаю, как тут поможет move, если у меня _копии_.
Aidar
Да и компилятору легче и процу легче
Aidar
Вон в стек ио посмотрите
Aidar
Дичь полная
Aidar
Проверки в рантайме флажков
Aidar
На каждом чаре
Aidar
Пздц
Aidar
Тут было то же
Square
Aidar
Во времена ков
🦥Alex Fails
Так Антон же в докладе показал, что ни хрена не вера, а на самом деле страдает перф: https://habrahabr.ru/company/oleg-bunin/blog/352280/
Square
Anatoly
Square
Anatoly
@breakneck11 ты все сделал правильно, но хочешь привнести в свой проект сборку мусора. я бы трижды подумал, поскольку пул как раз и выполняет контроль над временем жизни строк, а string_view обеспечивает незатратный способ передачи строк
Aidar
Andrew
Aidar
Сделай хозяина явно
Aidar
Сделай пул строк и дергай из него
Andrew
Aidar
Переживать пул строки не должны
Aidar
Если строка переживает родителя который содержит пул родитель должен просто передать пул дальше
Anatoly
а если поместить пул под управление того же shared_ptr решится задачи и с передачей пула
Anatoly
вообщем, не вижу смысла здесь что-то придумывать и помещать строки под управление std::shared_ptr
Square
А киньте в сообщение, где кейс/вопрос. Я чото нипонил
Aidar
Anatoly
А есть какой-то shared_string_view? Хочется как string_view, но с shared_ptr на строку внутри, чтобы не париться по владению памятью; чтобы не перепридуать COW — пусть указатель будет на константную строку. Если такого нет, почему не добавили в стандарт: сильно медленнее и т.п? Вроде не сложно написать, но странно, почему никто такого не захотел раньше.
Aidar
Не надо
Вы теряете явный контекст жизни строк
Square
Constantine
Aidar
Короче контекст это как блок кода с фигурными скобками или типа того
Andrew
Вот объясните мне, я не могу вас понять. Казалось бы, это естественный путь: сделать все минимальными усилиями, с использованием максимально "самоумных" инструментов, где это модет пригодиться: COW, если много копий строк, автоматическое управление владением через shared_ptr, чтобы не думать над этим при изменениях через 2 месяца. А потом, посмотреть на узкое место, которое с огромной вероятностью окажется не в COW и нев shared_ptr. А если оно оказалось там, то, если написан корошо разделяемый код с надежной инкапсуляцией, то и заменить на специально вылизанные аналоги. Но почему-то тут многие ругают "умные" инструменты, приводя в пример ситуации, где их накладные расходы начинают выпирать, и игнорируют случаи, где эти расходы минимальны.
Anatoly
Aidar
Что если половина ИФА будет у вас в одной функции а остальная часть в другой? Это норма?
Andrew
Aidar
foo(){
if (n){
return bar();
}
--------------------
bar(){
dosmth
}endif
}
Aidar
Удобно?
Aidar
То же самое с неявным контекстом и cow
🦥Alex Fails
🦥Alex Fails
Вот объясните мне, я не могу вас понять. Казалось бы, это естественный путь: сделать все минимальными усилиями, с использованием максимально "самоумных" инструментов, где это модет пригодиться: COW, если много копий строк, автоматическое управление владением через shared_ptr, чтобы не думать над этим при изменениях через 2 месяца. А потом, посмотреть на узкое место, которое с огромной вероятностью окажется не в COW и нев shared_ptr. А если оно оказалось там, то, если написан корошо разделяемый код с надежной инкапсуляцией, то и заменить на специально вылизанные аналоги. Но почему-то тут многие ругают "умные" инструменты, приводя в пример ситуации, где их накладные расходы начинают выпирать, и игнорируют случаи, где эти расходы минимальны.
И вот мотивация
Aidar
Мелкие строки ваще же в ссо
Aidar
Стрингвью поди дольше чем Стринг для них
Anatoly
Вот объясните мне, я не могу вас понять. Казалось бы, это естественный путь: сделать все минимальными усилиями, с использованием максимально "самоумных" инструментов, где это модет пригодиться: COW, если много копий строк, автоматическое управление владением через shared_ptr, чтобы не думать над этим при изменениях через 2 месяца. А потом, посмотреть на узкое место, которое с огромной вероятностью окажется не в COW и нев shared_ptr. А если оно оказалось там, то, если написан корошо разделяемый код с надежной инкапсуляцией, то и заменить на специально вылизанные аналоги. Но почему-то тут многие ругают "умные" инструменты, приводя в пример ситуации, где их накладные расходы начинают выпирать, и игнорируют случаи, где эти расходы минимальны.
Да бог с тобой, делай :)
Andrew
Да нет, меня просто действительно удивила позиция людей, что-то вроде небольшого культурного шока. 😊
Square
Andrew
Мое отличается от существующего string_view в 2 местах: 1. Оно добавляет небольшие накладные расходы. 2. Оно не дает выстрелить себе в ногу.
Не возьмусь голословно говорить, какое из них более общее.
Square
Aidar
Aidar
Оно будет раз в 10 дольше работать
Aidar
3) оно даёт право не определять для себя правила написания кода и писать как попало
Andrew
Из-за вечных хождений по указателю? Наверное ты прав, я над большими строками думал, там это бы компенсировалось. Хотя, а разве если у меня константный указатель на const string, она не может положиться в кеш?
Aidar