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

Распределенный уровень Haskell в 2011 году?

Я прочитал много статей о распределенном Haskell. Проделана большая работа, но, похоже, она находится в области распределения вычислений. Я увидел пакет remote, который, похоже, реализует передачу сообщений в стиле Эрланг, но это 0,1 и ранняя стадия.

Я хотел бы внедрить систему, в которой есть много отдельных процессов, которые предоставляют разные службы и связаны друг с другом несколькими основными процессами. Это кажется естественным для Эрланг, но не для Хаскелла. Но мне нравится безопасность типа Haskell.

Было ли недавнее принятие управления процессами в стиле Эрланг в Haskell?

4b9b3361

Ответ 1

Если вы хотите узнать больше о пакете remote, aka CloudHaskell, см. статью, а также Джефф Эпштейн thesis. Он нацелен на то, чтобы обеспечить именно абстракцию актера, которую вы хотите, но, как вы говорите, она находится на ранних стадиях. Существует активная дискуссия об улучшениях в списке рассылки parallel-haskell, поэтому, если у вас есть особые потребности, которые remote не предоставляет, мы будем рады вам чтобы вскочить и помочь нам решить его будущие направления.

Более зрелым, но более низким уровнем, чем remote, является haskell-mpi. Если вы придерживаетесь интерфейса Simple, сообщения могут быть отправлены, содержащие произвольные Serialize экземпляры, но абстракция по-прежнему ниже, чем remote.

Существуют некоторые экспериментальные системы, например, описанные в разделе "Внедрение параллельной Haskell с распределенной памятью высокого уровня в Haskell" (Патрик Майер и Фил Триндер, IFL 2011, не могут найти PDF в Интернете). Он сочетает monad-par подход детерминированного потока данных parallelism с ограниченной способностью сделать I-структуры сериализуемыми по сети. Эти виды абстракции обещают сделать распределенные вычисления, но поскольку основное внимание уделяется вычислению чисто функциональных значений, а не обработке процессов в стиле Эрланга, они, вероятно, не будут хорошо подходят для вашего приложения.

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

Ответ 2

Я часто чувствую, что IPC и актеры - это функция перепроданности. Существует множество привлекательных систем обмена сообщениями, которые имеют привязки Haskell, например. MessagePack, 0MQ или Thrift. ИМХО, единственное, что вам нужно добавить, это правильная адресация процессов и определение того, кто/что управляет этой способностью адресации.

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

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

Вкратце: я бы, вероятно, увидел, может ли MessagePack или 0MQ соответствовать моим потребностям в Haskell и заботиться о остальном в моем коде.