【发布时间】:2015-03-21 11:03:58
【问题描述】:
可以在 Elm 中编写并行代码吗? Elm 是纯函数式的,因此不需要锁定。当然,我可以使用 Javascript FFI,在这里派生工人并自己做。但是,我想要更多用户友好的“方式”。
【问题讨论】:
-
简短的回答是否定的。我可以给你写一个更长、更真实的答案,因为肯定还有更多要讲的。但我想知道,为什么需要并行性?
-
一些人工智能计算。
可以在 Elm 中编写并行代码吗? Elm 是纯函数式的,因此不需要锁定。当然,我可以使用 Javascript FFI,在这里派生工人并自己做。但是,我想要更多用户友好的“方式”。
【问题讨论】:
不,目前没有。但是下一个版本(0.15)版本将有新的方法来处理 Elm 内部的效果,因此您将需要更少地使用端口 + JavaScript 代码。所以很可能有一种方法可以在下一个版本中在 Elm 中生成工人。
如果您喜欢冒险,请尝试阅读 published paper on Elm(或更长的 original thesis),这表明 Elm 使用的 FRP 的原始风格非常适合细粒度并发。还有一个async 构造,它可能使程序的一部分以更粗粒度的方式单独运行。这可能是操作系统级线程(如 JS Webworkers)和并行性的支持。
已经有earlier experiments with Webworkers。社区中肯定有对并发的兴趣,但 JavaScript 并没有提供(m)任何好的并发选项。
如需阅读本文的提示,这里是post of mine from the elm-discuss mailing list:
如果您想了解有关信号和选择异步的更多信息,我建议您尝试 Evan 关于 Elm 的 PLDI 论文。从介绍 (1) 到构建 GUI (4)。您可以跳过类型系统 (3.2) 和功能评估 (3.3.1),这可能会节省您一些时间。大多数在构建 GUI 中和之后的内容 (4) 可能是您已经知道的内容。图 8 可能是对 async 关键字作用的最佳概述(请注意,当前 Elm 编译器中未实现 async 关键字)。
【讨论】: