dmd 2.029 release

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Apr 23 06:06:38 PDT 2009


Don wrote:
> 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?

I agree.

> - 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.

Yah. std.stdio and std.format already uses streaming internally to some 
extent. I plan to make it entirely possible to dump a string and a 
binary representation of an object to a generic stream, without having 
to allocate any memory in the process.

> 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.

Yes. The way it should be is not with sink, but with the standard output 
iterator method put().

void streamOut(T, R)(T object, R range)
{
     foreach(x; a) range.put(x);
     range.put(b);
     range.put(c);
}

> 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.

Well toString is ok for casual uses, but I agree that true streaming 
mops the floor with it.


Andrei


More information about the Digitalmars-d-announce mailing list