Calling D from C, C++, Python…

Jakob Ovrum via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Sep 13 03:10:31 PDT 2015


On Thursday, 10 September 2015 at 18:01:10 UTC, Russel Winder 
wrote:
> Is there an easy way of knowing when you do not have to 
> initialize the D runtime system to call D code from, in this 
> case, Python via a C adapter?
>
> I naïvely transformed some C++ to D, without consideration of D 
> runtime systems, compiled it and it all worked. Which is good, 
> but…

Surely the reasonable choice is to always initialize the runtime 
in a sensible location? What do you gain from not initializing 
it, and is it really worth the effort?

core.runtime has Runtime.initialize and Runtime.terminate. In a 
Windows DLL, it's sensible to use DllMain to call these. 
core.sys.windows.dll.SimpleDllMain is a mixin template that makes 
it easy:

version(Windows)
{
     import core.sys.windows.dll;
     mixin SimpleDllMain;
}

On Linux and other ELF-using platforms, initialization and 
deinitialization functions could be placed in the .init and 
.deinit special sections, but I don't know if druntime has any 
convenient provisions for this. With GDC and LDC you can probably 
use a pragma to put functions in these sections, but I don't know 
if DMD has such a pragma.

I don't know what the equivalent is for Apple's Mach-O shared 
libraries.



More information about the Digitalmars-d-learn mailing list