А был ли мальчик? (помянем плюсы)

User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: А был ли мальчик? (помянем плюсы)

Post by Мальчик-Одуванчик »

Medium-rare wrote: 23 Jan 2018 01:59
M. Ridcully wrote: 23 Jan 2018 00:22
Medium-rare wrote: 23 Jan 2018 00:17
M. Ridcully wrote: 22 Jan 2018 23:51 3. заменить shared_ptr -> unique_ptr.
???
In collections.
Ну, shared_ptr в collections точно работает, а вот предлагаемая замена...
auto_ptr не работает.
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: А был ли мальчик? (помянем плюсы)

Post by AndreyT »

Medium-rare wrote: 23 Jan 2018 01:59 Ну, shared_ptr в collections точно работает, а вот предлагаемая замена...
Одной из причин разработки unique_ptr как раз и было предоставление не-shared "умного указателя", совместимого (в отличие от auto_ptr) со стандартными контейнерами. Функциональность shared_ptr избыточна (и, поэтому, его реализация более громоздка и менее эффективна) в ситуациях, когда никакого sharing-а фактически нет.
Best regards,
Андрей
User avatar
Prosche
Уже с Приветом
Posts: 8090
Joined: 08 Nov 2004 12:24
Location: GA

Re: А был ли мальчик? (помянем плюсы)

Post by Prosche »

M. Ridcully wrote: 22 Jan 2018 23:10
Сабина wrote: 22 Jan 2018 22:04 Кстати да, интересно было бы понять как именно развивается язык С++.
Вроде новые стандарты принимаются - 11, 14, 17й...

У меня вот коллега всё ратует на новый стандарт перейти. Я вроде бы не против - практический Boost можно бы было выкинуть, от shared_ptr избавиться, но не настолько мне это нужно, чтобы калории на это тратить... :-)
Дык а зачем переписывать, начните использовать в новом коде, а старый оставьте как есть. Или вы на древнем компиляторе? -std=c++11 и вперед! :)
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: А был ли мальчик? (помянем плюсы)

Post by Medium-rare »

AndreyT wrote: 23 Jan 2018 02:51 Одной из причин разработки unique_ptr как раз и было предоставление не-shared "умного указателя", совместимого (в отличие от auto_ptr) со стандартными контейнерами. Функциональность shared_ptr избыточна (и, поэтому, его реализация более громоздка и менее эффективна) в ситуациях, когда никакого sharing-а фактически нет.
Если std::unique_ptr устраивает в контейнере, то до тех пор, пока программист не пытается выполнить над ним одну из кучки законных операций. А избыточный std::shared_ptr просто всегда на его месте устроит. Не то, чтобы я призывал то или другое использовать в котейнерах.
... and even then it's rare that you'll be going there...
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: А был ли мальчик? (помянем плюсы)

Post by AndreyT »

Medium-rare wrote: 23 Jan 2018 03:38
AndreyT wrote: 23 Jan 2018 02:51 Одной из причин разработки unique_ptr как раз и было предоставление не-shared "умного указателя", совместимого (в отличие от auto_ptr) со стандартными контейнерами. Функциональность shared_ptr избыточна (и, поэтому, его реализация более громоздка и менее эффективна) в ситуациях, когда никакого sharing-а фактически нет.
Если std::unique_ptr устраивает в контейнере, то до тех пор, пока программист не пытается выполнить над ним одну из кучки законных операций.
Это о каких именно "законных операциях" идет речь?

"Забрать" значение у элемента такого контейнера можно, но для этого надо сознательно и явно постараться.
Best regards,
Андрей
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: А был ли мальчик? (помянем плюсы)

Post by M. Ridcully »

Prosche wrote: 23 Jan 2018 03:02
M. Ridcully wrote: 22 Jan 2018 23:10
Сабина wrote: 22 Jan 2018 22:04 Кстати да, интересно было бы понять как именно развивается язык С++.
Вроде новые стандарты принимаются - 11, 14, 17й...

У меня вот коллега всё ратует на новый стандарт перейти. Я вроде бы не против - практический Boost можно бы было выкинуть, от shared_ptr избавиться, но не настолько мне это нужно, чтобы калории на это тратить... :-)
Дык а зачем переписывать, начните использовать в новом коде, а старый оставьте как есть. Или вы на древнем компиляторе? -std=c++11 и вперед! :)
С компиляторами всё в порядке.
Код у нас, в-принципе, один.
Пока речь шла просто о том, чтобы изменить Makefiles и убедиться, что не регрессий. _Теоретически_, вроде, их быть не должно. Но вот вроде у всех пока есть чем заняться, и просто оправдать это усилие ради довольно эзотерической цели (ИМХО) мне сложно.
Мир Украине. Свободу России.
User avatar
Prosche
Уже с Приветом
Posts: 8090
Joined: 08 Nov 2004 12:24
Location: GA

Re: А был ли мальчик? (помянем плюсы)

Post by Prosche »

M. Ridcully wrote: 23 Jan 2018 05:18 С компиляторами всё в порядке.
Код у нас, в-принципе, один.
Пока речь шла просто о том, чтобы изменить Makefiles и убедиться, что не регрессий. _Теоретически_, вроде, их быть не должно. Но вот вроде у всех пока есть чем заняться, и просто оправдать это усилие ради довольно эзотерической цели (ИМХО) мне сложно.
Хеххх. Усилия... Я вот заканчиваю щас миграцию солюшенов из Студии (msbuild) на симейк+нинзя. Самый большой из которых на 498 плюсовых, питоновских и шарповских проектов, вот это переход, а у вас так, работы на полдня с перекурами. :)
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: А был ли мальчик? (помянем плюсы)

Post by Medium-rare »

AndreyT wrote: 23 Jan 2018 04:35 Это о каких именно "законных операциях" идет речь?
Ну для примера. Уже подумал, что что-то подзабыл со времён интересных дискуссий во время выхода 11-го стандарта. Хотя там выше линк есть. Но таки попробовал, не веря своим глазам. :?

Code: Select all

static std::vector<std::unique_ptr<int>> vctA;

void blah()
{
    /// enjoy
    std::vector<std::unique_ptr<int>> vctB(vctA.begin(), vctA.end());
}
"Забрать" значение у элемента такого контейнера можно, но для этого надо сознательно и явно постараться.
Это предложение предлагает правильность идеи использования unique_ptr в контейнерах? Но постараться...
... and even then it's rare that you'll be going there...
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: А был ли мальчик? (помянем плюсы)

Post by AndreyT »

Medium-rare wrote: 23 Jan 2018 06:06
AndreyT wrote: 23 Jan 2018 04:35 Это о каких именно "законных операциях" идет речь?
Ну для примера. Уже подумал, что что-то подзабыл со времён интересных дискуссий во время выхода 11-го стандарта. Хотя там выше линк есть. Но таки попробовал, не веря своим глазам. :?

Code: Select all

static std::vector<std::unique_ptr<int>> vctA;

void blah()
{
    /// enjoy
    std::vector<std::unique_ptr<int>> vctB(vctA.begin(), vctA.end());
}
Ну то есть эта попытка завершилась безуспешно. Поэтому не совсем понятен комментарий "enjoy".
Medium-rare wrote: 23 Jan 2018 06:06
"Забрать" значение у элемента такого контейнера можно, но для этого надо сознательно и явно постараться.
Это предложение предлагает правильность идеи использования unique_ptr в контейнерах? Но постараться...
Не совсем понятно, что вы здесь хотите сказать.
Best regards,
Андрей
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: А был ли мальчик? (помянем плюсы)

Post by Medium-rare »

AndreyT,
Как тип для помещения в контейнер:

shared_ptr удовлетворяет все операции над контейнерами.
unique_ptr удовлетворяет часть операций над контейнерами.

Более ничего.
... and even then it's rare that you'll be going there...
ksi
Уже с Приветом
Posts: 10065
Joined: 20 May 1999 09:01

Re: А был ли мальчик? (помянем плюсы)

Post by ksi »

Medium-rare wrote: 23 Jan 2018 06:52 AndreyT,
Как тип для помещения в контейнер:

shared_ptr удовлетворяет все операции над контейнерами.
unique_ptr удовлетворяет часть операций над контейнерами.

Более ничего.
Чем плохи обычные пойнтеры, кроме того, что надо следить за памятью? Ну и хорошо, что надо, обычно это как то дисциплинирует и заставляет продумывать дизайн. А что новое дают те же ламбды функции в отличии от С указетелей на функции по большому счету? Только что можно лениться и не передавать лишние параметры, как аргументы? Что все же принципиально нового есть в C++ 11, 14, ... что нельзя было сделать раньше и что значительно расширяет возможности? На мой вкус единственный бесспорный кандидат это vector и иже с ними. Ну невозможно работать с fixed sized array. Ну и операции со строками. Threading по прежнему примитивный, что совсем не согласуется с требованиями сегодняшнего дня.
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: А был ли мальчик? (помянем плюсы)

Post by Medium-rare »

ksi wrote: 23 Jan 2018 16:47 не согласуется с требованиями сегодняшнего дня.
Чтобы не плодить сущности в случае с контейнером, начиная с C++ 11 moveable тип ему давать.
И жить долго, и счастливо, не зная про требования сегодняшнего дня.
... and even then it's rare that you'll be going there...
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: А был ли мальчик? (помянем плюсы)

Post by M. Ridcully »

ksi wrote: 23 Jan 2018 16:47 Threading по прежнему примитивный, что совсем не согласуется с требованиями сегодняшнего дня.
А что именно вам от threading не хватает?
ИМХО самое главное достоинство - что он там, наконец, появился, как средство самого языка / стандартной библиотеки.

А вообще ваш ответ - не про threading, а выше - наглядная демонстрация того, что плюсам, возможно, пора на свалку истории. Нельзя бесконечно добавлять фичи, не убирая их. Когда над одним кодом работают люди с весьма разным представлением о том, что такое правильный C++ код, это неизбежно рождает монстров. Никакие линты не помогут.
Мир Украине. Свободу России.
ksi
Уже с Приветом
Posts: 10065
Joined: 20 May 1999 09:01

Re: А был ли мальчик? (помянем плюсы)

Post by ksi »

M. Ridcully wrote: 23 Jan 2018 18:08
ksi wrote: 23 Jan 2018 16:47 Threading по прежнему примитивный, что совсем не согласуется с требованиями сегодняшнего дня.
А что именно вам от threading не хватает?
ИМХО самое главное достоинство - что он там, наконец, появился, как средство самого языка / стандартной библиотеки.

А вообще ваш ответ - не про threading, а выше - наглядная демонстрация того, что плюсам, возможно, пора на свалку истории. Нельзя бесконечно добавлять фичи, не убирая их. Когда над одним кодом работают люди с весьма разным представлением о том, что такое правильный C++ код, это неизбежно рождает монстров. Никакие линты не помогут.
Threading это отдельная тема, у нас очень серьезные и нестандартные задачи с точки зрения threading, еоторые просто невозможно имплементировать стандартными средставими типа мьютексов (без огромной потери перформанса), поэтому встроенные средства C++ бесполезны, у нас свои библиотеки. Стандарнтые средства как бы слишком примитивны.

С++ важен своим быстродействием. Быстрей ничего еще не придумали. А это очень важно во многих сферах. Главное это не убить
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: А был ли мальчик? (помянем плюсы)

Post by M. Ridcully »

ksi wrote: 23 Jan 2018 18:21 Threading это отдельная тема, у нас очень серьезные и нестандартные задачи с точки зрения threading, еоторые просто невозможно имплементировать стандартными средставими типа мьютексов (без огромной потери перформанса), поэтому встроенные средства C++ бесполезны, у нас свои библиотеки. Стандарнтые средства как бы слишком примитивны.
Ну а на основе чего эти ваши самые библиотеки сделаны?
Если вы про lock free и проч., то это тоже можно на основе теперь стандартных средств C++ делать.
Но вообще я вам сочувствую. Сколько раз ни сталкивался с "нестандартным тредингом", всегда в конечном счёте это было болью. Даже в тех случаях, когда работало.

Честно говоря думал, что вы имели в виду что-то вроде того, что в Golang. Там действительно с точки зрения threading что-то новое, более-менее.
ksi wrote: 23 Jan 2018 18:21 С++ важен своим быстродействием. Быстрей ничего еще не придумали. А это очень важно во многих сферах. Главное это не убить
Как сказать, на C тоже можно писать довольно быстро.
Мир Украине. Свободу России.

Return to “Вопросы и новости IT”