在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
功能版本运行速度较慢,编译时间也稍长。
我的问题是,是什么导致功能版本变慢?这是函数式风格所固有的还是由于编译器没有尽可能优化?