On 6/26/13 12:53 PM, dennis luehring wrote:
Am 26.06.2013 21:33, schrieb Andrei Alexandrescu:
On 6/26/13 11:08 AM, bearophile wrote:
On the other hand this D program prints just
"10" with no errors, ignoring the second x:

import std.stdio;
void main() {
size_t x = 10;
writefln("%d", x, x);
}

In a modern statically typed language I'd like such code to give a
compile-time error.

Actually this is good because it allows to customize the format string
to print only a subset of available information (I've actually used
this).

why is there always a tiny need for such tricky stuff - isn't that only
usefull in very rare cases

This is no tricky stuff, simply allows the user to better separate format from data. The call offers the data, the format string chooses what and how to show it. Obvious examples include logging lines with various levels of detail and internationalized/localized/customized messages that don't need to display all data under all circumstances.

Checking printf for undefined behavior and mistakes affecting memory safety of the entire program is a noble endeavor, and kudos to the current generation of C and C++ compilers that warn upon misuse.

Forcing D's writef to match exactly the format string against the number of arguments passed is a waste of flexibility and caters to programmers who can't bring themselves to unittest or even look at the program output - not even once. Our motivation is to help those out of such habits, not support them.


Andrei

Reply via email to