Module system of D2: to be fixed still

Georg Wrede georg.wrede at iki.fi
Thu Apr 23 01:28:49 PDT 2009


bearophile wrote:
> Leandro Lucarella:
>> grauzone:
>>> - the current import semantics should be redone such that "import
>>>   a.b.c.d;" works like "import d = a.b.c.d;", and add a new syntax like
>>>   "import a.b.c.d.*;" to get the current behavior
>> Shouldn't be static import a.b.c.d;? It's a little odd to get imported
>> just the last part. I'm not convinced though.
> 
> davidl:
>> Yes, the package does not offer us enough functionalities. However,
>> only saying "I have discussed/talked/stated/complained something XXX
>> times" does nothing good to the current state. Contrarily, I prefer
>> one list the reasons of why current one is broken and corresponding
>> sophisticated solutions.
> 
> I can answer both, adding a small change from what I have said last time :-)
> 
> import foo;
> Imports in the current namespace the "foo" module name.
> 
> import foo: *;
> Imports in the current namespace all the names inside foo, but not the "foo" module name itself.
> 
> import foo: bar, baz;
> Imports in the current namespace the "bar" and "baz" names, but not the "foo" module name.
> bar and baz can be anything, packages too.

It's a shame that I never took a combinatorics course. This whole issue 
looks like a homework assignment from the second semester:

"(0) Enumerate the set of use cases for importing source code modules. 
(1) Outline the minimum amount of directed graphs that covers all these 
use cases. (2) Either prove that circular graphs are unavoidable, or 
show how they can be avoided with a standard transform." etc.

At any rate, we should totally avoid discussing syntax *until* we have 
come up with the requirements that are needed. There's no use in 
cluttering the discussion with syntax while we aren't clear on exactly 
what is needed (and what is not needed).

Oh, and for clarity, we probably should define Circular as a mutual or 
an a->b->c->a dependency. The case a->b->d + a->c->d is, IMHO not 
Circular. It should have some other name, to avoid confusion.

As for Friend modules, these might arise when a library includes (for 
the sake of practicality) sub-modules. Can the library programmer be 
required to refactor the Friend needs to a new module that the other two 
both import?

A library with a main and sub modules, where the sub modules may be 
individually imported (as in std.c.whatever), seems to impy that 
importing the sub module does not necessitate making the main module 
visible. It seems to merely be a path component in finding the sub 
module. Probably this should be the norm.


(Just scratching the top of the iceberg here.)



More information about the Digitalmars-d mailing list