On Friday, 7 July 2023 at 08:19:28 UTC, Chris Katko wrote:
For a specific system (Linux, e.g):
What is the level of interoperability between the different D
compilers; DMD, LDC, and GDC?
It appears each one has different benefits, and, different
experimental features. Link-time optimization for LDC. GDC
offering static analysis. I imagine there are more.
If I compile a D program with say, DMD, will every D library I
include also have to use that same compiler
Yes because of exception handling, the runtime functions are
different.
You can try and you'll see linking error because of a missing
"*personality*",
symbol.
(and compiler version) from scratch and need recompiled?
From version to version of a same vendor that might work but as
phobos is not binary compatible (ABI of functions is allowed to
change from a version to another) this is a bit the lottery.
Or is there a pre-defined ABI that makes everything compatible?
If I use shared libraries instead of static linking, does the
situation change?
Additionally, how do the debuggers GDB vs LLDB behave when
compiled using a different brand D compiler? (e.g. demangling)
Mangling is identical for each vendor (this is a language spec)
but as mentioned, EH functions are different so the breakpoint
set to break on `throw` for DMD (i.e `_d_throwdwarf`) will not
work for `LDC` (i.e `_d_throw_exception`)
I have my own experiences but I'm not sure if there's clear cut
"yes, definitely it's [this case]." answers out there.
So to conclude there's no interoperability