On Wednesday, 28 November 2012 at 22:46:47 UTC, Walter Bright
wrote:
On 11/29/2012 3:23 AM, Max Samukha wrote:
That is a problem for anyone who builds a library for general
use.
I don't see how any library for general use would be importing
user modules, so there shouldn't be a circular import
dependency between user modules and library modules.
module library;
shared string[] registry;
mixin template RegisterSomething(alias something)
{
shared static this() { registry ~= something.stringof; }
}
----
module user_b;
import user_a;
import library;
int y;
mixin RegisterSomething!y;
----
module user_a;
import user_b;
import library;
int x;
mixin RegisterSomething!x;
We have:
library
/ \
user_a <-circle-> user_b
That is why I am saying that we are imposing a certain structure
(no circular imports) on the user of our library. For example, if
the user prefers (or has to use, in my case) a class-per-module
structure, circular dependencies between user modules are
practically unavoidable and the library cannot be used there.