Статья Making Haskell faster than C!
В статье приводится пример оптимизации кода на Haskell таким образом что его выполнение происходит быстрее чем выполнение кода написанного на С. Это было бы приятно и интересно...если бы исходный код на С и на Haskell был бы хоть примерно эквивалентен.
Задача простая - подсчет количества слов в файле. Слова - это части текста отделенные пробелами/табуляцией/переносом строк.
Вот исходный код на С:
int main() {
int i = 0;
int c, last_space = 1, this_space;
while ((c = getchar()) != EOF) {
this_space = isspace(c);
if (last_space && !this_space)
i++;
last_space = this_space;
}
printf("%i\n", i);
return 0;
}
Вот исходный код на Haskell:
main = print . length . words =<< getContents
С момощью оптимизатора автор добивается того чтобы код на Haskell выполнялся быстрее кода на С. Потрясающий результат, если бы не одно "но".
Программа на С сделана явно с одной целью - написать ее самым медленным способом. Как добиться того чтобы программа выполнялась максимально медленно? Найти самую медленную опрацию и испльзовать ее максимально часто. В данном случае самая медленная операция это чтение из файла/потока. Как использовать ее максимально часто? Читать посимвольно...
Это ясно и понятно большенству программистов на С\С++. Т.е. программисты на С\С++ видят что автор сделал совершенно некорректное сравнение. Сознательно сделав код на С максимально медленным. Автор жулик.... и неважно сделал он это сознательно или нет.
В результате вместо того чтобы заинтересовать программистов на С\С++ возможностями Haskell в частности и ФП в целом мы получаем отторжение.
Комментариев нет:
Отправить комментарий