Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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


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


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

Ответ 2

Тесты этих работ показывают, что Haskell может конкурировать с Apache:

Разработка высокопроизводительного веб-сервера в Concurrent Haskell
- Саймон Марлоу

Объединение событий и потоков для масштабируемых сетевых сервисов: Реализация и оценка монадических, Прикладные уровни Concurrency Примитивы
- Пэн Ли Стефан А. Здансивич (см. Рис. 19)

Ответ 3

У меня нет опыта ни в Haskell, ни в Erlang, но на поверхности они кажутся одинаковыми.

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

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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