On 2010-03-11 21:35:42 -0500, Walter Bright <newshou...@digitalmars.com> said:

Michel Fortin wrote:
Ah, you're right indeed. I thought it was std.stdiobase that imported std.stdio, but its the reverse so it's a little better.

Still, std.stdiobase uses this clever external definition to avoid a circular import:

    extern(C) void std_stdio_static_this();

This hack is basically just a bypass of the circular dependency check for one module. If more than one module use it, you're at risk of having the behaviour dependent on the link order.

No, the transitive nature of the dependency checking insures it is NOT dependent on link order.

What I meant is that this is dependent on link order (and I tested it):

module a;
import a_base;
import b;
int ai;
extern(C) void initA() { ai = bi+2; }

module a_base;
extern(C) void initA();
static this() { initA(); }

module b;
import b_base;
import a;
int bi;
extern(C) void initB() { bi = ai+4; }

module b_base;
extern(C) void initB();
static this() { initB(); }

module main;
import b;
import a;
import std.stdio;
void main() {
        writeln("a.ai = ", ai, "  b.bi = ", bi);
}

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to