Bol*_*eth 26 serialization distributed haskell deserialization
最好的方法是获取函数的表示(如果它可以以某种方式恢复).出于效率原因,优选二进制序列化.
我认为有一种方法可以在Clean中实现,因为实现iTask是不可能的,因为当服务器再次运行时,依赖于任务(以及其他功能)可以保存并继续.
这对于分布式haskell计算必不可少.
我不打算在运行时解析haskell代码,如下所述:Haskell中的函数序列化.我还需要序列化而不仅仅是反序列化.
aug*_*tss 28
不幸的是,使用当前的ghc运行时系统是不可能的.函数和其他任意数据的序列化需要一些ghc实现者不愿意添加的低级运行时支持.
序列化函数要求您可以序列化任何内容,因为任意数据(已评估和未评估)可以是函数的一部分(例如,部分应用程序).
Rob*_*art 22
不会.然而,CloudHaskell项目正在推动对GHC中显式关闭序列化支持的需求.CloudHaskell与显式闭包最接近的是分布式静态包.另一种尝试是HdpH闭包表示.但是,两者都使用了模板Haskell,就像Thomas 在下面描述的那样.
限制是GHC缺乏静态支持,目前尚未获得GHC门票.(任何接受者?).已经有一个讨论什么静态支持其实应该看起来像CloudHaskell邮件列表上,但没有还没有就我知道的进展.
最接近设计和实现的是Jost Berthold,他在Eden中实现了功能序列化.请参阅他的IFL 2010论文"Haskell的正交序列化".序列化支持融入到Eden运行时系统中.(现在作为单独的库提供:packman.不确定它是否可以与GHC一起使用,或者需要像Eden fork一样修补GHC ......)GHC需要类似的东西.这是从GHC 7.4派生的版本中的序列化支持Eden:
data Serialized a = Serialized { packetSize :: Int , packetData :: ByteArray# }
serialize :: a -> IO (Serialized a)
deserialize :: Serialized a -> IO a
Run Code Online (Sandbox Code Playgroud)
所以:人们可以序列化函数和数据结构.有一个Binary实例Serialized a,允许您检查长时间运行的计算文件!(见Secion 4.1).
在GHC基础库中支持这种简单的序列化API肯定是分布式Haskell编程的圣杯.它可能会简化分布式Haskell风格(CloudHaskell,MetaPar,HdpH,Eden等等)之间的可组合性.
Ank*_*kur 20
查看Cloud Haskell.它有一个概念Closure,用于以类型安全的方式发送要在远程节点上执行的代码.