dmd 1.057 and 2.041 release

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Mar 8 14:52:25 PST 2010


Steven Schveighoffer wrote:
> On Mon, 08 Mar 2010 15:56:14 -0500, Andrei Alexandrescu 
> <SeeWebsiteForEmail at erdani.org> wrote:
> 
>> Steven Schveighoffer wrote:
>>> On Mon, 08 Mar 2010 14:49:33 -0500, Andrei Alexandrescu 
>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>
>>>> bearophile wrote:
>>>>> Andrei Alexandrescu:
>>>>>
>>>>>> Sorry, this stays.
>>>>>  Then I'm not going to use the Phobos printing in all my future D2
>>>>> programs. As I was not using it in D1. I'm not going to change idea
>>>>> on this.
>>>>>
>>>>>> (e.g. the comma may be a decimal point in some languages, so is
>>>>>> [1,2] in a German locale an array of double with one value or two?<
>>>>>>
>>>>>  In German you need no space after the comma, and there's no [] after
>>>>> and before it. So [1, 2] is not a floating point value in German.
>>>>>
>>>>>> Why one space?<
>>>>>  Because that's they way people print things in natural languages.
>>>>> It's a convention, you know. And it's a good one. It tells apart the
>>>>> FP numbers and it's the minimal.
>>>>>
>>>>>> It's the most neutral thing I could think of. Why no brackets?
>>>>>> Because of minimalism. You can very easy add them if you want
>>>>>> them.<
>>>>>  The purpose of things like the square brackets is to give a less
>>>>> ambiguous textual representation of the most common data structures
>>>>> (array and strings are the most common after numbers). So you put ""
>>>>> or '' around strings and [] to know what you are printing.
>>>>
>>>> Your choice of leading/trailing symbols and of separators makes 'to' 
>>>> friendlier for printing e.g. debug strings. My choice makes it a 
>>>> primitive for text serialization. I'm not 100% sure which is the 
>>>> more frequent use and therefore which is the most appropriate as a 
>>>> default, but I'm leaning towards the latter.
>>>  No it doesn't.
>>>  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]]
>>>  That is almost completely unambiguous (you still have to account for 
>>> literal commas or brackets), whereas you have a multitude of choices 
>>> with the first version.
>>
>> I said a primitive for serialization, not a serialization 
>> infrastructure. So the basic idea is that you use "to" in conjunctions 
>> with your own routines to serialize things. "to" imposes no policy. 
>> Using "[", ", ", and "]" is policy.
> 
> Reading the documentation, it appears that setting the policy means 
> simply passing delimiters to the "to" function.  That means that for 
> every call to "to", you specify the policy if it differs from the 
> default.

I think it also means that you write your function that calls "to" 
inside, and use your function throughout.

> Since the default is not useful for serialization and 
> confusing for printing, why would anyone use the default policy (aside 
> from the obvious "because it's annoying")?  If you don't use the default 
> policy, why have a default, why not require the policy for each call?

Printing values with spaces between them is entirely fine for e.g. all 
numbers.

>>> The thing is, friendlier for text-based serialization is almost 
>>> identical to friendlier for printing.  In fact, friendlier for 
>>> text-based serialization should have even more annotations to escape 
>>> delimiters.
>>>  In fact, I find the defaults you defined not useful in most cases.  
>>> Printing or serializing, I want to see the delimiters for the arrays, 
>>> elements, and subarrays.
>>
>> You can choose them no problem. std.conv gives you mechanism, you 
>> choose the policy.
> 
> I can choose the policy for each call, that is not going to look very 
> good, and be very tedious to write.

Write your own function and call it.

> Plus it's not recursive (this would 
> actually be a huge problem if using to for serialization):
> 
> 
> import std.stdio;
> import std.conv;
> void main()
> {
>     int[][] x = new int[][](2, 2);
>     writeln(to!string(x, "[", ",", "]"));
> }
> 
> outputs [0 0,0 0]
> 
> I would expect [[0,0],[0,0]]
> 
> I'll also point out that AAs have a default policy that is much more 
> reasonable.

I guess that should be changed too :o).


Andrei


More information about the Digitalmars-d-announce mailing list