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.