cNoNim
> мне надо либо твой эрланг запустить либо тебе мой хаскель
Да думаю практически не зависит. У тебя же не селерон 600 :) Думаю железо одинаковое приблизительно. У меня тут Пентиум Дуал Коре на 2.52
entryway
сделай тогда уж fib 40 :) мне для 40 алгоритм на хаскеле давал не тот результат )
хотя это наверное изз того что я не понимаю что такое в erlange
-> ok
:)
entryway
у меня core i7 на 2
cNoNim
> сделай тогда уж fib 40 :) мне для 40 алгоритм на хаскеле давал не тот результат
http://prboom-plus.sf.net/clip/2011-09-26_15.21.26.png
Забей на ok. Это просто 'ok' в консоль, мол "готово".
Небось Erlang сольет.
http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&… mp;lang2=hipe
cNoNim
> у меня core i7 на 2
Сойдет. Давай первые 100к простых замеряй.
Теперь вечером ;) может какой нить online компилятор
Тока надо чтоб и то и то поддерживал
А как выглядит игровой цикл на хаскеле?
Chipmunk
> Есть ли смысл писать ммо сервер на ерланге?
и да, и нет.
тут нужно взвешивать за и против.
если браузерку - та да, ирланк ничуть не хуже петона.
если какой-нибудь ММОшутер, то скорее всего нет, либо делать критически важные к скорости участки в виде NIF'ов.
В хаскеле input, render будут грязными этапами игрового цикла
Поэтому в бой пойдут монады и геморрой, но в целом есть решения
Объясните, почему я не могу перехватить исключение нехватки памяти в ерланг.
Возьмем код генерации чисел Фибоначчи с предыдущей страницы и модифицируем его так, чтобы все найденные числа сохранялись в списке и попытаемся нагенерить 100k таких чисел.
Получаем такую картину:
Обернем все функции в try catch блок следующим образом:
-module(fib). -export([fib/1]). fib(N) -> try fib([], N, 1, 1) catch _:_ -> fail end. fib(List, 0, _, _) -> try lists:reverse(List) catch _:_ -> fail end; fib(List, N, F1, F2) -> try fib([F1 | List], N - 1, F2, F1 + F2) catch _:_ -> fail end.
Почему ерланг продолжает падать? Насколько я понял — сделать ничего нельзя. Как с этим в хаскеле?
entryway
> Почему ерланг продолжает падать? Насколько я понял — сделать ничего нельзя.
потому что версия Эрланга под windows делается и тестируется по остаточному принципу.
проверил работу "гениального" кода под виртуальной машиной Debian Linux, erl R14A, 2Gb памяти выделено под виртуалку - да, затупило, но выдало результат.
вывод: использовать Эрланг в родной для него среде.
и предупреждение на будущее: сеть в эрланге под виндовс тоже написана лишь бы как. если под линуксом используется epoll, то под виндовсом - только select (iocp пока никто не прикрутил).
ffinder
> проверил работу "гениального" кода под виртуальной машиной Debian Linux, erl
> R14A, 2Gb памяти выделено под виртуалку - да, затупило, но выдало результат.
Результат и у меня выдает. И даже сообщает о нехватке памяти. А потом erl.exe падает.
Падение повторяется не всегда. По шоту видно, что ерланг пытается выделить 400мб, но видимо из-за фрагментации иногда не получается.
ffinder
> вывод: использовать Эрланг в родной для него среде.
Мне кажется, что чтобы делать такие выводы ты должен добиться похожего сообщения об ошибке о нехватке памяти на твоей виртуалке ("помочь" может запуск несколько раз подряд или нескольких копий), но не получить падения оболочки.
entryway
В этом коде try/catch использованы неправильно, он вообще никаких исключений не словит.
А падать оно должно, поскольку удобнее, когда реакция на нехватку памяти всегда одна.
Можно попросить много памяти, и ее дадут. Но не факт, что ее всю можно использовать.
Если в нее достаточно много всего вписать (+ запустить сбоку пару новых процессов), то наша программа может оказаться наедине с пустыми обещаниями от ядра. В этом случае ядро без лишних вопросов убьет какой-то из процессов.
Если даже обрабатывать ошибку маллока, то что можно сделать без памяти с таким языком? Это же не С, который делает разворот на месте. Тут придется каждому актеру давать блок памяти на черный день. (и не забыть еще обработать рассмотренный ранее случай, когда ОСь просто убивает виртуальную машину)
Chipmunk
> В этом коде try/catch использованы неправильно, он вообще никаких исключений не
> словит.
Все там правильно
Programming Erlang by Joe Armstrong:
http://www.vigith.com/blog/erlang/tutorial/chapter-4
try Expr
catch
_:_ -> ... Code to handle all exceptions ...
end
this will catch all the exceptions, but if you replace _:_ with _ then only default throw will be caught.
Тема в архиве.