Type safety could prevent nuclear war

tsbockman via Digitalmars-d digitalmars-d at puremagic.com
Thu Feb 4 15:47:53 PST 2016


On Thursday, 4 February 2016 at 23:40:13 UTC, anonymous wrote:
> You can do the same thing in D, using extern(C) to get no 
> mangling:
>
> main.d:
> ----
> alias float_t = double;
> extern(C) float_t deref(float_t* a);
> void main()
> {
>     import std.stdio: writeln;
>     float_t d = 1.23;
>     writeln(deref(&d)); /* prints "1.01856e-314" */
> }
> ----
>
> deref.d:
> ----
> alias float_t = float;
> extern(C) float_t deref(float_t* a) {return *a;}
> ----
>
> Command to build and run:
> ----
> dmd main.d deref.d && ./main
> ----

You can do the same thing in D if you try, but it's not natural 
at all to use `extern(C)` for *internal* linkage of an all-D 
program like that.

Any competent reviewer would certainly question why you were 
using `extern(C)`; this scores much lower in "underhanded-ness" 
than the original C program.

Even so, I think that qualifies as a compiler bug or a hole in 
the D spec.


More information about the Digitalmars-d mailing list