Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
1

Стоит ли использовать сложные конструкции

28.05.2016, 21:44. Показов 2110. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер,

встревожила и заставила задуматься статья https://habrahabr.ru/company/p... og/301736/

Ведь действительно, для меня лично, С++ является средне-уровненным языком так как содержит, как доступ к управлению данными через адресса, но и приятные высокоуровневые вещи присущие высокоуровневым языкам.

Да на новой философии и возможностях С++11 и С++14 приятнее писать, но я никогда и не задумывался, что скорость падает. Теперь задумываюсь ((( Стоит ли? (Ведь задача С++ выжать максимум с таргета, для других целях лучше выбрать другие языки)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2016, 21:44
Ответы с готовыми решениями:

Где стоит использовать bootstrap и стоит ли вообще использовать CSS фреймворки?
Здравствуйте. Лично я ужасаюсь ковырять стили, когда к сайту подключен bootstrap и мало понимаю,...

Сложные скетчи. Как их использовать?
Сегодня мой друг отправил мне код, он учится со мной на програмиста, но этот код сложный, мне...

Использовать номер поля в конструкции WHERE?
Пытаюсь работать с текстовыми файлами (csv) как с таблицами, через DSN подсоединяюсь и открываю эти...

Как использовать два условия в конструкции if?
Подскажите, возможно ли в цикле if использовать два condition'a. Что то вроде: bool condition =...

19
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
28.05.2016, 22:11 2
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Да на новой философии и возможностях С++11 и С++14 приятнее писать, но я никогда и не задумывался, что скорость падает.
Появившийся в C++11 перемещающий конструктор однозначно поднимает скорость программы. Появившиеся там же variadic template позволяют реализовать emplace методы, что опять же однозначно поднимает скорость за счет ухода от копирования аргументов туда-сюда.

PS Лучше бы вас встревожила не статья, а отсутствие в ней каких либо конкретных примеров падения производительности. Ну, кроме iostream которому сто лет в обед. Причем, чтобы устранить тормоза iostream, его потроха как раз таки придется переводить на шаблонные рельсы.
1
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
28.05.2016, 22:12 3
Не помню, в самой статье или в комментариях проскочила мысль, что в С++ в рамках одного языка можно критические к скорости и производительности вещи писать в pure С стиле, а в тех местах, где не так важна производительность - пользоваться всеми имеющимися приятными высокоуровневыми абстракциями. Хотя многим из них далеко до абстракций других языков.
1
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
28.05.2016, 22:39 4
Соглашаюсь с предыдущими сообщениями.
И насчёт статьи - слишком она поверхностная, а единственную ссылку на приведенное в статье видео я пока не смотрел, каюсь
Но я хочу привести вот эту ссылку(Насколько медленны iostreams?). Там в конце статьи есть соответственно замеры времени исполнения -> возникает вопрос, что автор первой статьи подразумевает под
чрезвычайно труднооптимизируемые графы, создающие сложности компиляторам
, если уж boost::spirit оказывается быстрее и соответственно он не создает трудностей, и чтож за боги столько компайлтайм абстракций налабали которые таки создают трудности.
3
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
28.05.2016, 23:49 5
Я не смог понять кому принадлежит статья. Слова Блог компании PVS-Studio не вяжутся с действительностью так как PVS-Studio - это программа, а не компания, анализатор кода для С-подобных языков. Если использовать слово компания то очень всё это напоминает "вброс" рекламной кампании .
На всякий случай спрошу: rikimaru2013, имеете процент от?
0
rikimaru2013
28.05.2016, 23:51  [ТС]
  #6

Не по теме:

IGPIGP, http://www.vitorian.com/x1/archives/313
Да, от 5 до 15% на печеньки к кофе по четвергам)))

0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
29.05.2016, 00:10 7
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
http://www.vitorian.com/x1/archives/313
Опять нет подписи. Имхо, это сам Гугл написал.
rikimaru2013, колитесь в чём тут дело.

Не по теме:

ps нашёл. Это Генри написал. То есть не Джон Кармак. Как можно было подумать сразу.

0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
29.05.2016, 00:12  [ТС] 8
IGPIGP, да всё норм. Просто всегда было что легко попасть себе в голову, и чтобы защитится С++ по скорости приходит к C# (там защита, тут заплатка, тут уточка) ....
0
IGPIGP
29.05.2016, 00:26
  #9

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
по скорости приходит к C#
Не всегда догнать может (шо щас будит . . . :D).
Я не силён такое обсуждать rikimaru2013. Думаю, это лучше знают системщики. :)

0
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
29.05.2016, 09:49 10
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Да на новой философии и возможностях С++11 и С++14 приятнее писать, но я никогда и не задумывался, что скорость падает.
Приятно то приятно, если писать небольшие программки. Когда проект достигает более 50k строк, вот тогда лишние конструкции не к чему. В больших и даже средних проектах легко допустить ошибку даже в логических выражениях или набить переизбыток конструкций. Из-за перелопачивание больших кусков строк кода внимательность падает, отсюда и возникают ошибки. Кстати статический анализатор PVS-Studio частенько доказывает это. На счёт скорости это да, ибо за компактность и обобщённость нужно платить!
2
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
29.05.2016, 10:27 11
Цитата Сообщение от Геомеханик Посмотреть сообщение
Приятно то приятно, если писать небольшие программки. Когда проект достигает более 50k строк, вот тогда лишние конструкции не к чему.
Мне кажется, наоборот. Маленькие программки еще можно писать в низкоуровневом стиле (хотя я не понимаю для чего), а большие нужно писать на таком высоком уровне абстракции, какой только возможен, иначе там никто ничего не поймет.
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
29.05.2016, 10:43 12
Цитата Сообщение от Геомеханик Посмотреть сообщение
На счёт скорости это да, ибо за компактность и обобщённость нужно платить!
Вы полагаете что myVector.push_back(MyObject(1,2,3,4)) быстрее чем myVector.emplace_back(1,2,3,4)? Спешу вас огорчить, второй вариант будет быстрее. Потому как первый вариант формирует временный объект и копирует его в вектор. А второй вариант формирует объект сразу в недрах вектора.

Если же мы пихаем объект в map, то второй вариант (через emplace) еще и позволяет выкинуть наконец эти жуткие std::make_pair.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.05.2016, 11:01 13
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
встревожила и заставила задуматься статья
статья - липа.
в ней нет никаких подтверждений собственным тезисам.
она целиком и полностью опирается на авторитет автора статьи.

если бы автор был бы Страуструпом,
тогда стоило бы задуматься.
но если бы автор действительно был Страуструпом,
статья содержала бы конкретику:
примеры работы компиляторов, цыфры, графики.

сейчас же это какой то сферический конь в вакууме.
автор сильно смахивает на неосилятора.
2
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
29.05.2016, 11:04 14
Сколько уже С++ хоронят? А сколько еще будут?
Просто нужно понимать, что это тяжелая конструкция, вот тут мне нужен быстрый код, здесь я не буду ее использовать, а вот тут и вот тут могу себе это позволить. И все, никаких проблем.
2
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
29.05.2016, 11:04 15
Цитата Сообщение от hoggy Посмотреть сообщение
она целиком и полностью опирается на авторитет автора статьи
, который забыл подписаться.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.05.2016, 11:05 16
Цитата Сообщение от Renji Посмотреть сообщение
Вы полагаете что myVector.push_back(MyObject(1,2,3,4)) быстрее чем myVector.emplace_back(1,2,3,4)? Спешу вас огорчить, второй вариант будет быстрее.
а вы не спешите.
вы представьте формальные доказательства: замеры, ассмо-выхлоп.
вот тогда будет что обсуждать.

а покамест, я тоже могу мелом по воде:
шаблоно код inline во все поля,
а временный объект (как и вообще запуск конструктора копии)
может быть оптимизирован.

оба результата могут получиться одинаковыми.

и вот пока вы не скомпилируете оба кода,
и не сравните ассмо-выхлоп - вы не можете говорить наверняка.
0
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
29.05.2016, 17:10 17
Цитата Сообщение от hoggy Посмотреть сообщение
а вы не спешите.
А че тут спешить-то? И так все понятно. Оптимизации и уровни оптимизации конкретных компиляторов интересуют чуть менее, чем никак. Собираешь одним компилем - летает, переключил компилятор - лаг на лаге. Отлаживаешься в -O0 или собираешь стату по покрытию - тормозят абсолютно все. Нет, такой сказки нам не надо. Писать push_bask там, где можно emplace_back - это пессимизация от недостатка знаний или внимательности, только и всего.
1
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
29.05.2016, 17:12 18
лично я когда пришел на первое место практики, то пришлось иметь дело как раз с Verilog HDL... поэтому увидев призыв переходить с С++ на verilog какой-нибудь - ну я был в шоке честно говоря... настолько разные концепции языков и области применения. verilog языком то программирования назвать имхо нельзя - язык описания цифровой схемотехники тупо, не более; DSL фактически... после этого как-то под вопросом были эти "факты" о тормознутости шаблонов и т.д. Ну что хорошего из верилога я вынес - ну знать стал как работают дешифраторы всякие, компараторы, чем т-триггер отличается д-триггера... да и то уж забыл почти все)
1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.05.2016, 17:34 19
Цитата Сообщение от ct0r Посмотреть сообщение
Писать push_bask там, где можно emplace_back - это пессимизация от недостатка знаний или внимательности, только и всего.
я согласен, что использования эмплейса привентивно эффективнее.
и нет причин, использовать пуш,
если можно использовать эмплейс.

однако, я не согласен с пессимизацией.
недостаток знаний здесь может проявляться в том,
что исполнитель не в курсе, всяческих RVO/NRVO/copy elision

к тому же, там в статье приключился тезис,
согласно которому, способность inline подстановки в шаблонах - это миф.

но этому нет подтверждений.

мой тезис: вы сначала на практических примерах докажите,
что пуш от топового компилятора лососнет у эмплейса,
и только потом пессимизируйте.
1
19 / 19 / 6
Регистрация: 21.06.2015
Сообщений: 34
12.06.2016, 03:11 20
Действительно многие новые фичи С++ позволяют отстрелить себе ногу напрочь. И да, они могут быть менее производительны чем олдскульный С++ и тем более чем С.

Но это совсем не повод от них отказываться. Это классический вопрос преждевременной оптимизации.

Однако есть более существенная проблема: архитектура. И вот тут действительно, когда вопрос про нее нужно быть очень аккуратным.

Допустим я сомневаюсь что стоит завязывать процесс отрисовки кадра в игре на лямбды и предикаты.
Как я понимаю как-раз таки пытавшиеся это сделать и пришли в итоге к вот таким темам:
http://www.codeproject.com/Art... -Delegates

То есть по сути есть проекты которые пытаются переписать стандартные std::function по новому так чтобы побыстрее работало, причем им порой это удается (где то видел бенчмарки, сейчас ссылку сходу не дам).

Впрочем и такой подход тоже вполне применим.

Однако вся эта тема никак не связана с большой частью любой программы которая не лежит на критическом пути.
Даже в играх 90% кода наверняка можно и нужно писать с использованием всех последних веяний и это только улучшит проект.
1
12.06.2016, 03:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2016, 03:11
Помогаю со студенческими работами здесь

Какое условие использовать в конструкции switch ?
В изначальной идее было вывести выбранный вариант ответа радиопереключателя используя конструкцию...

Использовать переданный тип внутри метода в конструкции is Type
Ребята, никак не могу сообразить. Допустим, есть абстрактный класс A, от которого наследуются 3...

Как использовать тип char в конструкции switc-case?
При моем вводе ,выводит "Error : Not Found! . Помогите пожалуйста! #include <iostream> using...

Как правильно использовать переменную типа Color, полученную из GetPixel в конструкции If.Then?
Всем здравствуйте. Dim clr As Color = bmp.GetPixel(e.X, e.Y) ' предположим, что мы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru