@ProCxx

Страница 1928 из 2477
Aidar
02.04.2018
11:06:08
"Страдай, как деды с ANSI C"
Ну ваще с++98 был сильно похож на то что пишут джависты, а теперь не похож

Google
Ilia
02.04.2018
11:06:11
Но он объективно устарел, не?
Считается, что он плохо сочетается с оптимизациями современных процессоров. Да, это скорее философия и вера, тут я согласен. Но мне как-то Move тоже ближе, чем COW. Он лучше сочетается с семантикой объектной модели С++

Ilia
02.04.2018
11:06:47
И это тоже

Andrew
02.04.2018
11:06:56
Подождите, вот есть сценарий: создаются строки, которые редко меняются и шарятся по многим местам/контейнерам и т.п. COW тут работает как добрый малый, который делает все довольно эффективно для использования, практически нулевой ценой для программиста. Я не понимаю, как тут поможет move, если у меня _копии_.

Aidar
02.04.2018
11:07:05
Да и компилятору легче и процу легче

Вон в стек ио посмотрите

Дичь полная

Проверки в рантайме флажков

На каждом чаре

Пздц

Тут было то же

Ilia
02.04.2018
11:08:05
Например, тот же Qt, его контейнеры с PIMPL и COW — ЛЮБАЯ неконстантная фукнция требует синхронизированного доступа к счётчикам использования. Надо ли говорить, что для ОДНОПОТОЧНОГО приложения это как бы перебор (Оверкил)

Google
Aidar
02.04.2018
11:08:06
Во времена ков

Square
02.04.2018
11:08:15
Anatoly
02.04.2018
11:09:20
@breakneck11 ты все сделал правильно, но хочешь привнести в свой проект сборку мусора. я бы трижды подумал, поскольку пул как раз и выполняет контроль над временем жизни строк, а string_view обеспечивает незатратный способ передачи строк

Aidar
02.04.2018
11:11:30
Сделай хозяина явно

Anatoly
02.04.2018
11:11:35
Так у нас же нет родного пулла в плюсах, нет?
std::vector<std::string> pool или std::deque или std::set

Aidar
02.04.2018
11:11:40
Сделай пул строк и дергай из него

Andrew
02.04.2018
11:11:48
Так Антон же в докладе показал, что ни хрена не вера, а на самом деле страдает перф: https://habrahabr.ru/company/oleg-bunin/blog/352280/
Это все правда, когда у нас частые модификации. Я привел чуть-чуть другой сценарий.

Aidar
02.04.2018
11:12:25
Переживать пул строки не должны

Если строка переживает родителя который содержит пул родитель должен просто передать пул дальше

Anatoly
02.04.2018
11:14:45
а если поместить пул под управление того же shared_ptr решится задачи и с передачей пула

вообщем, не вижу смысла здесь что-то придумывать и помещать строки под управление std::shared_ptr

Square
02.04.2018
11:15:22
А киньте в сообщение, где кейс/вопрос. Я чото нипонил

Anatoly
02.04.2018
11:16:06
А есть какой-то shared_string_view? Хочется как string_view, но с shared_ptr на строку внутри, чтобы не париться по владению памятью; чтобы не перепридуать COW — пусть указатель будет на константную строку. Если такого нет, почему не добавили в стандарт: сильно медленнее и т.п? Вроде не сложно написать, но странно, почему никто такого не захотел раньше.

Google
Aidar
02.04.2018
11:16:34
Не надо
Вы теряете явный контекст жизни строк

Constantine
02.04.2018
11:17:35
std::vector<std::string> pool или std::deque или std::set
я бы не стал делать string_view на vector<string> :)

Aidar
02.04.2018
11:18:09
Короче контекст это как блок кода с фигурными скобками или типа того

Andrew
02.04.2018
11:18:26
Вот объясните мне, я не могу вас понять. Казалось бы, это естественный путь: сделать все минимальными усилиями, с использованием максимально "самоумных" инструментов, где это модет пригодиться: COW, если много копий строк, автоматическое управление владением через shared_ptr, чтобы не думать над этим при изменениях через 2 месяца. А потом, посмотреть на узкое место, которое с огромной вероятностью окажется не в COW и нев shared_ptr. А если оно оказалось там, то, если написан корошо разделяемый код с надежной инкапсуляцией, то и заменить на специально вылизанные аналоги. Но почему-то тут многие ругают "умные" инструменты, приводя в пример ситуации, где их накладные расходы начинают выпирать, и игнорируют случаи, где эти расходы минимальны.

Anatoly
02.04.2018
11:18:28
Aidar
02.04.2018
11:18:52
Что если половина ИФА будет у вас в одной функции а остальная часть в другой? Это норма?

Constantine
02.04.2018
11:19:45
it depends, v.reserve() и все
нога в опасности, да и память последовательно ради этого выделять ниохота

Aidar
02.04.2018
11:19:51
foo(){ if (n){ return bar(); } -------------------- bar(){ dosmth }endif }

Удобно?

То же самое с неявным контекстом и cow

Alex Фэils?︙
02.04.2018
11:21:50
Ilia
02.04.2018
11:22:35
Вот объясните мне, я не могу вас понять. Казалось бы, это естественный путь: сделать все минимальными усилиями, с использованием максимально "самоумных" инструментов, где это модет пригодиться: COW, если много копий строк, автоматическое управление владением через shared_ptr, чтобы не думать над этим при изменениях через 2 месяца. А потом, посмотреть на узкое место, которое с огромной вероятностью окажется не в COW и нев shared_ptr. А если оно оказалось там, то, если написан корошо разделяемый код с надежной инкапсуляцией, то и заменить на специально вылизанные аналоги. Но почему-то тут многие ругают "умные" инструменты, приводя в пример ситуации, где их накладные расходы начинают выпирать, и игнорируют случаи, где эти расходы минимальны.
Я не вижу особой универсальности у того, что ты описал. Похоже это на таблицу атомов, но они на самом деле редко кому нужны, и без них можно обойтись.

Aidar
02.04.2018
11:23:08
Мелкие строки ваще же в ссо

Стрингвью поди дольше чем Стринг для них

Andrew
02.04.2018
11:24:21
Да нет, меня просто действительно удивила позиция людей, что-то вроде небольшого культурного шока. ?

Google
Anatoly
02.04.2018
11:26:53
Да нет, меня просто действительно удивила позиция людей, что-то вроде небольшого культурного шока. ?
а потому что с практической точки зрения container<std::string> + std::string_view гораздо эффективнее container<std::shared_ptr<std::string>> + shared_ptr_string_view

Andrew
02.04.2018
11:28:24
Я не вижу особой универсальности у того, что ты описал. Похоже это на таблицу атомов, но они на самом деле редко кому нужны, и без них можно обойтись.
Мое отличается от существующего string_view в 2 местах: 1. Оно добавляет небольшие накладные расходы. 2. Оно не дает выстрелить себе в ногу. Не возьмусь голословно говорить, какое из них более общее.

Square
02.04.2018
11:28:33
Да нет, меня просто действительно удивила позиция людей, что-то вроде небольшого культурного шока. ?
Кстати не проще ли тогда напилить свой аллокатор чтобы «творить» угар

Aidar
02.04.2018
11:28:50
Оно будет раз в 10 дольше работать

3) оно даёт право не определять для себя правила написания кода и писать как попало

Andrew
02.04.2018
11:30:52
Из-за вечных хождений по указателю? Наверное ты прав, я над большими строками думал, там это бы компенсировалось. Хотя, а разве если у меня константный указатель на const string, она не может положиться в кеш?

Andrew
02.04.2018
11:31:38
3) оно даёт право не определять для себя правила написания кода и писать как попало
Есть мнение, что так же можно раскритиковать конструкторы и деструкторы. Кажется, так делал Торвальдс.

Aidar
02.04.2018
11:32:23
Есть мнение, что так же можно раскритиковать конструкторы и деструкторы. Кажется, так делал Торвальдс.
Как раз наоборот, конструкторы и деструкторы это правило задающее контекст, а у тебя контекст непонятен, следовательно не понятна иерархия

Следовательно не понятна архитектура приложения целиком

Andrew
02.04.2018
11:34:54
Там внутри атомарный счетчик
Я для доступа к строке буду ходить по обычному указателю. Атомарный счетчик будет задействован только при создании/копировании/удалении, что в современной действительности c move semantics + copy ellision + ... будет происходить не так уж часто.

Следовательно не понятна архитектура приложения целиком
Мне кажется, это могут быть проблемы твоего восприятия. В мое нормально укладывается модель "последний уходящий закрывает дверь^W^W убивает объект".

Aidar
02.04.2018
11:36:10
А в мое нет

Дверь должен закрывать деструктор комнаты

Andrew
02.04.2018
11:38:43
Дверь должен закрывать деструктор комнаты
Плохая и неверный аналогия. В плюсах дверь закрывает и уничтожает объект обычно его владелец, который действительно обычно 1. Это не значит, что невозможны другие сценарии.

Aidar
02.04.2018
11:38:45
Да и слово последний это уже отсылка к последовательности действий

Andrew
02.04.2018
11:39:12
Да и слово последний это уже отсылка к последовательности действий
Которая есть, ведь атомики. Я не вижу логической проблемы.

Aidar
02.04.2018
11:40:55
Да и слово последний это уже отсылка к последовательности действий
Это не структурная последовательность а задокументированная

В случае с контекстом она структурная

Google
Aidar
02.04.2018
11:42:55
Грубо говоря все знают что если комнаты нет то дверь закрылась

Andrew
02.04.2018
11:42:58
У меня нет проблемы с тем, что объект может пережить контекст, в котором был объявлен, если он потом все-равно гарантированно будет уничтожен. Я правильно понял, что для тебя проблема в этом?

Aidar
02.04.2018
11:43:14
Это плохой дизайн для меня

Andrew
02.04.2018
11:44:01
Видимо, на вкус и цвет.

Ilia
02.04.2018
11:49:06
Мое отличается от существующего string_view в 2 местах: 1. Оно добавляет небольшие накладные расходы. 2. Оно не дает выстрелить себе в ногу. Не возьмусь голословно говорить, какое из них более общее.
Особенно мне нравится желание не давать выстрелить в ногу. Так просто НЕ СТРЕЛЯЙ В НОГУ, И ВСЁ! В этом — дзен разработчиков на С и С++!

Andrew
02.04.2018
11:50:52
Особенно мне нравится желание не давать выстрелить в ногу. Так просто НЕ СТРЕЛЯЙ В НОГУ, И ВСЁ! В этом — дзен разработчиков на С и С++!
Не все стрелки делали это по желанию. Иногда, лучше предусмотреть в конструкции предохранитель, если ты уверен, что он не создаст проблем со скоростью достал-выстрелил.

Square
02.04.2018
11:52:17
Блин, вы про все то же?!

Кастомный аллокатор все разрулит

Andrew
02.04.2018
11:59:50
а потому что с практической точки зрения container<std::string> + std::string_view гораздо эффективнее container<std::shared_ptr<std::string>> + shared_ptr_string_view
Я понял, что мне не особо понравилось в самом существовании контейнера на верхнем уровне: он вообще не должен ничего знать о своем сроке жизни, и умирать должен, по хорошему, когда все вьюхи на него померли. Его уместно сравнить с прокси-объектом доступа к ресурсу — пока хоть кому-то нужен ресурс, этот объект должен жить. Как только последний пользователь ушел, он должен закрыть ресурс и умереть (дропнуть базу/соединение/пулл строк). Наверное, в этом месте было основное различие в понимании. Без shared_ptr такие вещи действительно обычно располагаются на высоком уровне, где их деструктор будет гарантированно вызван после сметри всех пользователей, тут вы скорее правы. Спасибо за разъяснение! (конец холивора)

Antony
02.04.2018
12:19:25
Я просто оставлю это здесь: https://www.phoronix.com/scan.php?page=news_item&px=45-Linux-Kernel-CXX-Patches

Egor
02.04.2018
12:20:15
вот это норм шутеечка (или не шутеечка)

Denis
02.04.2018
12:20:36
какие шутки

Egor
02.04.2018
12:20:39
скорее фак ю

Denis
02.04.2018
12:20:44
в 21 стандарте не будет указателей

Igor
02.04.2018
12:25:18
*в 23

в 20 они просто станут deprecated

Evgeniy
02.04.2018
12:26:27

Страница 1928 из 2477