【问题标题】:Futures in Haskell哈斯克尔的期货
【发布时间】:2010-08-21 12:47:57
【问题描述】:

Haskell 是否具有相当于 Alice 将变量绑定到未来的能力?

val a = spawn foo;

其中 foo 是一些函数。

我知道 Haskell 支持通道和线程;我希望语法和 Alice 一样自然,可以将值绑定到未来并生成线程来计算它,而无需处理细节。

【问题讨论】:

  • 不相关,但 Clojure 实际上也有这些。
  • 我自己从来没有研究过这个问题,但我怀疑惰性 IO 可以以一种非常简洁的方式做到这一点,尽管它可能有 unsafeInterleaveIO 在引擎盖下。

标签: haskell concurrency parallel-processing future alice


【解决方案1】:

您可以使用par 中的Control.Parallel,如

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

这是对运行时的提示,a 可以在另一个线程中进行评估。

【讨论】:

    【解决方案2】:

    有趣的是,我刚刚在阅读 Simon Marlow 的新帖子:Parallel programming in Haskell with explicit futures。显然,他和其他人一直在研究一些新的并行编程抽象,旨在比parpseq API 更自然和明确。

    【讨论】:

      【解决方案3】:

      不在标准库中,但

      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
      

      【讨论】:

      • "parallel" 是 Haskell 平台的一部分,常规的惰性期货 (par) 已经是其中的一部分。
      • 为什么标准库中没有这个Future api?这对我来说比 par 和 co 更容易推理。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多