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