Inner modules / namespaces
Bruno Medeiros
brunodomedeiros+spam at com.gmail
Sun Sep 16 05:19:44 PDT 2007
Bill Baxter wrote:
> One thing I find I keep wishing D had was a way to make a distinct
> namespace inside a file. This would make it possible to group bits of
> functionality into namespaces without having to break each one out into
> a separate file.
>
> I think the most natural way to do this would be to allow inner modules.
> These modules would not be directly importable from outside but would
> be accessible from outside if public.
>
> Basic example:
>
> ------
> private module Detail {
> import std.stdio;
> import std.string;
> import std.regex;
> }
> ....
> Detail.writefln("hi there");
> ------
>
> This would basically be equivalent to making a separate file called
> "Detail.d" whose contents are
>
> public import std.stdio;
> public import std.string;
> public import std.regex;
>
> And then doing
>
> static import Detail;
>
> In the original module. Except you don't have to actually go through
> the rigmarole of making a separate file. *ALSO* Detail and the main
> module would have same-module access to each others privates.
>
> The mutual access is the big thing. You can make separate modules now,
> but that's not so useful for implementing a private "Detail" namespace
> that hides a bunch of non-public functionality behind one name. Yes,
> you can achieve similar results with a big private {...} block but the
> difference is that you can't give that private block a name. By putting
> your private stuff in one namespace, it becomes easier for readers of
> the code to figure out what's private functionality and what's not.
>
> The other advantage is that it makes it easier to aggregate several
> modules under a common namespace within a module. For instance I often
> wish I could do something like
>
> private module Util {
> import std.string;
> import my.utils;
> import your.utils;
> }
>
> and get at all those Util things via one Util prefix. Yes I can do that
> by creating another module with public imports, but I never do, because
> its a pain, and this particular combination of Util modules is probably
> never going to be used anywhere besides this one module. So it doesn't
> really make sense to create a world-visible module that's basically
> useless aside from inside this one module.
>
> I'm planning to throw this up as an enhancement request on Bugzilla, but
> I thought I'd put it out here first to see what the reaction is.
>
> --bb
It would be a nice start (and useful just on itself) if imports were to
work on scopes other than the module scope.
--
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
More information about the Digitalmars-d
mailing list