Argh!! Cyclic dependencies!!!
Nick Sabalausky
a at a.a
Fri Mar 18 23:52:19 PDT 2011
"Michel Fortin" <michel.fortin at michelf.com> wrote in message
news:im0s22$2fap$1 at digitalmars.com...
> On 2011-03-18 19:24:41 -0400, Jason House <jason.james.house at gmail.com>
> said:
>
>> Nick Sabalausky Wrote:
>>
>>> These module constructor "Cyclic dependencies" errors are really
>>> starting to
>>> piss me off. I feel like I'm back in the days when you'd sneeze and DMD
>>> would vomit out 100 forward reference errors just because you didn't
>>> write
>>> your whole damn app in one giant ultra-module. (/me takes a breather to
>>> chill out...Ok...)
>>>
>>> I don't suppose there's any chance we could get a quick little:
>>>
>>> import foo;
>>>
>>> pragma(staticCtorsAvoid, foo);
>>> // Or
>>> pragma(staticCtorsRunBefore, foo);
>>> // Or
>>> pragma(staticCtorsRunAfter, foo);
>>>
>>> static this()
>>> {
>>> // do trivial shit that doesn't touch foo
>>> }
>>>
>>
>> Could module-level globals be treated like local variables to the static
>> constructor for the purpose of checking purity?
>>
>> AKA
>> static this() pure
>> {
>> // trivial stuff
>> // calls weakly pure functions
>> // writes module-level globals
>> // reads module-level globals
>> // etc...
>> }
>>
>>
>> That's compiler enforceable and effectively means that stati constructor
>> does not count as part of a cyclic dependency...
>
> That would work nicely, except for one thing: static constructors can be
> used to build immutable global variables. And pure functions have access
> to immutable global variables. This means two things:
>
> 1. purity isn't really guarantied for pure functions inside a module
> constructor
> 2. pure functions could access immutable global variables of other modules
> before their initialization
>
> I think the pragma is a more viable solution, athough not very elegant.
>
Yea, I agree the pragma is inelegant, but I figure a quick-n-dirty stop-gap
workaround for this is a lot better than waiting for a proper solution.
More information about the Digitalmars-d
mailing list