www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Compiler interoperability

reply Chris Katko <ckatko gmail.com> writes:
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 (and compiler 
version) from scratch and need recompiled? 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)

I have my own experiences but I'm not sure if there's clear cut 
"yes, definitely it's [this case]." answers out there.
Jul 07 2023
parent Basile B. <basile.b gmx.com> writes:
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
Jul 07 2023