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

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

Haskell родился до Интернета. Erlang от телекоммуникационной компании.

Flinkman 27.12.2008 13:05

Haskell был определен в 1990 году. C++ также был разработан телекоммуникационными компаниями.

Mark Cidade 27.12.2008 13:22
code.facebook.com/posts/745068642270222/…
nawfal 25.10.2015 05:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
31
3
9 714
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

ryeguy 27.12.2008 07:47

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

Ответ принят как подходящий

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

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


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


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

Можете ли вы привести доказательства в пользу своего утверждения о том, что Haskell быстрее ударится по тредам? Возможно, с потоками ОС ... но как насчет потоков Haskell?

ja. 27.12.2008 10:53

мой пузырь Erlang немного лопнул, когда я увидел это: nabble.com/Chameneos.rednux-micro-benchmark-td19925134.html ... Я проверил результаты на своих ящиках, и они верны, похоже, есть огромная проблема с масштабируемостью SMP и обменом сообщениями. Реализация GHC работает намного лучше ...

mjy 27.12.2008 18:22

@ja: Все мои доказательства получены из разговоров в коридоре с ребятами из Erlang и GHC в ICFP (icfpconference.org). Это правда, что ребята из GHC потратили последний год на подготовку к многоядерности и параллелизму, тогда как у меня сложилось впечатление, что Erlang сейчас находится в стадии коммерциализации.

Norman Ramsey 27.12.2008 23:28

Последняя (?) Проблема масштабирования потоков GHC была устранена несколько месяцев назад, и было несколько сообщений о более чем миллионе потоков без проблем. Тем не менее, Erlang уделяет больше внимания распределению, а не многоядерности с разделяемой памятью.

Don Stewart 13.04.2009 04:53

Думаю, я должен отметить, что в Erlang также есть Quickcheck, и он даже немного более развит, чем версия Haskell. И Erlang QC, и Haskell QC разрабатываются одним и тем же человеком, но теперь EQC стал даже коммерческим.

Magnus Kronqvist 27.11.2011 18:22

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

MathematicalOrchid 21.02.2012 19:07

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

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

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

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

К сожалению, статья Марлоу больше не является общедоступной.

palik 27.12.2018 00:41

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

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

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

Фактически, утечки памяти невозможно вызвать без использования FFI или чего-то подобного: вся память учитывается сборщиком мусора и может быть восстановлена. Вы имеете в виду «утечки пространства», что означает использование памяти для неоцененных преобразователей. Просто оцените их (или выбросьте) освободит память. Тем не менее, решение этой проблемы, поскольку она совершенно незнакома большинству программистов, сначала требует значительного объема работы, и вы должны спланировать ее.

cjs 18.05.2009 13:53

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

j_random_hacker 05.07.2010 14:20

I don't have experience in either Haskell nor Erlang, but on the surface they seem the same.

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

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

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

> На самом деле это язык логического программирования. Нет, это не так. Нет встроенного поиска, вы не можете работать с неинициализированными переменными, без полной унификации и т. д. Синтаксис прологичен, и сопоставление с образцом позволяет использовать одну и ту же переменную слева (не справа!) , но это функционально.

Alexey Romanov 27.12.2008 22:03

Другие вопросы по теме