phobos / tango / ares

Bill Baxter dnewsgroup at
Sat Feb 10 06:43:43 PST 2007

Sean Kelly wrote:
> Kevin Bealer wrote:
>> Okay -- I'm really sorry if any of this seems to have a negative tone. 
>> I hesitate to write this since I have a lot of respect for the Tango 
>> design in general, but there are a couple of friction points I've 
>> noticed.
>> 1. writefln / format replacements
>> Concerning standard output and string formatting, in phobos I can do 
>> these operations:
>>   writefln("%s %s %s", a, b, c);
>>   format("%s %s %s", a, b, c);
>> How do I do these in Tango?  The change to "{0} {1}" stuff is fine 
>> with me, in fact I like it, but this syntax:
>>   Stdout.formatln("{0} {1} {2}", a, b, c);
>>   Format!(char).convert("{0} {1} {2}", a, b, c);
>> Is awkward.  And these statements are used *all the time*.  In a 
>> recent toy project I wrote, I used Stdout 15 times, compared to using 
>> "foreach" only 8 times.  I also use the "format to string" idiom a lot 
>> (oddly enough, not in that project), and it's even more awkward.
> The conversion modules seem to have slightly spotty API documentation, 
> but I think this will work for the common case:
> Formatter( "{0} {1} {2}", a, b, c );
> The Stdout design is the result of a lengthy discussion involving 
> overload rules and expected behavior.  I believe two of the salient 
> points were that the default case should be the simplest to execute, and 
> that the .format method call provided a useful signifier that an 
> explicit format was being supplied. 

Is there any reason not to make the format item's index also optional? 
So that
    Formatter("{} {} {}", a, b, c);
can be used?  I mean making it more like %s?

The meaning would just be "use the index (1+ the last one that 
appeared)" or 0 if it's the first to appear.

And then if you go there, it might be nice to have a way to say "same as 
the last item" or "last item +/- some index".  Maybe use +/- numbers.  So
    Formatter("{1} {+0} {-1}",a,b);
would be equal to
    Formatter("{1} {1} {0}",a,b);
I can't really think of when I'd use that though.  The {} I'd use for 
sure though.

Anyway, the positional references are great, and really a must have for 
any serious I18N usage, but in the original language the app is written 
in, things tend to appear in the order of the arguments.


More information about the Digitalmars-d-learn mailing list