[erlang-questions] Chinese whisper problem

Bob Ippolito <>
Fri Nov 25 21:49:15 CET 2011


On Friday, November 25, 2011, Joe Armstrong <> wrote:
> I guess you all know about Chinese whispers.
> You send a whispered message round a circle and see if you get the same
> message back.
> The computer variant is as follows:
> Send a complex data structure round a circle, and see if you get the same
message back.
> The circle is a ring of processes written in *different* programming
languages.
> The message is a complex message, containing primitives such as integers,
booleans
> and strings and constructed types "sequence of" "tuple of" etc.
> Messages are sent over sockets. I want each language to unpack the
message into the
> internal form that is appropriate for that form, and then reconstruct the
message from the internal form.
> This is something that I think *should be very easy* but is in fact very
difficult.
> In a previous post I outlined how Erlang could talk to javascript but
this method is not  simple
> and not compete - it would break done, for example if the integers were
bignums.
> What should we use for the internal form? JSON is untyped so will give us
lots of problems.
> ASN.1 is great but badly supported in many PLs - xml? - but the schemas
are horrible.
> Thrift? - Google protocol buffers ... some kind of self-describing binary
format would seem
> appropriate - bert for example.
> I really would be nice to solve this problem is the simplest possible way
so that it
> was very easy to send whispers round a circle and get back what you sent.

If you simply consider JSON to not support bignums, then there is no data
lost in the interchange once you've given up on representations that don't
have a 1:1 mapping to JSON. JSON isn't really the problem, it is typed it
just doesn't have all of the types you may want in the spec but that
doesn't stop you from extending objects to carry other types (see
JSON-RPC), Bert does this a bit too. The problem is then simply how to
meaningfully deal with these things in N languages, but for your use case
you could cheat and not try and do anything meaningful.

I can't imagine an interchange format that was everything to every
language, but you can certainly define subsets that represent a common
denominator that is good enough for many purposes. For example, in Python
it's valid to have a loop in your object graph and serialize it with
marshal or pickle, but there's not an obvious representation for that in a
functional language like Erlang. Consider: lst = []; lst.append(lst)

-bob
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20111125/38b2f7fe/attachment.html>


More information about the erlang-questions mailing list