【问题标题】:Haskell, FFI, and Grand Central Dispatch?Haskell、FFI 和 Grand Central Dispatch?
【发布时间】:2011-07-28 17:42:00
【问题描述】:

我正在考虑一种函数式语言,它可以很好地适应我在 FreeBSD、OSX、iOS 下的 C/Objective-C 环境。看起来我最好的选择是为特定函数创建函数式语言库,用 Haskell 编写,使用 GHC 编译,并使用 FFI 将此函数式代码作为标准 C 调用调用。

我的问题是,在这种情况下我该如何处理并发? 一个使用函数式语言的动机是,对于我想要对不可变数据集进行操作的问题,我想要进行大量并行化。但是,使用我在这里详述的方法,我会得到任何并行化吗?看来我可以编译并指定使用 2 个线程,但是有什么方法可以使用 GCD 而不是线程(出于所有原因 GCD 比线程更好,例如每个平台的并行化量自动缩放)?或者,像我描述的那样使用 FFI,我是否完全失去了多线程的能力?

这种语言似乎最适合我正在尝试做的事情,但我想在投入大量时间真正学习它之前了解它是否合适

【问题讨论】:

  • 你可以看看 Erlang 的并行和分布式函数式编程。
  • 您需要说明更多细节——您正在开发什么样的应用程序?您希望在 Haskell 与 C 中编写什么样的函数?您想利用什么级别的并行性?

标签: haskell multicore ghc grand-central-dispatch ffi


【解决方案1】:

GHC 的运行时取代了对 GCD 的需求,不是吗?它已经提供了跨平台的并行性。

【讨论】:

  • 是吗?具体如何?这叫什么,以便我可以找到有关它的更多信息?当我在我的代码中使用完全编译和静态链接的 w/runtime GHC 输出时,这种并行性是否会在我没有任何干预的情况下发生?
  • GHC 提供了丰富的运行时系统,支持many parallel and concurrent programming models。获得并行性的主要机制是通过explicit threading and locks,尽管您可以考虑使用 STM 而不是锁,或其他并行机制(例如 spark、数据并行性或 Par monad)。
  • 当你初始化运行时,你可以给它传递选项,包括要使用的功能数量:haskell.org/ghc/docs/7.0.2/html/users_guide/…
  • 只是想重申一下,我阅读了您所做的演示文稿,我发现它非常有启发性,看起来它确实完全回复了邮件。谢谢
猜你喜欢
  • 2012-05-09
  • 1970-01-01
  • 2012-11-27
  • 2023-03-07
  • 2023-03-25
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
相关资源
最近更新 更多