Import concerns revisited

xs0 xs0 at xs0.com
Tue Jul 11 05:01:12 PDT 2006


Walter Bright wrote:
> xs0 wrote:
>>> The imports can be placed anywhere in the module, even (ugh) inside 
>>> class definitions. 'import' isn't any easier to search for than 'alias'.
>> I was wondering - is there any good reason to allow imports everywhere?
> 
> It's usually a good idea to make things as orthogonal, with as few 
> special case, as possible. Since imports are a declaration, they should 
> work wherever declarations work.

OK, I guess, I never thought of them as declarations... Must be too much 
Java ;)

>> OT: if you'll be changing the import system, _PLEASE_ make private 
>> imports the default.
> 
> It's too late for that, sorry. Also, everything else in D is public by 
> default, and consistency is sometimes better than special case rules, 
> even if those special case rules make some things easier.

Well, I agree that consistency is often better than special case rules, 
but I don't agree this is one of those cases. Just so I wouldn't be 
biased by my own experience, I went and counted all the imports in 
mango.io, which confirmed my suspicions - the vast majority of imports 
are private.. My count is 173 imports, 32 of which were public (~18%). 
If it wasn't for one-class-per-module Mango seems to be doing, my guess 
is that there'd be no public imports at all, as most of them seem to 
just be convenience imports for various interfaces.

And I agree with Lars - it's not too late and public being the default 
for everything may not be the best option anyway. For example, in Java 
the default is package-private, which would roughly translate to 
module-private in D. I rarely need to change that default (i.e. specify 
a different protection), as things are usually pretty consistent with 
what I want that way.

Finally, your own stated major goal for D is to "improve productivity .. 
by adjusting language features so that common bugs are eliminated from 
the start", and from what I've seen in the newsgroups, forgetting to 
import privately is definitely a common bug, and nobody seems to expect 
an unqualified import to be public.


xs0



More information about the Digitalmars-d mailing list