Фьючерс на Хаскелл - PullRequest
       47

Фьючерс на Хаскелл

12 голосов
/ 21 августа 2010

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

val a = spawn foo;

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

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

Ответы [ 3 ]

15 голосов
/ 21 августа 2010

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

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

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

12 голосов
/ 21 августа 2010

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

7 голосов
/ 21 августа 2010

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

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
...