On Thursday, 17 September 2015 at 16:42:52 UTC, bitwise wrote:
One solution which could work is to disallow static linking of
druntime on OSX completely....meaning, either don't even
distribute a static druntime for OSX, or make shared druntime
the default. This way, druntime would only ever be initialized
once per process. Knowing this, linux ctors/dtors could be
added to druntime to initialize it, eliminating the need to
call rt_init/rt_term before and after main(). Also, if druntime
were loaded into a C-hosted binary, druntime would
automatically be initialized by the ctors/dtors. Also, for the
ctors/dtors, they could be added to the druntime build, and
wouldn't having to be compiler generated.
I'm not sure about the difference in performance cost over
static vs shared druntime, but it seems that this is the way
things are done on OSX. If you look in /usr/lib/ on a mac,
practically everything is a shared lib.
Bit
I use static linking of druntime already all the time and rely on
it to be able to do something instead of nothing (where would I
even found that shared druntime?). Apart from this one horrible
bug, static runtime seems very much working. Remove possibilities
to do work would make my situation worse.
I can call rt_init / rt_term at the right place with LDC global
constructor/destructors no problem. The problem is this callback
that cannot be removed. Don't know why it's there in the first
place since by definition a shared library can't control when
it's unloaded.