[Haskell-cafe] ANN: RPCA and fec

Adam Langley agl at imperialviolet.org
Sun Jan 27 17:46:22 EST 2008

Doubling up an announcement email again to reduce the traffic on the
list. First:

RPCA is an RPC system. This first release is pretty lacking, simple
client-server interactions work but there's no lame-duck handling,
load balancing, security etc. RPCA uses codec-libevent's tagged data
structures for serialisation. Tagged structures allow you to grow you
RPCs incrementally, which is very important in large programs. Very
simple tests should that 1000's of RPCs a second isn't a problem.
There's also the start of a C library for the protocol, written on
libevent and glib.

To give a taste, here's what you need to write on the server side:

addNumbers :: TestRPC.Addnumbersrequest
           -> ((Maybe TestRPC.Addnumbersreply) -> STM ())
           -> IO ()
addNumbers (TestRPC.Addnumbersrequest
                       { TestRPC.addnumbersrequest_a = a
                       , TestRPC.addnumbersrequest_b = b }) cb = do
  atomically $ cb $ Just $ TestRPC.addnumbersreplyEmpty {
TestRPC.addnumbersreply_c = a + b }

and on the client side...

rpc chan "add" (TestRPC.Addnumbersrequest 400 300) 0.1

That's a synchronous call with a timeout. You can, of course, call
them asynchronously as well (and from multiple threads etc)

It's highly experimental and can be found in Hackage and at

FEC is an erasure coding library, based on zfec by Zooko, based on
code by Luigi Rizzo. The most widely known example of an erasure code
is the RAID-5 algorithm which makes it so that in the event of the
loss of any one hard drive, the stored data can be completely
recovered. The algorithm in the fec package has a similar effect, but
instead of recovering from the loss of only a single element, it can
be parameterized to choose in advance the number of elements whose
loss it can tolerate.

Hackage: http://hackage.haskell.org/packages/archive/fec/0.1.1/doc/html/Codec-FEC.html

It's new code, but the library that it's based on is well tested so
should be sound.


Adam Langley                                      agl at imperialviolet.org
http://www.imperialviolet.org                       650-283-9641

More information about the Haskell-Cafe mailing list