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...

-Steve

Reply via email to