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

Reply via email to