Haskell для сервера? - PullRequest
       7

Haskell для сервера?

31 голосов
/ 27 декабря 2008

Что касается создания игрового сервера, кажется, что Erlang всегда выступает как язык, «созданный для такого рода вещей» с его возможностями масштабирования и параллелизма. У меня нет опыта ни в Хаскеле, ни в Эрланге, но на первый взгляд они кажутся одинаковыми. Изучая документы Haskell, кажется, что он поддерживает многопроцессорную масштабируемость и параллелизм, и говорят, что Haskell является более надежным языком и имеет заметно лучшее сообщество. Мой вопрос, таким образом, считается ли Haskell таким же хорошим решением для построения сервера, как предположительно Эрланг?

Ответы [ 8 ]

54 голосов
/ 27 декабря 2008

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

Haskell выделяется при сложных символьных вычислениях и по состоянию на апрель 2009 года также может обрабатывать множество потоков (см. Обновление ниже). Более того, в Haskell есть больше инструментов для правильного сложного кода : такие вещи, как QuickCheck , SmallCheck и система статических типов. Так что, если ваш сервер делает сложные, интересные вещи, и вы можете обойтись только одним сервером, вам, вероятно, лучше с Haskell.


Обновление 13 апреля 2009 г. : надежный источник Дон Стюарт сообщает, что «последняя ошибка масштабирования потоков в компиляторе Glasgow Haskell была исправлена ​​несколько месяцев назад» и что некоторые пользователи сообщают об использовании миллион потоков Хаскеля без проблем. По состоянию на январь 2009 года у разработчиков появилась новая неопубликованная статья , в которой можно описать, как этого достичь.


Обновление 21 февраля 2012 г. : Компания Джона Хьюза, QuviQ , теперь делает QuickCheck для Erlang. Они нашли ряд очень интересных ошибок. Вы можете скачать QuickCheck Mini бесплатно; это сопоставимо с Haskell QuickCheck. Существует также более мощная коммерческая версия.

10 голосов
/ 27 декабря 2008
9 голосов
/ 27 декабря 2008

У меня нет опыта ни в Хаскеле, ни в Эрланге, но на первый взгляд они кажутся одинаковыми.

Есть несколько довольно резких различий между Хаскеллом и Эрлангом. Erlang специально разработан для параллельных систем. Язык и виртуальная машина предназначены для поддержки множества процессов, и Эрланг использует систему в стиле актера для управления связью между всеми ними. Haskell также довольно легко поддерживает параллелизм, из-за его функциональной природы, , но все еще немного сложнее выполнять параллельное программирование на Haskell, и язык специально не настроен для этого.

Как и Haskell, Erlang не разделяет состояние между процессами, поэтому легко писать многопроцессорные программы. Но стиль программирования между Haskell и Erlang немного отличается, так как Erlang подчеркивает использование небольших процессов для одновременной обработки.

Я люблю Haskell - это один из моих любимых языков - но если бы я собирался писать серверное программное обеспечение, я бы, вероятно, использовал Erlang. Но, безусловно, можно написать сервер на Haskell, если вы лучше знаете Haskell или считаете, что поддержка библиотеки выше.

8 голосов
/ 02 января 2009
7 голосов
/ 27 декабря 2008

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

Хотя я согласен с тем, что Haskell является более надежным языком и более приятным для программирования, Erlang намного проще и имеет много библиотек, специально предназначенных для таких применений.

Я не думаю, что есть Хаскелл, эквивалентный, скажем, Мнезии, и написать его будет сложно. Вы можете написать версии gen_server, gen_event и т. Д. На Haskell, но они не будут оптимизированы и настроены более десяти лет.

7 голосов
/ 27 декабря 2008

В прошлый раз, когда я смотрел, библиотеки и платформы для построения масштабируемых серверов в Erlang выглядели немного более зрелыми, чем для Haskell. Я бы посоветовал взглянуть на Программирование Erlang: Программное обеспечение для параллельного мира для получения информации о них.

4 голосов
/ 27 декабря 2008

Вопрос о том, насколько Хаскелл так же хорош, как Эрланг, зависит от того, что люди хотят от языка. Я думаю, что и то, и другое хорошо работает как игровой сервер, но это зависит главным образом от того, что вы хотите или ожидаете от языка программирования. Одно из самых простых отличий заключается в том, что Haskell - это язык статической типизации с выводом типа, а Erlang - язык динамической типизации. В целом, я бы сказал, что Haskell требует немного больше «изощренности» для тех, кто не привык к функциональному программированию.

2 голосов
/ 27 декабря 2008

Я уверен, что вы можете найти людей, которые так думают, но я думаю, что вы ошибаетесь в способности Эрланга поддерживать этот вид использования; он широко используется в приложениях телефонии и на самом деле довольно устойчив. Erlang очень оптимизирован для высоконадежных серверов с высоким уровнем параллелизма.

...