dmd 2.029 release

Don nospam at nospam.com
Thu Apr 23 07:11:39 PDT 2009


Georg Wrede wrote:
> Don wrote:
>> bearophile wrote:
>>> This post is mostly for Andrei.
>>> I have played with D2 a bit; probably I'll need months to digest it 
>>> and its new Phobos2. While I explore Phobos I'll probably post some 
>>> comments/bugs around here.
>>>
>>> After reading this:
>>> http://blogs.msdn.com/vcblog/archive/2009/04/22/decltype-c-0x-features-in-vc10-part-3.aspx 
>>>
>>> I have tried to write a toy implementation of it in D2 (not using 
>>> Phobos2 yet):
>>>
>>> import std.stdio: writeln;
>>> import std.string: format;
>>>
>>> struct Watts {
> ...
> 
>>> Two things to improve:
>>> 1) All structs must have a default built-in opString, a good 
>>> representation can be:
>>> StructName(field_value1, field_value2, field_value1, ...).
>>> It's not a perfect textual representation, but it's WAY better than 
>>> the current one (currently it shows just the struct name).
>>> (Printing the module name before the struct name is bad, most times 
>>> is just noise)
>>
>> No!
>> <rant>
>> toString() is one of the most dreadful features in D. Trying to 
>> slightly improve it is a waste of time -- the whole concept needs to 
>> be redone.
>> It's horribly inflexible, tedious, and hugely inefficient. What more 
>> could there be to hate?
>>
>> - the object being called has no context. It doesn't know what format 
>> is desired, for example.
>> - you can't emulate formatting of built-in types, NOT EVEN int! You 
>> can't do left-align, pad with zeros, include + sign, display in hex.
>>
>> - it's got no stream concept. Every object has to create and manage 
>> its own buffer, and nobody knows if anyone actually needs it.
>>
>> It ought to be at least as simple as:
>>
>> struct Foo(A, B, C){
>> A[10] a;
>> B b;
>> C c;
>> void toString(Sink sink){
>>    foreach(x; a) sink(x);
>>    sink(b);
>>    sink(c);
>> }
>> }
>> ... but it's not, you have to create a silly buffer to put all your 
>> strings in, even if there are 200 million of them and your giant 
>> string is just going to be written to a file anyway.
>>
>> I'd like to see version(debug) {} put around Object.toString(). It's a 
>> deathtrap feature that's got no business being used other than for 
>> debugging.
>> </rant>
> 
> First of all, printing stuff "struct.toString()" style is for two things:
> 
>  o  Debugging
>  o  Small throwaway code snippets
> 
> The latter mainly being for two purposes:
> 
>  o  Testing quick concepts, trying out library functions, etc.
>  o  For the newbie, when he's learning D, but not output formatting.
> 
> No "Real Program" uses this, because there you typically do proper 
> formatting of the output anyway, and almost never print entire structs 
> or objects as such. Instead, rather the information that they represent.

How about something like BigInt? Why can't you just print it out?

BTW to everyone, 'Sink' was not a proposal. I was just saying that 
almost anything's better than the current toString().


More information about the Digitalmars-d-announce mailing list