Type safety could prevent nuclear war

tsbockman via Digitalmars-d digitalmars-d at puremagic.com
Thu Feb 4 17:33:14 PST 2016


On Friday, 5 February 2016 at 01:14:05 UTC, Adam D. Ruppe wrote:
> D allows that. This is why I recommend putting `static 
> assert(foo.sizeof == expectation);` in code that interfaces 
> with external things, like C code, or D .di stuff.
>
> #include <math.h> /* sqrt */

D *doesn't* allow that though - at least, not in a monolithic, 
idiomatic D program: there wouldn't be any duplicate declaration 
of `spectral_contrast()` to mess up.

Yes, you can force the matter using `extern(C)` like anonymous 
demonstrated earlier - but using `extern(C)` for internal linkage 
in an all-D program would certainly attract scrutiny from 
reviewers; it would score poorly on the "underhanded-ness" test.

As to the ".di" stuff - I've not used them. Care to educate me? 
How can they cause similar problems?

> that line is an interesting one too: the trick is depending on 
> namespace pollution by the include. In D, you might write 
> `import core.stdc.math : sqrt;` and make that misleading 
> comment part of the code.... though then you could perhaps 
> exploit that module bug (314?).

314 definitely has potential. Should we start an "Underhanded D" 
contest? Sounds like bad marketing, but a lot of fun :-P


More information about the Digitalmars-d mailing list