On Monday, 10 April 2017 at 11:40:12 UTC, Matthias Klumpp wrote:
Hi there!
[...]
If we do that, we will run into the D ABI trap: Libraries
compiled with compiler X can not be used from software compiled
with D compiler Y. There is actually no ABI stability guarantee
even between DMD releases.
This will make integrating D a huge pain. Recompiling the
dependency-chain of a software from source when compiling a
package using the "right" compiler and statically adding the
code is forbidden by distro policy. Having static libraries in
the dependencies doesn't solve the issue. Compiling each
library with all D compilers is highly impractical and not
really feasible.
So, how should we proceed here? We could make it "DMD is the
only thing on the highway" compiling everything with DMD with
zero exceptions, which would leave us with only DMD-internal
ABI breakage and bad D code performance for some libraries.
I am working on a project that will require to be used almost
exclusively with LDC (targeting the GPU backends of LLVM), and
while technically only the mangling needs to match using any
other complier will likely be a major workflow impediment.
Perhaps it is reasonable to make them compile the stdlibs for
LDC, but if it becomes as popular as I hope (dominating it's
niché) it may be worthwhile considering shipping prebuilts.