?

Log in

No account? Create an account
Main

Haskell, performance

Пока что я просто восхищен хаскельной декларативностью и мне в реальной жизни не надо на нем ничего писать, однако чувство того, что я не понимаю, что там внутри временами гложет.

Вот на Си++ я примерно понимаю что происходит. Да, оптимизатор может сильно изменить мою программу при компиляции, но все же более-менее понятно как все работает.

В интерпретируемых языках все менее прозрачно, например может быть такой эффект:
В нашем движке, экспортированные из C++ для python 3d-вектора имеют методы length и lengthSquared. И в документации постулируется, что лучше вызывать lengthSquared когда надо сравнить длины векторов, типа это быстрей и корень не извлекается. Проверил это, и получил сюрприз - lengthSquared оказался на 5% медленней чем length. Объяснение простое - все поля/методы объекта в python это строки в хеш-таблице. Строка "lengthSquared" длинней чем "length". И суета с длиной идентификатора в хеш-таблице оказалась важней чем наличие квадратного корня. Вывод - в динамическом ЯП неважно что звать, вычисление "сложного" синуса или тупое сложение. Если хотим выжать сколько-то (десятков) процентов скорости не переписывая на C - стоит класть методы объектов в локальные переменные, ls = Point3d.lengthSquared; ls(dir1) < ls(dir2);

Тем не менее можно докопаться, открыв исходники интерпретатора.

Что происходит в недрах хаскелла моему мозгу пока непостижимо. Понятно, что есть книжка о том, как оно устроено внутри:
The Implementation of Functional Programming Languages

но мне бы сначала с языком разобраться. В Си++ понимание того, что происходит приходило по мере изучения самого языка, а тут такого нет.

Имеется набор инструментов для оценки производительности, но все же ответ на вопрос "где тормозит?" дать непросто.

Вот тут, например, что тормозит?
http://jdevelop.livejournal.com/1871816.html
Tags:

Comments

SQL тоже декларативный язык. Но, когда дело доходит до оптмизиации, все бегут расставлять optimizer hints. Поэтому я не верю особо в эту декларативность.

Re: Поэтому я не верю особо в эту декларативность.

Никаких сайд-эффектов!!!


Монады - сами пришли...

Re: Поэтому я не верю особо в эту декларативность.

Это правда. Но, когда дело доходит до выжимания производительности, с сайд эффектами приходится иногда мириться.

Re: Поэтому я не верю особо в эту декларативность.

"...Я и сама его принимаю..."

А ты что-нибудь на Хаскеле пишешь?
Эрлаг - используешь?
Окалм - окаймил?

У меня, к сожалению, дальше этого предложения так и не пошло... :-(

Re: Поэтому я не верю особо в эту декларативность.

У меня пока другие задачи. Я в последнее время алгоритмы программирую. И даже 30% замедление работы сервера может быть проблематичным, потому как у нас может не быть столько слотов под компьютеры в продакшене. Хотя на свиноферме буквально сотни работают.
у SPJ есть более поздние публикации, они там многое меняли.

http://research.microsoft.com/en-us/um/people/simonpj/papers/papers.html#compiler