1

В Rust by Example #36 сумма нечетных целых чисел до предела рассчитывается как в императивном стиле, так и в функциональном стиле.Накладные расходы в программировании функционального стиля

Я отделил эти два из и увеличил верхний предел 10000000000000000 и приурочены результаты:

императив стиль:

me.home:rust_by_example>time ./36_higher_order_functions_a 
Find the sum of all the squared odd numbers under 10000000000000000 
imperative style: 333960700851149440 

real 0m2.396s 
user 0m2.387s 
sys 0m0.009s 

Функциональный стиль:

me.home:rust_by_example>time ./36_higher_order_functions_b 
Find the sum of all the squared odd numbers under 10000000000000000 
functional style: 333960700851149440 

real 0m5.192s 
user 0m5.188s 
sys 0m0.003s 

функциональная версия работает медленнее а также требуется немного больше времени для компиляции.

Вопрос в том, что заставляет функциональную версию работать медленнее? Является ли это неотъемлемым элементом функционального стиля или связано с тем, что компилятор не оптимизирован так хорошо, как мог?

+4

Вы должны скомпилировать с оптимизацией (rustc -O ...) – Arjan

+3

Конечно. Теперь функциональный стиль немного быстрее. – user2664470

ответ

1

Что заставляет функциональную версию работать медленнее? Является ли это неотъемлемым элементом функционального стиля или связано с тем, что компилятор не оптимизирован так хорошо, как мог?

Как правило, компилятор преобразует более функциональную версию более высокого уровня/короче в императивную кодировку как часть генерации кода. Он также может применять оптимизацию, повышающую производительность.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^