On Thursday, 14 April 2016 at 17:46:55 UTC, Johannes Pfau wrote:
(1) Interface files
We have .di interface files as a replacement for C/C++ headers
(although the .di extension is only a convention, you can also
use the .d extension). These files do not contain function
bodies, but they still need the complete source code for
templates. The compilers can generate interface files from
normal source code.
Looks like a pretty good choice for handling the
OSS projects do not use interface files though: It prevents
inlining of functions and there's no real benefit for OSS
projects. Interface files are (theoretically) useful for closed
source libraries if you don't want to ship the source code.
I think those would also be useful for FLOSS projects, if you
ship a compiled binary and don't want to recompile the code.
This is the case for example for very huge projects which take
long to compile (think in WebKit or Eigen3 dimensions), or for
Linux distributions which want to separate as much code as
possible and prevent code duplication and statically linked stuff
to make security uploads easier and faster.
(2) Linking against installed libraries
The compilers can of course link against pre-compiled D
libraries. IIRC dub does not have integrated support for this.
The real problem is the D compilers are not ABI compatible.
If you built a library with GDC you can't use it with LDC or
DMD. This is one reason why dub compiles everything from
source. (Even different frontend versions can sometimes break
Is there any way this can be fixed?
https://dlang.org/spec/abi.html gave me the impression D has a
defined ABI the compilers adhere too (which would be a great
advantage over C++).
Fixing this would be pretty useful, not only for the distro
usecase, I think.
Thanks for the explanations, this is useful to know and helps me
to work around some of the issues short-term (long-term we would
really need a solution for these issues, since this will become a
huge issue if/when more D code makes it into distros).