static this sucks, we should deprecate it
Steven Schveighoffer
schveiguy at yahoo.com
Thu May 28 17:06:20 PDT 2009
On Thu, 28 May 2009 17:37:57 -0400, Ary Borenszweig <ary at 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
More information about the Digitalmars-d
mailing list