DMD 1.038 and 2.022 releases
Nick Sabalausky
a at a.a
Sun Dec 21 13:49:46 PST 2008
"John Reimer" <terminal.node at gmail.com> wrote in message
news:28b70f8cfcfe8cb30c0a0e2ac70 at news.digitalmars.com...
> Hello Sean,
>
>> bearophile wrote:
>>
>>> Walter Bright:
>>>
>>>> Excess isn't the problem, I want to see if import cycles is.
>>>>
>>> Generally all the modules in my dlibs import each other. This is
>>> nearly unavoidable, if a module contains string functions, and
>>> another one contains math stuff, the string module will want to use
>>> some math stuff and the math module may need string representations
>>> and processing. In the D specs I haven't seen an advice to not use
>>> cyclic imports, so I don't want such compiler flag, I prefer a
>>> compiler able to manage such cyclic imports efficiently.
>>>
>> Cyclic imports are a bad idea in general because of the impact they
>> have on verifiability (unit testing). But as you say, sometimes
>> they're unavoidable.
>>
>> Sean
>>
>
>
> I'd going to wager that they are /often/ unavoidable, especially in ported
> projects from other languages that have either no concept or a different
> concept of modules/packages.
>
> DWT is perhaps the single worse example of cyclic imports. I'm not sure
> how the design could have been improved in Java's SWT. All it takes is
> the need to reference one symbol in each module (because each object
> apparently needs to just "know" about the other) to create a cyclic import
> issue in D.
> Static initialization has also been a problem in DWT such that a few
> significant workarounds were necessary.
>
> I agree that the interdepencies should be avoided in all new projects
> designed specifically for D. I'm just not sure what the solution would be
> for the great mass of ported software.
>
> -JJR
>
This might be a naive idea, and wouldn't solve the problems with cyclic
dependancies in the general case: But regarding the static initializaton
issue (which I've come up against myself), what if static initializers
allowed some sort of clause like this:
module foo;
import bar;
// Exact syntax not really important right now
this() dependsOn(bar) {
// Do some initing that depends on
// bar's static initializer having been run.
}
That would force foo's static initialization to be run sometime after bar's.
Obviously, any cycles in the graph of "dependsOn"s would be an error.
More information about the Digitalmars-d-announce
mailing list