DIP16: Transparently substitute module with package

Jonathan M Davis jmdavisProg at gmx.com
Thu Apr 5 11:24:10 PDT 2012


On Thursday, April 05, 2012 09:49:59 Steven Schveighoffer wrote:
> On Thu, 05 Apr 2012 09:23:25 -0400, Timon Gehr <timon.gehr at gmx.ch> wrote:
> > On 04/05/2012 02:58 PM, Steven Schveighoffer wrote:
> >> No, public imports simply mean that you can view the publicly imported
> >> module. It does *not* add aliases to the importing module.
> > 
> > Have you tried it?
> 
> I just did. OK, what the hell are we arguing about then?!
> 
> DIP16 is worksforme :)
> 
> See this part of the spec:
> 
> http://dlang.org/module.html
> 
> Read the part on public modules. You may understand why I didn't know
> about that "feature" (which seems to work on all the installed compilers I
> have, back to 2.033). I just read the public import part of TDPL, and
> there it is, all spelled out quite nicely. I'm going to file a bug
> against the spec... grrr...
> 
> I'm now firmly in the "we don't need to change anything, just refactor the
> modules and use public import" camp. We don't even need to change
> ANYTHING in the compiler! Forget everything I said before in this thread
> ;)
> 
> I suppose the only thing we don't get is being able to have a module and a
> package with the same FQN. I don't see that being a major issue.

What doesn't work is being able to turn a module into a package with the same 
name. Right now, we could create a std.alg package with sub-modules containing 
all of std.algorithm's functionality and change std.algorithm to pubicly 
import them all, but you can't turn std.algorithm itself into a package 
without breaking code. The package.d portion of the proposal makes it so that 
you can.

Now, public import's current behavior is _almost_ enough to make the second 
part completely unnecessary. The only change that would be required would be 
to make it so that std.algorithm.x looks in std/algorithm/package.d if there's 
no std.algorithm.x module, because otherwise the public imports in package.d 
would be putting all of the symbols in std.algorithm.package, not 
std.algorithm (that, and package.d isn't legal at present).

So, the whole point of this proposal - to seemlessly allow the transition of a 
module to a package in place - _does_ require a language/compiler change. But 
moving stuff from a module to a new package does work already.

- Jonathan M Davis


More information about the Digitalmars-d mailing list