Another take on decimal data types

Joakim dlang at joakim.fea.st
Fri Jan 12 14:09:55 UTC 2018


On Thursday, 11 January 2018 at 22:07:42 UTC, H. S. Teoh wrote:
> On Thu, Jan 11, 2018 at 04:38:57PM -0500, Steven Schveighoffer 
> via Digitalmars-d-announce wrote:
>> On 1/11/18 4:12 PM, kdevel wrote:
>> > On Thursday, 11 January 2018 at 20:40:01 UTC, Dmitry 
>> > Olshansky wrote:
>> > > What did you expect?
>> > 
>> > To be honest: A compile time error. Modern C compilers can 
>> > check such format strings. Example: GCC 6:
>> 
>> But dmd isn't a C compiler, nor does it have to worry about 
>> the problems C has (namely, untyped varargs). To dmd, printf 
>> is just another function, there's nothing special about it.
> [...]
>
> Yeah, checking C-style printf formats isn't dmd's problem.
>
> The Phobos equivalent of printf, however, *does* support 
> compile-time format checking in the latest version:
>
> 	writefln!"%s %d %d"("abc", 1); // "Orphan format specifier: %d"
> 	writefln!"%s %d"("abc", 1, 2); // "Orphan format arguments: 
> args[2..3]"
> 	writefln!"%s %d"(1, "abc");    // "Incorrect format specifier 
> for range: %d"
> 	writefln!"%f"(1);              // "incompatible format 
> character for integral argument: %f"
>
> Best of all, this is all done via CTFE in the library code, no 
> hard-coding in the compiler necessary.  You can implement your 
> own compile-time checker for your own DSLs in the same way, 
> without needing to hack the compiler.

Interesting, guess this was added last April with dmd 2.074?

https://dlang.org/changelog/2.074.0.html#std-format-formattedWrite

You or someone should write up a blog post about this, with both 
this example and expanding on how D enables this kind of 
functionality in general.


More information about the Digitalmars-d-announce mailing list