Сообщение Re[7]: Трюки с fold expression от 11.06.2020 5:38
Изменено 11.06.2020 5:48 rg45
Re[7]: Трюки с fold expression
Здравствуйте, _NN_, Вы писали:
_NN>>>
_NN>Проверенно на практике, компилятор гораздо охотнее оптимизирует линейный код из fold expression чем рекурсию.
Да кто же с этим спорит. Вопрос же в том, как выглядел код ДО этого. И вот оказывается, что тот код, который мы как бы улучшаем, полностью надуман.
_NN>К тому же есть возможность передать разные типы, а не только один как в случае с initializer_list.
Да как же ты передашь разные типы, если внутри функции все эти объекты все равно складываются в один initializer_list? У тебя это просто не скомпилируется.
_NN>Мы заменили рекурсивный код времён C++14 на fold expression и получили более быстрый код, а так же немаловажно, более быструю компиляцию.
Ну вот замена шаблонной рекурсии фолд экспрешенами — это хороший пример, тут я ничего против не имею. А вот замена циклов фолд экспрешенами притянута за уши.
P.S. Я против fold expressions ничего не имею, если что
_NN>>>
_NN>>>template <typename Pred, typename F, typename... Ts>
_NN>>>void call_if_not_predicate_v(Pred pred, F f, Ts... ts)
_NN>>>{
_NN>>> for (auto v : {ts...})
_NN>>> {
_NN>>> if (pred(v))
_NN>>> break;
_NN>>> f(v);
_NN>>> }
_NN>>>}
_NN>>>
_NN>Проверенно на практике, компилятор гораздо охотнее оптимизирует линейный код из fold expression чем рекурсию.
Да кто же с этим спорит. Вопрос же в том, как выглядел код ДО этого. И вот оказывается, что тот код, который мы как бы улучшаем, полностью надуман.
_NN>К тому же есть возможность передать разные типы, а не только один как в случае с initializer_list.
Да как же ты передашь разные типы, если внутри функции все эти объекты все равно складываются в один initializer_list? У тебя это просто не скомпилируется.
_NN>Мы заменили рекурсивный код времён C++14 на fold expression и получили более быстрый код, а так же немаловажно, более быструю компиляцию.
Ну вот замена шаблонной рекурсии фолд экспрешенами — это хороший пример, тут я ничего против не имею. А вот замена циклов фолд экспрешенами притянута за уши.
P.S. Я против fold expressions ничего не имею, если что
Re[7]: Трюки с fold expression
Здравствуйте, _NN_, Вы писали:
_NN>>>
_NN>Проверенно на практике, компилятор гораздо охотнее оптимизирует линейный код из fold expression чем рекурсию.
Да кто же с этим спорит. Вопрос же в том, как выглядел код ДО этого. И вот оказывается, что тот код, который мы как бы улучшаем, полностью надуман.
_NN>К тому же есть возможность передать разные типы, а не только один как в случае с initializer_list.
Да как же ты передашь разные типы, если внутри функции все эти объекты все равно складываются в один initializer_list? У тебя это просто не скомпилируется.
_NN>Мы заменили рекурсивный код времён C++14 на fold expression и получили более быстрый код, а так же немаловажно, более быструю компиляцию.
Ну вот замена шаблонной рекурсии фолд экспрешенами — это хороший пример, тут я ничего против не имею. А вот замена циклов фолд экспрешенами притянута за уши. Данная статья создает иллюзию, что, благодаря фолд экспрешенам, мы теперь можем отказаться от использования циклов. В то время как таких мест в реальном коде, где такая замена возможна, найдется крайне мало, если найдется вообще.
P.S. Я против fold expressions ничего не имею, если что
_NN>>>
_NN>>>template <typename Pred, typename F, typename... Ts>
_NN>>>void call_if_not_predicate_v(Pred pred, F f, Ts... ts)
_NN>>>{
_NN>>> for (auto v : {ts...})
_NN>>> {
_NN>>> if (pred(v))
_NN>>> break;
_NN>>> f(v);
_NN>>> }
_NN>>>}
_NN>>>
_NN>Проверенно на практике, компилятор гораздо охотнее оптимизирует линейный код из fold expression чем рекурсию.
Да кто же с этим спорит. Вопрос же в том, как выглядел код ДО этого. И вот оказывается, что тот код, который мы как бы улучшаем, полностью надуман.
_NN>К тому же есть возможность передать разные типы, а не только один как в случае с initializer_list.
Да как же ты передашь разные типы, если внутри функции все эти объекты все равно складываются в один initializer_list? У тебя это просто не скомпилируется.
_NN>Мы заменили рекурсивный код времён C++14 на fold expression и получили более быстрый код, а так же немаловажно, более быструю компиляцию.
Ну вот замена шаблонной рекурсии фолд экспрешенами — это хороший пример, тут я ничего против не имею. А вот замена циклов фолд экспрешенами притянута за уши. Данная статья создает иллюзию, что, благодаря фолд экспрешенам, мы теперь можем отказаться от использования циклов. В то время как таких мест в реальном коде, где такая замена возможна, найдется крайне мало, если найдется вообще.
P.S. Я против fold expressions ничего не имею, если что