Ответ на бнопню по C++

Oct 03, 2016 22:42

Код, который напрямую зовёт std::vector{std::move(foo)} на данных в ощущениях компиляторах (gcc, clang) будет медленнее, чем construct_vector(std::move(foo)), где:

std::vector construct_vector(Foo && foo) {
std::vector vec;
vec.emplace_back(std::move(foo));
return vec;
}Почему это так случается? Из-за отсутствия оптимизации std:: ( Read more... )

Leave a comment

Comments 58

spamsink October 4 2016, 06:05:35 UTC
На мобилке производительность очень даже нужна, потому что любая потеря в производительности - это потеря во времени жизни мобилки.

Reply

lionet October 4 2016, 06:16:25 UTC
Мобилка в основном тратит время, ожидая инпута, и жря батарейку на поджигание экрана или вещание через wifi. Количество циклов процессора, которое он тратит после того, как ты нажал пальцем на контрол, неважно. За исключением игр, ничего ты батарейке не сделаешь, оптимизируя свифт сиплюсплюсом.

Reply

spamsink October 4 2016, 06:27:15 UTC
Сейчас в каждой мобилке столько background процессов, активирующихся по каждому потряхиванию, изменинию координат, уровня сигнала, и т.д., и т.п., что эффективность реализации всех этих процессов может оказать заметное влияние.

Reply

lionet October 4 2016, 06:44:40 UTC
Неа. Главное, если не игра - подсветка в мобилке, и сеть. Когда мобилка в кармане, практически ничего не жрет, кроме нетворка (жрет радиомодулем).

Reply


Жизненный цикл bik_top October 4 2016, 06:34:23 UTC
> не смогли понять жизненный цикл - тоже на всякий случай скопируем

А что насчёт Rust?

> Типичный C++, что ни фича, то засада.

Type Inference is awesome.

Reply

Re: Жизненный цикл lionet October 4 2016, 06:46:25 UTC
> А что насчёт Rust?

1. Я не настоящий сварщик.
2. Rust популярен в узких кругах, но мертв чуть менее, чем D.

> Type Inference is awesome.

Расскажите это Хиндли или Милнеру.

Reply

Re: Жизненный цикл lionet October 4 2016, 07:05:36 UTC
Только увидел ссылку. Агонь!

Reply

Re: Жизненный цикл mpd October 4 2016, 07:44:11 UTC
Кстати, да, у тебя такой стиль журнала, извини, что ссылки - не видны. :-(
Это - специально сделано, что б ты и сам - не замечал? ;-)

Reply


dmzlj October 4 2016, 07:05:05 UTC
Но почему тогда не Си? В нём понимать надо значительно меньше.

Reply

lionet October 4 2016, 07:07:58 UTC
1. Инлайнинга больше. Поэтому потенциал для ускорения гораздо больше. Ведь весь современный C++ происходит в заголовках, и инлайнится друг с другом, без стыда и зазрения.

2. Абстракции можно накрутить довольно приятные..

Reply

dmzlj October 4 2016, 07:14:27 UTC
1. В Си тоже можно инлайнить! Правда, без типов...

2. Нагенерить из DSL из настоящих абстракций!

Reply


levgem October 4 2016, 07:25:38 UTC
Ты какую-то бизнес-логику пишешь или обвязку? Как часто дедлоки или ливлоки хватаешь?

Reply

lionet October 4 2016, 08:00:28 UTC
Всё пишу (пишем). Практически никогда не хватаем дедлоков, потому что однотредовое: по треду на ядро. Минимум синхронизации.

Reply


Re: «почему C++» (mpd) — это было не моё решение mpd October 4 2016, 08:34:30 UTC
Большое спасибо за отдельный ответ! Я уже думал, что - сознательно игнорируешь.

> Только если действительно понимать, что происходит

Вот, зря ты так говоришь!!!
Это же можно понять так, что ты популяризируешь идею что не надо ничего понимать, среда-компилятор-утилиты - всё за тебя решат! (и это говорит человек, который отключает подсветку в редакторе, чтобы держать всё в голове!!!)

Например, я - не знаю Erlang, Вики - это не всегда хорошо, но даже там пишут, что бездумно писать на этом языке - не совсем хорошо:Эффективность
Как и многие другие языки программирования, Erlang имеет свои секреты написания эффективного кода. Совершенствование языка делает некоторые из трюков устаревшими, поэтому документация является лучшим руководством в вопросах оптимизации, в совокупности с профилированием и стресс-тестированием ( ... )

Reply

Re: «почему C++» (mpd) — это было не моё решение lionet October 4 2016, 16:08:16 UTC
Если не понимать, что происходит, в эрланге, часто получается просто немного медленнее, и, реже, подглючивает для какого-то юскейса.

Если не понимать, что происходит, в C++, получаются периодические краши (факап для всех клиентов сразу) и дырки в безопасности.

Qualitatively, конечно.

Reply

Re: «почему C++» (mpd) — это было не моё решение mpd October 4 2016, 17:13:38 UTC
Т.е., оглядываясь назад, ты всё же советуешь обратить внимание на Эрланг?

А - Haskell? Почему в http://lionet.livejournal.com/139828.html?thread=4604468#t4604468 zyxman скептически отозвался о нём?

Objective-C - извини, я сам - не хочу.

Ну и, насколько я понимаю, в сухом остатке, Си++ - не мёртв? ;-)

Reply

Re: «почему C++» (mpd) — это было не моё решение lionet October 4 2016, 18:30:38 UTC
Ну надо отличать троллинг от рабочих моментов. Я C и C++ знаю, скажем так, получше, чем многие. Когда я говорю, что он мёртв и нужно изучать тот же хаскель, то хуже всего, что может придумать какой-нибудь монокультурный PHP-шник - это бросаться изучать хаскель.

И да, Erlang и Haskell - их нужно изучать. Что в продакшне потом использовать - зависит от задач. Изучи Haskell, потом возьми Swift и херач - и то больше пользы будет, чем если сразу фигачить на Swift'е.

Reply


Leave a comment

Up