В настоящее время я догоняю Haskell, и я до сих пор впечатлен. В качестве супер простого теста я написал программу, которая вычисляет сумму до миллиарда. Чтобы избежать создания списка, я написал функцию, которая должна быть хвостовой рекурсивной
summation start upto
| upto == 0 = start
| otherwise = summation (start+upto) (upto-1)
main = print $ summation 0 1000000000
запустив это с -O2, я получаю на моей машине время около ~ 20 секунд, что меня удивило, так как я думал, что компилятор будет более оптимизирован. Для сравнения я написал простую программу на С++
#include <iostream>
int main(int argc, char *argv[]) {
long long result = 0;
int upto = 1000000000;
for (int i = 0; i < upto; i++) {
result += i;
}
std::cout << result << std::end;
return 0;
}
компиляция с clang++ без оптимизации времени выполнения ~ 3 сек. Поэтому мне было интересно, почему мое решение Haskell так медленно. У кого-нибудь есть идея?
В OSX:
clang++ --version:
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.2.0
Thread model: posix
ghc --version:
The Glorious Glasgow Haskell Compilation System, version 7.10.3