Poll on improved format strings.

Don Clugston dac at nospam.com.au
Tue Mar 6 07:27:00 PST 2007


renoX wrote:
> Hello,
> 
> I've made a templated format string templates
> 
> The idea is: printf format string are interesting because they are powerful but they suck because the %d,%s, etc are in one part of the function and the corresponding variable are in a different part of the function (Tango has the same problem), writef improve this by allowing "... %d",var," ... %s",var2 but it's still not ideal because in the gluing of the various strings, it's easy to forget a space or a comma thus providing a not very good output.
> 
> So my idea would be to have embedded expression like this "... %08d{var1+var2} ...", but it's not easy to provide a good syntax/semantic, so I'd like some remarks:

I like this better than anything else I've ever seen.

> 
> -Should the mix of printf format and new style format string be allowed? (It is in the current implementation).
> This has the advantage of nearly keeping  the compatibility, the problem is with the format string "..%d{..." in printf this means a number followed by '{' but with the new format this creates an error.
> It is possible to escape the '{' to allow this, ie to say that '%{' is '{' so now '%d{' would need to be '%d%{', this has the inconvenient that it's not possible to have the embedding format '%{var}' which would be the shortest syntax..
> Another possibility would be to say that if you want to have '... %d{ ...' one need to write it has '.... %d',var,'{ ....', this would permit to have the '..%{var}...' embedding syntax.

Personally I'd rather get an error if I leave off the {}.
(I'm someone who uses {} inside printf debugging strings a lot, so it's 
far from compatible for me).
I think it's better to minimise features wherever possible.

> -What to do with non-const char[]?

Aren't they a security risk?
eg,
char [] a  = getFromUser();
writefln(a);

if a is "%d", you get an access violation. Apart from security, it just 
hides an insidious bug -- the code works fine until someone innocently 
enters a % followed by one of the allowable letters....
I've always thought that the first argument to printf() should be forced 
to be a string literal.
I would see it as an *advantage*, to only support const char [] !



More information about the Digitalmars-d mailing list