2

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

1 回答 1

2

是什么导致功能版本变慢?这是函数式风格所固有的还是由于编译器没有尽可能优化?

通常,编译器会将更高级别/更短的功能版本转换为命令式编码,作为代码生成的一部分。它还可以应用可提高性能的优化。

如果编译器优化不佳或代码生成器不佳,则功能代码可能比手动编写的版本更差。

这真的取决于编译器。首先启用优化。

于 2014-12-31T12:17:56.010 回答