DIP9 -- Redo toString API

Steven Schveighoffer schveiguy at yahoo.com
Mon Nov 22 08:02:48 PST 2010


On Sun, 21 Nov 2010 05:10:13 -0500, spir <denis.spir at gmail.com> wrote:

> On Thu, 18 Nov 2010 17:21:20 -0500
> "Steven Schveighoffer" <schveiguy at yahoo.com> wrote:
>
>>
>> I just created a new D Improvement Proposal to fix the toString problem  
>> I
>> brought up several posts ago.
>>
>> See: http://prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP9
>
>
> Hello,
>
>
> [Sorry for a partly personal message, but I cannot help it. At first  
> sight, my gut reaction in front of this proposal has been: no, nooo,  
> NOOO!!! I waited a few days because, _surely_, I was missing or  
> misinterpreting some basic point. But after several days and reads of  
> the DIP, I still feel the same and nobody seems to address the issue; so  
> here I go. Excuse the noise if I'm simply wrong. I feel ashamed to send  
> that -- but let's be bold :-).]
>

Thanks for the input, but you are missing several very important points:

1. toString will not be made 'illegal', you can still write toString  
methods and use them as you wish (writing a toString method without also  
writing a writeTo method will be deprecated for a time, but after that the  
compiler will not complain).  But writeln, format, to!string, etc. will  
not use them.
2. toString can unequivocally be replaced anywhere you see it with  
to!string.  There is zero loss of functionality, and the change is not  
unpleasant.  Not only that, but almost *no* code uses toString, it is more  
correct to use to!string, and let to!string make the right decision.  The  
reason is because to!string handles builtin types (which have no toString  
member), and custom structs without a toString member.  You should never  
have to write a delegate to pass to writeTo directly unless you have some  
funky way of outputting the data, but in that case, writeTo is better for  
you anyways.
3. Yes, toString could support an optional formatting argument, but that  
is not my main concern (it is Don's and others, I'm assuming you too).  My  
main concern is that in order to hook into writeln, format, to!string,  
etc, your type *must* define a function that necessarily allocates  
memory.  writeTo not only solves that problem, but in most cases does not  
change the difficulty of converting objects/structs to text format (and in  
many cases, it simplifies the code which creates the string).

-Steve


More information about the Digitalmars-d mailing list