On 2010-03-09 09:09:51 +0100, Alexander Suhoverhov
<alexan...@suhoverhov.selfip.net> said:
Steven Schveighoffer at "Mon, 08 Mar 2010 15:23:51 -0500" wrote:
SS> On Mon, 08 Mar 2010 15:12:24 -0500, bearophile
<bearophileh...@lycos.com> wrote:
>> Steven Schveighoffer:
>>> Tell me how you would parse the following text serialization string for a
>>> string[]:
>>>
>>> hello world how are you
>>>
>>> What if it was a string[][]?
>>>
>>> Compare that to:
>>>
>>> [hello world, [how are, you]]
>>
>> You are missing something:
>>
>> ["hello world", ["how are", "you"]]
SS> For completely unambiguous, yes. But still, I find often that
quotes are more noise than
SS> they are worth when just doing simple printouts. What we want is
the most useful
SS> default.
Commas are even more noise than than quotes. erlang:
[{app, "app1"}, {user, "user1"}, {score, 123456}, {date, 5000000},
{misc, "foo"}]
But if you just drop commas:
[{app "app1"} {user "user1"} {score 123456} {date 5000000} {misc "foo"}]
SS> -Steve
For a basic output one can discuss what is better, but in general, for
a serialization approach I feel that the basic approach of the
discussion is flawed.
A much better approach (that for example I did use in my serialization
routines) is following the C++ philosophy that these details are
handled by the target stream, not by the function sending the data.
For example I have implemented two serializers, one that serializes to
json (with [,]""), and one that serializes to a binary format.
You write just one function, and then you can (even at runtime) change
the details on the output, even from textual to binary, without
changing anything in the serialization functions.
You don't want to write a different serialization function for each
format, or go around hunting for all calls to add " to strings...
Now in my serialization routines I have a couple of design choices that
maybe not everybody would share, but that I like:
- it is possible to get a meta information describing what will be
serialized *before* serializing (this helps in dumping the meta
information once at the beginning, and then serialize arrays with
minimal overhead in binary mode, but makes serializing slightly more
complex.
- it if possible (and not too difficult) to write serialization
routines fully by hand, without any template, something very useful for
objects that need special serialization. This method can also be fully
customized.
< shameless bug promotion>
By the way as I have some horrible code due to
http://d.puremagic.com/issues/show_bug.cgi?id=3472 and similar bugs in
mixing interfaces and templates, I had written a much nicer version
only to find out that it did not work...
</ shameless bug promotion>
I am transitioning the whole i/o in blip to a more abstract model based
on simple delegates (sink/readers) that should make it easier to use it
with either phobos or tango or any other source, but at the moment the
input part still requires tango InputStreams (output part already
transitioned).
Fawzi