Our template emission strategy is broken
James Hofmann via Digitalmars-d
digitalmars-d at puremagic.com
Wed Nov 11 18:41:52 PST 2015
On Wednesday, 11 November 2015 at 17:19:31 UTC, David Nadlinger
> Of course, many of the problems could have probably been
> avoided if there was an iron-clad rule that the module
> dependency graph must remain acyclic from the beginning of
> development (at least at the level of units of compilation).
> But how could they have known how bad it would get otherwise? I
> don't think this is reflected in our documentation anywhere, at
> least not in a prominent place.
> — David
There is some literature about whether this kind of rule,
enforced at compile-time, can benefit software architecture in
general, in the context of F# projects vs. similar C# projects.
(Answer: probably yes - there's a relationship between cyclical
dependencies and other accidental coupling; you can make some
case for it both theoretically and in statistics)
Looking at what D does now, at least according to "The D
Programming Language" (2010), it tries to allow any ordering but
throws an exception at runtime when ambiguious cases are
detected. So there's already some precedent to avoid cyclical
dependency simply to avoid those errors. The coupling argument
and the compile-times argument just add more urgency to it.
Nim enforced the same dependency rule as F# the last time I
looked, but I think that position was softening towards
"optional" due to some community pressure. I don't think anything
makes this architecture style actually impractical and it might
help to have the compiler warn towards it - although the same
kind of community pressure is going to arise if it did do so.
After all, nobody likes to be told that they are writing Bad Code
More information about the Digitalmars-d