DIP16: Transparently substitute module with package

Jonathan M Davis jmdavisProg at gmx.com
Fri Apr 6 17:25:23 PDT 2012


On Friday, April 06, 2012 08:09:28 Steven Schveighoffer wrote:
> I feel like most people will still import the main package module, and not
> the submodules.  I don't think I ever wrote a piece of java code that
> didn't have:
> 
> import java.io.*;

Which is actually considered bad practice in Java, though a lot of people do 
like to do it. What's generally considered good practice is to explicitly 
import every module/class, and Eclipse likes to underline imports in red if 
you don't.

> I keep coming back to std.container.  Already it's large, and full of
> unrelated types.  It's only going to get worse.
> 
> Now, I fully agree that having some way to import a package by itself
> without having to import all its modules would be ideal (as well as
> splitting a large module into submodules that live in the same
> namespace).  I think DIP15 has that covered.

DIP15 doesn't fix the explicit path problem though. You can't change 
std/algorithm.d into std/algorithm/ (with sorting.d, search.d, etc.) without 
breaking code. You could make std/algorithm.d publicly import std/alg/* and 
then DIP15 would allow you to import std.alg to get all of its sub-modules, 
but you're still forced to use a module to publicly import symbols as part of 
a migration path, and you can't split a module in place.

DIP15 also less powerful than having a package.d, since it'll automatically 
import ever public symbol when it may be desirable to have it only import a 
subset of them or to publicly import something from another module (e.g. as 
part of a migration path - like moving the benchmarking code in std.datetime 
to std.benchmark rather than lumping it with the std.datetime stuff when it's 
split into separate modules). That may or may not be a big deal, but it does 
mean that DIP15 isn't as powerful as DIP16's package.d solution in that 
regard.

DIP15 also doesn't give a means of documentating a package. By having a 
package.d file, we have a really good place to provide an overarching 
description for the package in ddoc.

So, while I don't like the second part of DIP16 at all (i.e. the std.sort 
stuff), I think that the package.d part is a much better way to go.

- Jonathan M Davis


More information about the Digitalmars-d mailing list