On Friday, 5 February 2016 at 01:33:14 UTC, tsbockman wrote:
As to the ".di" stuff - I've not used them. Care to educate me? How can they cause similar problems?

Well, technically, a .di file is just a .d file renamed, but it tends to have the bodies stripped out. Separate compliation is a supported feature of D.

The way you'd do it is something like this:

struct Foo {
   float a;
   float b;
}

void bar(Foo* f) {
   f.b = whatever;
}


Then compile it with -lib and make a "header" file manually:

struct Foo {
   double a;
   double b;
}
void bar(Foo*);


You can now create D modules that import this and link against the compiled library. Very similar to C's model...

But I redefined Foo! The name mangling won't catch this. bar will be mangled to take `Foo` as an argument and the linker will catch if we change that, but it doesn't know what Foo actually is.

By changing that, we introduce the problem.

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

it might be :)

Reply via email to