toString or not toString

Don nospam at nospam.com
Tue Aug 30 23:53:29 PDT 2011


On 31.08.2011 04:41, Jonathan M Davis wrote:
> On Tuesday, August 30, 2011 20:59:06 Paul D. Anderson wrote:
>> Can someone clarify for me the status and/or direction of string formatting
>> in D?
>>
>> We've got:
>>
>> 1. toString, the object method with no parameters.
>> 2. toString(sink, format)
>> 3. to!String()
>> 4. format
>> 5. writef/writefln
>> 6. write/writeln
>>
>> I realize these exist for various reasons, some (1,3) are simple
>> (unformatted) conversions, others (2,4-6) are designed to provide
>> configurable formatting. The problem is that they are inconsistent with
>> each other.
>>
>> Using std.bigint as an example: 1, 3, 4 and 6 don't work, or don't work as
>> expected (to me at least). 1. prints 'BigInt', 3 and 4 are compile errors.
>>
>> I know bigint is a controversial example because Don has strong feelings
>> against 1 and favors 2. (See bug #5231). I don't really have an opinion one
>> way or the other but I need to know what to implement in my
>> arbitrary-precision floating point module. This obviously relies heavily on
>> bigint.
>>
>> So, is there a transition underway in the language (or just Phobos) from
>> toString, writeln and format, to toString(sink,format) and writefln?
>>
>> Or is this just a divergence of views, both of which are acceptable and
>> we'll have to get used to choosing one or the other?
>>
>> Or am I just mistaken in believing there is any significant conflict?
>>
>> I apologize if this has already been hashed out in the past and, if so, I
>> would appreciate someone pointing me to that discussion. (Or just the
>> results of the discussion.)
>
> At this point, it's toString with no parameters. Don's completely out in left
> field with regards to how things currently work. I believe that BigInt is the
> _only_ example of toString(sink, format).

Try to write BigFloat such that:
BigFloat f = 2.3e69;
writefln("%f %g", f, f);
will work. It's just not possible.

toString with no parameters does not work, and CANNOT work. It just can't.
I implemented something quickly which actually works.
But, it's just a stop-gap measure until this black hole in the language 
gets fixed. We really need the format string to be exposed in a digested 
manner.


More information about the Digitalmars-d mailing list