【问题标题】:Functional static typed languages and parallel computation函数式静态类型语言和并行计算
【发布时间】:2011-08-17 07:28:31
【问题描述】:

在我看来,静态类型和函数式语言非常适合并行计算。由于断言强类型约束(例如函数的功能纯度)应该很容易。此外,这些编程语言已经非常适合计算量大的程序类型,这些程序可以从数据并行中获得微不足道的好处。

然而,似乎除了 Haskell 之外,没有其他强类型函数式语言支持操作系统级线程来支持它们的并行性。事实上,Haskell 是当今唯一支持这类事情的语言,而且任何 ML 系列语言在其他静态类型语言中都不提供良好的线程支持吗?

【问题讨论】:

    标签: multithreading parallel-processing


    【解决方案1】:

    Frege,您可以使用fork/join Java API,这是一篇介绍它的博客文章:http://fregepl.blogspot.de/2011/09/parallelism-in-frege-employing-forkjoin.html

    【讨论】:

    • 这是一种有趣的语言,线程支持仍然很小,但可以接受,因为它似乎是一个接近的选择。此外,我发现 Rust 语言虽然处于 alpha 阶段,但有一些非常有趣的并行计算模型。
    【解决方案2】:

    我对 Haskell 了解不多,但我知道 Erlang 可以很好地处理并发性。然而,Erlang 是一种动态类型语言,并发是在编程语言中处理的,而不是在操作系统中处理的。

    它适用于并行编程,因为它创建了一组并行进程,这些进程可以通过消息传递进行交互,而无需使用锁。

    不熟悉Erlang的朋友,这里是link的语言介绍。

    还有Scala,它集成了函数式编程和面向对象编程的特性。 Scala 在 Java VM 上运行,线程使用基于事件的模型进行通信。这可能是您正在寻找的操作系统级线程的指标。此外,它还内置了对actor model 的支持。

    有一个关于 Scala 和多核系统的book,您应该看看。

    【讨论】:

    • 是的,erlang 是一种非常强大的静态类型语言,强大的 actor-model 线程将其他线程模型推到了后面。
    • @Arelius 我已经更新了我的答案以包括 Scala,这可能符合您的目的;)
    • 我的意思不是操作系统级别的线程,因为它需要存在一对一的关联,例如,Erlang 在这方面是合适的,因为它确实在操作系统中管理自己的线程。它还在后端使用操作系统线程来利用多个处理器。我的主要观点是将它与 OCaml 中的常见内容以及一些仅支持语言级别线程,而根本不支持 SMP 的 Scheme 区分开来。
    • @Arelius 我只熟悉操作系统级别支持线程的语言。有了这些,您就可以“轻松”并行思考。我同意你的观点,语言级别的线程会以自己的方式影响并行性。
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 2016-09-26
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多