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.




Reply via email to