Фьючерсы в Haskell

Есть ли в Haskell эквивалент Алисы? способность связывать переменную с будущим?

val a = spawn foo;

где foo - некоторая функция.

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

12
задан Don Stewart 22 April 2011 в 18:26
поделиться

3 ответа

Вы можете использовать par из Control.Parallel как в

a `par` f a b c
where
  a = foo

Это намек среде выполнения на то, что a может быть выполнено в другом потоке.

15
ответ дан 2 December 2019 в 04:25
поделиться

Не в стандартной библиотеке, но

http://ghcmutterings.wordpress.com/2010/08/20/parallel-programming-in-haskell-with-explicit-futures/

data Future a = Future a

fork :: Eval a -> Eval (Future a)
fork a = do a' <- rpar (runEval a); return (Future a')

join :: Future a -> Eval a
join (Future a) = a `pseq` return a
7
ответ дан 2 December 2019 в 04:25
поделиться

Забавно, я как раз читал новый пост Саймона Марлоу: Параллельное программирование на Haskell с явными фьючерсами. Очевидно, он и другие работали над некоторыми новыми абстракциями параллельного программирования, которые должны быть более естественными и явными, чем API par и pseq.

12
ответ дан 2 December 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: