Я был вдохновлен этим сообщением под названием « Интересны только быстрые языки », чтобы взглянуть на проблему, которую он предлагает (суммировать пару миллионов чисел из вектора) в Haskell, и сравнить к его результатам.
Я новичок в Haskell, поэтому я действительно не знаю, как правильно рассчитать время или как это сделать эффективно, моя первая попытка решить эту проблему была следующей. Обратите внимание, что я не использую случайные числа в векторе, так как не знаю, как это сделать правильно. Я также печатаю материалы, чтобы обеспечить полную оценку.
import System.TimeIt
import Data.Vector as V
vector :: IO (Vector Int)
vector = do
let vec = V.replicate 3000000 10
print $ V.length vec
return vec
sumit :: IO ()
sumit = do
vec <- vector
print $ V.sum vec
time = timeIt sumit
Загрузка этого кода в GHCI и выполнение времени
говорят мне, что для выполнения 3 миллионов номеров потребовалось около 0,22 секунды, а для 30 миллионов номеров - 2,69 секунды.
По сравнению с результатами авторов блогов 0,02 с и 0,18 с в Lush, это намного хуже, что заставляет меня думать, что это можно сделать лучше.
Примечание. Для выполнения приведенного выше кода требуется пакет TimeIt. Время установки Кабала - он
получит это за вас.