On Tuesday, 10 July 2012 at 23:54:49 UTC, Antti-Ville Tuunainen
wrote:
[…] However, for any kind of efficiency, the templates also
need to be able to directly call functions and/or access the
state from src/gc/gcx.d. I cannot just import it, because it
won't be available during (user code) compilation. What is the
correct approach?
The »correct« approach, as in what is currently done for such
situations, would be to define the functions you need as
extern(C) in gc.gc, and then just declare them where you need.
The reason behind this is that core.*, gc.* and rt.* are designed
to be three completely independent entities, or at least were
originally supposed to be. Compiler writers would implement the
rt_ functions, GC implementors would mess around with gc_*, and
the different parts could be combined by just linking libraries
together, with the user-facing core.* implementation staying the
same.
In the case of GC code, the situation is a bit more complex due
to the GC proxy mechanism, which may or may not go away in the
future – just look at gc/gc.d, and you should get a pretty good
idea what's going on.
David