LINUX.ORG.RU

erlang vs haskell vs ocaml for mmorpg


0

0

появилась необходимость написать mmorpg и решил опробовать что-нибудь функциональное, на первый взгляд идеально подходит erlang с его легкими потоками, но меня смущает динамическая типизация и скорость, судя по тестам он двум другим языкам проигрывает, на данный момент присматриваюсь к ocaml, тк мне он показался наиболее практичным, хотя очень понравился haskell, но как-то мне он кажется очень уж академичным

собственно на почве внутренних разногласий и решил поинтересоваться мнением сообщества, возможно кто-нибудь применял что-то подобное для аналоичных задач, было бы интересно послушать


А что подразумевается под MMORPG? Я несколько сомневаюсь, что там будет столько расчётов, что производительности erlang-а или haskell-а не хватит.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

мморпг - это будет сервер, который должен будет взаимодействовать с примерно 700-1000 игроками, расчеты конечно не сильно серьезные, но их много и критично время реакции сервера на действия игроков, на данный момент есть криво написанный вариант на с++ который прилично грузит проц, уже на 400 игроках да еще и падает постоянно

cvb
() автор топика

Если тебе нужно, чтобы оно работало - пиши на том, что лучше знаешь. Если нужно, чтобы было интересно - пиши на D, поможешь компилятор отладить, хоть какая-то польза...

tailgunner ★★★★★
()

Сервер - Java. Клиент - Python. После написания и отработки движков и протоколов, клиента можно попробовать переписать на C++ :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Legioner

>В ерланге есть какая то реалтаймовость, узкие места можно писать на С. Я бы попробовал, ради интереса.

да просто боюсь, как бы мой интерес боком невышел, да и литературы по ерлангу я как-то меьше встречал, потестирую его еще, может всетаки действительно стоит попробовать

cvb
() автор топика
Ответ на: комментарий от cvb

>на данный момент есть криво написанный вариант на с++ который прилично грузит проц, уже на 400 игроках да еще и падает постоянно

У нас L2Fortress, написанный на Java (+ скрипты на Jython и JBForth) не тормозил на 1000 онлайне. При 40 тыс. активных мобов в игре. Но это уже на приличном железе. Мой древний Xeon-1800 работал максимум с 140 игроками, загрузка была где-то процентов по 30.

KRoN73 ★★★★★
()
Ответ на: комментарий от tailgunner

>Если нужно, чтобы было интересно - пиши на D, поможешь компилятор отладить, хоть какая-то польза...

я невижу у D каких-нибудь преимуществ, перед перечисленными языками

cvb
() автор топика
Ответ на: комментарий от cvb

>> Если нужно, чтобы было интересно - пиши на D, поможешь компилятор отладить, хоть какая-то польза...

> я невижу у D каких-нибудь преимуществ, перед перечисленными языками

А можно спросить, каков твой опыт работы с Erlang, Ocaml, Haskell? Насчет D - я не говорил о преимуществах, а только о том, что ваша работа будет интересной (ловить глюки в сыром компиляторе - это круто!) и полезной - отловленные вами глюки будут исправлены.

tailgunner ★★★★★
()
Ответ на: комментарий от KRoN73

>У нас L2Fortress, написанный на Java (+ скрипты на Jython и JBForth) не тормозил на 1000 онлайне. При 40 тыс. активных мобов в игре. Но это уже на приличном железе. Мой древний Xeon-1800 работал максимум с 140 игроками, загрузка была где-то процентов по 30.

да как-то java, хоть и ентерпрайз, но мне все больше нравятся функциональные языки

кстати на данный момент все крутится на Intel(R) Xeon(TM) CPU 2.80GHz которых 2, но имеющийся с++ код никто не респаралеливал:(

cvb
() автор топика
Ответ на: комментарий от cvb

>я невижу у D каких-нибудь преимуществ, перед перечисленными языками

Производительность + нативная линковка с кучей Си-шных либ + более привычная идеология :)

KRoN73 ★★★★★
()
Ответ на: комментарий от tailgunner

>А можно спросить, каков твой опыт работы с Erlang, Ocaml, Haskell?

очень маленький, именно по этой причине я и выбираю функциональный язык, потому как других средств получения экспириенса непредстваляю

>Насчет D - я не говорил о преимуществах, а только о том, что ваша работа будет интересной (ловить глюки в сыром компиляторе - это круто!) и полезной - отловленные вами глюки будут исправлены.

проблема в том, что к моим глюкам добавятся еще и глюки компилера и совсем не гарантированно, что сами разработчики сразу кинутся их исправлять, а мне + ко всему надо чтобы моя софтина еще и работала, еслибы just fot fun, то я бы может и попробовал, но это не тот случай

cvb
() автор топика
Ответ на: комментарий от anonymous

> Лаги в джите.

Поясни.

Вообще, расскажи подробнее, если в курсе. А то у нас в OpenWorlds сейчас Питон только в клиенте будет, сервер изначально на Java планируется, как и L2Fortress. Но питоновское лобби сильное ;)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>Производительность + нативная линковка с кучей Си-шных либ + более привычная идеология :)

с производительностью и у оcaml неплохо, да и у ghc, сравнивал с gcc

с либами в ocaml тож проблем нет, а насчет идеологии - всегда полезно попробовать что-то новое

cvb
() автор топика
Ответ на: комментарий от cvb

>> А можно спросить, каков твой опыт работы с Erlang, Ocaml, Haskell?

> очень маленький

Понятно.

> ко всему надо чтобы моя софтина еще и работала, еслибы just fot fun, то я бы может и попробовал, но это не тот случай

Но ты тем не менее хочешь сделать реализацию на языке, которого не знаешь (и, более того, в парадигме, которой не знаешь)? Я не понимаю твоей логики.

tailgunner ★★★★★
()
Ответ на: комментарий от KRoN73

Jita - это не то, что вы вероятно думаете, это густонаселённая солнечная система, своего рода торговый центр с локалом 600-800 человек 24 часа 7 дней в неделю

anonymous
()
Ответ на: комментарий от tailgunner

>Но ты тем не менее хочешь сделать реализацию на языке, которого не знаешь (и, более того, в парадигме, которой не знаешь)? Я не понимаю твоей логики.

на осмысление парадигмы я уже потратил достаточно времени, и успел поработать с лиспом, сейчас я просто хочу выбрать наиболее эффективный инструмент из 3х перечисленных с условием поставленной задачи, чего в моей логике такого непонятного?

cvb
() автор топика

Сервер -- на erlang/haskell + c. Достаточно практично. Как раз ocaml брать не порекомендую -- сейчас за ним стоит сравнительно небольшое коммунити, скорее всего будет во многих местах тяжко.

pierre
()
Ответ на: комментарий от cvb

>на осмысление парадигмы я уже потратил достаточно времени, и успел поработать с лиспом, сейчас я просто хочу выбрать наиболее эффективный инструмент

В таком случае интересно было бы услышать, почему в этом списке из 3-х языков нет Лиспа. Из всех упомянутых языков лично я больше знаком с Лиспом и его же выбрал бы для проекта. Итак, чем Лисп хуже них - медленно? плохая реализация потоков? сокетов? ещё что-то?

seiken ★★★★★
()

Erlang вообще отнесён к функциональным по недоразумению. Он объектный.

Miguel ★★★★★
()

Я бы делал всю логику на erlang, а узкие места (если бы были) на C или OCaml. В erlang очень хорошо с распараллеливанием и не будет проблем раскидать приложение по нескольким физическим серверам.

Если нет экспириенса в ерланге, то не помешает его для начала получить, дабы правильно спроектировать. А то есть вероятность, что ты напишешь сиплюсплюсное приложение, используя синтаксис ерланга. У него самое ценное - это виртуальная машина.

anonymous
()
Ответ на: комментарий от KRoN73

> Сервер - Java. Клиент - Python. После написания и отработки движков и протоколов, клиента можно попробовать переписать на C++ :)

Сервер нужно писать на ALGOL-е, а клиент - на FORTRAN-е!!! После написания и отладки, клиента можно попробовать переписать на BASIC

anonymous
()
Ответ на: комментарий от tailgunner

> Если тебе нужно, чтобы оно работало - пиши на том, что лучше знаешь. Если нужно, чтобы было интересно - пиши на D, поможешь компилятор отладить, хоть какая-то польза...

Какая тут польза, компилятор мертворожденного языка, кому он нужен?

fmj
()
Ответ на: комментарий от fmj

> компилятор мертворожденного языка, кому он нужен?

Чё, правда мертворожденного? Сам роды принимал?

По данным TIOBE: D - 12 место, Haskell - 24, Erlang - 40, ML - 42. D обходит все предложенные OP языки _в сумме_ почти в 3 раза.

Так что хреновый ты акушер...

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

По-моему, тут двух мнений быть не может. MMORPG подразумевает одновременную поддержку множества клиентских сессий, а это именно то, для чего и придуман Эрланг. Там и легковесные процессы из коробки со всеми плюшками и синтаксическим сахаром, и кластеризация, и горячее обновление... В общем, если есть сомнения, поделать туториалы, а потом попробовать те же самые задачки порешать хоть на D, хоть на чём другом. Все вопросы отпадут сами собой.

Отдельные узкие места, если они будут, потом переписать хоть на C, хоть на чёрте лысом, дело вкуса.

anonymous
()
Ответ на: комментарий от tailgunner

> пиши на D, поможешь компилятор отладить, хоть какая-то польза

Лол, ты сделал мой день.

- Чем лучше выкопать траншею сложного профиля, лопатой или экскаватором?

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

anonymous
()
Ответ на: комментарий от seiken

>В таком случае интересно было бы услышать, почему в этом списке из 3-х языков нет Лиспа. Из всех упомянутых языков лично я больше знаком с Лиспом и его же выбрал бы для проекта. Итак, чем Лисп хуже них - медленно? плохая реализация потоков? сокетов? ещё что-то?

потому что хочется статической типизации,а ерланг тут потому что он меня заинтересовал

cvb
() автор топика
Ответ на: комментарий от anonymous

> По-моему, тут двух мнений быть не может.

Ты это скажи OP.

> это именно то, для чего и придуман Эрланг.

Да ради бога, я не против Эрланга. ИМХО, начинать писать ответственный проект на языке, которого не знаешь - это дурь, но у других может быть другое мнение.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>> пиши на D, поможешь компилятор отладить, хоть какая-то польза

> Лол, ты сделал мой день.

Смейся, анонимный брат. Смех продлевает жизнь.

> Чем лучше выкопать траншею сложного профиля, лопатой или экскаватором?

> Попробуй бензопилой, она лучше пилит, чем простая ножовка

Там, где тебя учили, тебе сказали, что доказательство по аналогии является мошенничеством?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Да никто тебе ничего не собирался ничего доказывать, лол, так, проняло твоего покорного слугу до колик, вот и решил поблагодарить за 5 минут здорового смеха.

anonymous
()
Ответ на: комментарий от pierre

>Сервер -- на erlang/haskell + c. Достаточно практично.

и всетаки, что для данной задачи будет иметь больше поюсов, erlang или haskell?

>Как раз ocaml брать не порекомендую -- сейчас за ним стоит сравнительно небольшое коммунити, скорее всего будет во многих местах тяжко.

неожиданный поворот событий, мне почему-то казалось наоборот

cvb
() автор топика
Ответ на: комментарий от anonymous

> проняло твоего покорного слугу до колик

береги себя

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>По-моему, тут двух мнений быть не может. MMORPG подразумевает одновременную поддержку множества клиентских сессий, а это именно то, для чего и придуман Эрланг.

MMORPG-сервер - это в первую очередь не проблема числа соединений, а очень ресурсоёмкие вычисления. Взаимная видимость объектов, коллизии, геодата и искуственный интеллект.

KRoN73 ★★★★★
()

Я пишу MMORPG на Scheme (сервер). Часть, отвечающая за сокеты и процессы написана на Си.

Клиент на Си.

xTERM ★★
()
Ответ на: комментарий от cvb

В Erlang OTP R12 добавили типизацию. К сведению.

anonymous
()
Ответ на: комментарий от anonymous

>Там и легковесные процессы из коробки со всеми плюшками и синтаксическим сахаром

Мне хватило vfork() - один единственный вызов и вся многопоточность была готова)))

xTERM ★★
()
Ответ на: комментарий от KRoN73

> , а очень ресурсоёмкие вычисления. Взаимная видимость объектов, коллизии, геодата и искуственный интеллект.

Т.е. лиспу альтернативы тут нет? Или ocaml все же сойдет для сельской местности?

anonymous
()
Ответ на: комментарий от KRoN73

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

anonymous
()

1. Erlang + HIPE по производительности рвёт Haskell как носовой платок.
2. Erlang создавался для подобных вещей. До нескольких сот тысяч одновременно работающих клиентов - где такое можно увидеть ещё?
3. Неплохо проработана инфраструктура языка. Также созданию языка предворяло несколько лет исследований в области разработки ПО. Сравнивались между собой различные методы и подходы в программировании. И постарались учесть все эти вещи так, чтобы количество возможных ошибок, возникающих при программировании, было минимальным.
4. Хорошо проработаная и великолепно реализованная сетевая подсистема.
5. Очень быстрый сборщик мусора. Никаких стопвордов и тому подобного непотребства.
6. Встроенная кластеризация.
7. Отказоустойчивость.
8. Mnesia. Всё, что можно творить с её помощью, я даже представить себе боюсь.
9. Не уверен, что стоит об это говорить в контексте mmorpg, но очень удобная работа с бинарными форматами.

В общем для серверной части mmorpg практически безальтернативное решение. Основные источники информации - диссертация Армстронга, Concurrent Programming in Erlang и встроенная документация. Язык очень простой, чтобы начать программировать на нём, достаточно 2-3 дня (при условии, что функциональный подход не в новинку).

Минусы: Мало библиотек. Получить помощь от рускоговорящего человека сложно (из рускоязычных мест скопления эрлангистов можно назвать разве что rsdn.ru/Декларативное программирования, erlang.dmitriid.com и erlang@conference.jabber.ru).

Пара ссылок почти в тему:
http://www.devmaster.net/articles/mmo-scalable-server/
http://wagerlabs.com/
ну и:
http://www.trapexit.org/
http://www.erlang-projects.org/
http://www.planeterlang.org/

anonymous
()
Ответ на: комментарий от anonymous

> 1. Erlang + HIPE по производительности рвёт Haskell как носовой платок.

Что ж он STMку хаскельную в шутауте не рвет? :-)

> 7. Отказоустойчивость.

Отказоустойчивость там, должно быть, высокая, но как быть с динамической типизацией? Лично я как-то из-за нее побаиваюсь ерланга, впрочем, возможно что зря.

> 8. Mnesia. Всё, что можно творить с её помощью, я даже представить себе боюсь.

Аналоги в хаскеле имеются в рамках happs

По остальным пунктам не в курсе, поэтому соглашусь :-)

pierre
()
Ответ на: комментарий от anonymous

>Erlang создавался для подобных вещей. До нескольких сот тысяч одновременно работающих клиентов - где такое можно увидеть ещё?

Для MMORPG? Он что, на порядок круче C++? На котором невозможно реализовать на доступном железе и несколько десятков тысяч взаимодействующих чаров :)

...

Повторюсь, сеть тут - дело десяток.

Erlang нужен когда клиентов - сотни тысяч, но вычислений они не требуют.

KRoN73 ★★★★★
()

> но меня смущает динамическая типизация

В erlang есть статическая типизация.

stassats ★★★★
()
Ответ на: комментарий от tailgunner

>> компилятор мертворожденного языка, кому он нужен? Чё, правда мертворожденного? Сам роды принимал?

>По данным TIOBE: D - 12 место, Haskell - 24, Erlang - 40, ML - 42. D обходит все предложенные OP языки _в сумме_ почти в 3 раза.

>Так что хреновый ты акушер...

Чета я только не видел ни одного ни крупного OpenSource проекта на D, ни коммерческой его эксплуатации (и никогда не увижу, ибо он будет вечно сырой и глючный). а то, что его толпа красноглазых использует, ни о чем, абсолютно, не говорит.

fmj
()
Ответ на: комментарий от KRoN73

> Для MMORPG? Он что, на порядок круче C++?

Если тебе нужно распараллелить задачу, то лучше. Какой (или чего ?) прирост тут можно получить с помощью С ?

> Erlang нужен когда клиентов - сотни тысяч, но вычислений они не требуют.

Почему обязательно 1 клиент - 1 поток ? У меня может быть 1 клиент, и 1к потоков, которые будут рождаться и умирать с бешеной скоростью.

А что вообще в MMORPG можно распараллелить ? Можно мир - несколько процессов, NPC, итп - для каждого свой процесс ?

halflife ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.