[erlang-questions] Chinese whisper problem

Samuel Elliott sam@REDACTED
Sat Nov 26 16:34:12 CET 2011


Has anyone taken a look at BSON? It was created by the mongodb project
to overcome some of the problems they were having with regular JSON
(like not enough data types).

I don't know if there's a parser for it in every language, but there
is in quite a few (there are two erlang ones they say on
http://bsonspec.org/ )

Sam

On Fri, Nov 25, 2011 at 8:49 PM, Bob Ippolito <bob@REDACTED> wrote:
> On Friday, November 25, 2011, Joe Armstrong <erlang@REDACTED> 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
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>



-- 
Samuel Elliott
sam@REDACTED
http://lenary.co.uk/
+44 (0)7891 993 664



More information about the erlang-questions mailing list