3 ms·
Sure, I'm not disputing that. In fact I think that proves my point. There are languages (C++, Rust) where you can write your own, safe formatting library just
by quietbritishjim 6y ago
Sure, I'm not disputing that. In fact I think that proves my point.
There are languages (C++, Rust) where you can write your own, safe formatting library just using the language. It's a world away from printf.
Compared to that, parent comment says that in D the compiler has to have checks for formatting built in to it and compares it to printf. Yuk!
- WalterBright 6y agoAllow me to clarify. D does have writef() which provides a fully typesafe print formatting routine. It is unknown to the compiler (i.e. no magic). https://dlang.org/phobos/std_stdio.html#.writef https://dlang.org/phobos/std_stdio.html#.writef D can also call C's printf, and checking that is magical indeed. It exactly follows the C99 Standard for printf. A major feature of D is being able to call C functions directly, and printf is one of them. (D doesn't recognize printf specifically, it has to have a special attribute for it `pragma(printf)` which the compiler recognizes. This is so the checking can be applied to user-defined functions that use conforming printf-style format strings.) https://dlang.org/spec/pragma.html#printf https://dlang.org/spec/pragma.html#printf And the code to do it: https://github.com/dlang/dmd/blob/master/src/dmd/chkformat.d https://github.com/dlang/dmd/blob/master/src/dmd/chkformat.d
- quietbritishjim 6y agoOK, thanks for clarifying. Reading back your original comment, I can see that its literal wording does say that. I was confused by you leading with printf handling, which is not really relevant to the original article (certainly not as much as writef()), so I inferred you were only mentioning it as context to writef() working similarly. Your use of the word "simply" also threw me off, it sounded like you thought compiler magic was a better solution that a language-level one. I now see you were just making an unrelated point first. And having a specific compiler feature just for printf (and co.) is totally reasonable given how widespread it. Your first link answers what would've been a follow up question: OK, writef() is a variadic template implemented with just normal language features, but does it do compile-time checking of the format? The docs says that it does: > fmt: The format string. When passed as a compile-time argument, the string will be statically checked against the argument types passed.
- pests 6y agoWalter Bright is the creator of the D language so this is the best place to ask these questions.