Skip to content

tweag/distributed-closure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b5d8327 · Nov 27, 2023
Feb 13, 2020
Sep 12, 2018
Feb 13, 2020
Jun 19, 2020
Mar 20, 2019
Jun 16, 2017
Nov 27, 2023
Feb 13, 2020
Dec 29, 2019
May 25, 2015
Feb 13, 2020
Nov 27, 2023
Feb 13, 2020

distributed-closure

Build status

Leverage the -XStaticPointers extension from GHC 7.10 onwards for distributed programming using lightweight serializable closures. This package implements a serializable closure abstraction on top of static pointers. Serializable closures can be shipped around a computer cluster. This is useful for implementing intuitive and modular distributed applications. See this blog post for a hands on introduction and this paper for the original motivation.

Example

In GHC 8 and above, remoting a computation on another node using this library goes along the lines of

data NodeId

-- Assume we're given a spaw primitive.
spawn :: NodeId -> Closure (IO ()) -> IO ()

-- A computation to remote on another node.
hello :: String -> IO ()
hello name = putStrLn ("Hello, " ++ name)

main = do
  name <- getLine
  spawn "someAddress" (static hello `cap` name)

An example of sending static pointers and closures through a communication channel is provided under examples/ClientServer.hs in the source repository.

distributed-closure does not implement sending/receiving/spawning closures - that's left for higher-level frameworks. Only closure creation, composition and (de)serialization.