Steven Schveighoffer escribió:
On Thu, 28 May 2009 17:37:57 -0400, Ary Borenszweig
<a...@esperanto.org.ar> wrote:
Frank Benoit escribió:
Unknown W. Brackets schrieb:
Probably a silly idea, but what about (or similar):
static this: mod.name, mod.name2, mod.name3
{
}
For a dependency list. I may be wrong, but afaik the main problems
stem
from either wrong order or co-dependence (which needs to be solved by
the programmer.)
At least with this, you could ask the compiler for an order,
potentially. If the other modules had no static this, it could ignore
it, allowing future proofing.
But, maybe that's an ugly hack.
-[Unknown]
In Java the
static { /* static ctor code */ }
does not have the circular dependency problem. why is that?
Consider this:
class A {
public static int x;
static {
x = B.x + 10;
}
public static void main(String[] args) {
System.out.println("A.x = " + A.x);
System.out.println("B.x = " + B.y);
}
}
class B {
public static int y;
static {
y = A.x + 10;
}
public static void main(String[] args) {
System.out.println("A.x = " + A.x);
System.out.println("B.x = " + B.y);
}
}
If you run A, you'll get:
A.x = 20
B.x = 10
If you run B, you'll get:
A.x = 10
B.x = 20
That's because the static { } is run when the class is first loaded.
So in a sense there is the problem is circular dependency: depending
on the order of class loading you get different results.
Is this the problem being discussed, how to define the order of static
this?
Yes.
So Java basically allows the circular dependency because it assumes you
know what you are doing :) That could be even worse than the D solution!
However, I think this could be solved in Java more readily than it could
be in D...
The thing is, I've been using Java for more than 7 years now and I never
got any error because of intialization dependency. It would be nice to
turn that check off in D and see the results. Maybe no one will complain
about it.
(Or maybe it was added because someone complained about it, some years
ago? I don't know...)