digitalmars.D.learn - Compiler interoperability
- Chris Katko (15/15) Jul 07 2023 For a specific system (Linux, e.g):
- Basile B. (14/30) Jul 07 2023 Yes because of exception handling, the runtime functions are
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
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 compilerYes 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