Фьючерсы в Haskell
-
30-09-2019 - |
Вопрос
У Haskell есть эквивалент способности Алисы связывать переменную к будущему?
val a = spawn foo;
где foo есть некоторая функция.
Я знаю, что Haskell поддерживает каналы и потоки; Я надеюсь на синтаксис естественным, чем Алиса, чтобы связать значение в будущем и порождать нить, чтобы рассчитать его, не имея дело с деталями.
Решение
Вы можете использовать par
от Control.Parallel
как в
a `par` f a b c
where
a = foo
Это намек на время выполнения, которое a
можно оценить в другом потоке.
Другие советы
Смешно, я просто читал новый пост Саймона Марлоу: Параллельное программирование в Haskell с явными фьючерсами. Отказ По-видимому, он и другие работают над новыми параллельными абстракциями программирования, которые предназначены для более естественного и явного, чем par
а также pseq
Апис
Не в стандартной библиотеке, но
http://ghcmutterings.wordpress.com/2010/08/20/parallel-programming-in-haskell-with-xplicit-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