static this sucks, we should deprecate it
Christopher Wright
dhasenan at gmail.com
Thu May 28 15:22:26 PDT 2009
Steven Schveighoffer wrote:
> On Thu, 28 May 2009 13:59:10 -0400, Ary Borenszweig
> <ary at esperanto.org.ar> wrote:
>
>> Is there something wrong in my reasoning?
>
> It's just that you aren't always compiling every file at the same time...
>
> Static this' implementation isn't part of the public interface, so it
> might not even *be* in the import file (if it's a .di file). Where do
> you throw the compiler error, if you can't determine the circular
> reference at comiple time?
>
> I think with the import system the way it is, the only safe prospect is
> to have it error like it does now. You either need some attribution
> like has been suggested in this thread (and have the compiler verify
> that attribution), or change the import system.
The compiler could examine the symbols used in the static constructors
to build these dependency lists. Then it's a matter of assembling a
graph and checking for cycles. Each ModuleInfo would reference the
modules its static constructors depend on in addition to the ones it
imports. This would be used by the runtime to determine the proper order
in which to call static constructors.
As a first step, the compiler could mark a module as having static
constructors. Then the cycle detection could happen at compile time
rather than runtime. The sooner you detect errors, the better.
More information about the Digitalmars-d
mailing list