Elm 中有并行性吗?

Is there parallelism in Elm?

是否可以在 Elm 中编写并行代码? Elm 是纯函数式的,所以不需要锁定。当然,我可以使用 Javascript FFI,在这里生成工人并自己完成。但是,我希望这样做对用户更友好 "way"。

简答

不,目前没有。但是下一个版本 (0.15) 版本将有新的方法来处理 Elm 内部的效果,因此您将需要使用 ports + JavaScript 更少的代码。因此,在下一个版本中,很可能有一种方法可以在 Elm 内部生成 worker。

更多背景

如果您喜欢冒险,请尝试阅读 published paper on Elm (or the longer original thesis),这表明 Elm 使用的 FRP 的原始风格非常适合细粒度并发。还有一个 async 构造,它可以以更粗粒度的方式分别构成程序 运行 的一部分。这可能是对 OS 级线程(如 JS Webworkers)和并行性的支持。

已有earlier experiments with Webworkers。社区内肯定对并发感兴趣,但 JavaScript 没有提供 (m) 任何好的并发选项。

有关本文的阅读技巧,请点击此处post of mine from the elm-discuss mailing list

If you want to know more about signals and opt-in async, I suggest you try Evan's PLDI paper on Elm. Read from the introduction (1) up to building GUIs (4). You can skip the type system (3.2) and functional evaluation (3.3.1), that may save you some time. Most in and after building GUIs (4) is probably stuff you know already. Figure 8 is probably the best overview of what the async keyword does (note that the async keyword is not implemented in the current Elm compiler).