我读了很多关于分布式Haskell的文章。已经有很多工作在分布计算领域完成,但看到remote包实现了类似Erlang消息传递的功能,不过它仅处于0.1版本和早期阶段。
我想实现一个系统,在该系统中存在许多提供独立服务的单独进程,并由多个主要进程相互连接。这似乎是Erlang的天然选择,但对于Haskell来说则不然。但我喜欢Haskell的类型安全性。
最近Haskell是否采用了Erlang风格的进程管理?
我读了很多关于分布式Haskell的文章。已经有很多工作在分布计算领域完成,但看到remote包实现了类似Erlang消息传递的功能,不过它仅处于0.1版本和早期阶段。
我想实现一个系统,在该系统中存在许多提供独立服务的单独进程,并由多个主要进程相互连接。这似乎是Erlang的天然选择,但对于Haskell来说则不然。但我喜欢Haskell的类型安全性。
最近Haskell是否采用了Erlang风格的进程管理?
remote
包(又名 CloudHaskell),请参阅该论文以及 Jeff Epstein 的论文。它旨在提供你需要的 actor 抽象,但正如你所说,它仍处于早期阶段。关于改进方面有活跃的讨论在parallel-haskell 邮件列表上进行,因此如果你有remote
没有提供的特定需求,我们很乐意让你加入并帮助我们决定其未来的发展方向。remote
更成熟但更低级别的是haskell-mpi
包。如果您使用 Simple
接口,可以发送包含任意Serialize
实例的消息,但抽象程度仍然远低于remote
。monad-par
的确定性数据流并行处理方法,以及在网络上对I结构进行序列化的有限能力。这些类型的抽象对于进行分布式计算很有前途,但由于重点是计算纯函数值而不是提供 Erlang 风格的进程,因此它们可能不适合您的应用程序。此外,为了完整起见,我应该指出Haskell维基百科页面上有关于云和高性能计算Haskell的内容,涵盖了我在这里描述的内容,以及分布式Haskell的子部分,似乎需要更新。
我经常感觉IPC和actors是被过度推销的功能。有很多吸引人的消息传递系统,例如MessagePack,0MQ或Thrift都有Haskell绑定。在我看来,你需要添加的唯一东西就是适当地处理进程地址并决定谁/什么管理这个地址能力。
顺便说一下:许多编码人员将例如0MQ纳入他们的Erlang环境中,仅仅因为它提供了通过消息代理结构化消息的可能性,而不是依赖于超级规模的进程到进程的消息传递。
在“大规模多核世界”中,我个人认为共享内存方法最终将优于消息传递。当然,有人可以反驳异步性。但是,当您写下要通过“几个主要进程”“连接”您的进程时,实际上您正在谈论同步。此外,您当然可以挑战单个函数,进程或线程是否是正确的并行化水平。
简而言之:我可能会看看在Haskell中MessagePack或0MQ是否能够满足我的需求,并在我的代码中处理其余部分。