I&#39;d like to see a way to make Ddoc produce documentation for the public imports of a module.  This way we could make a simple, coarse-grained import system for the user (i.e. import std.container and you&#39;ve got every container you could possibly want), but have each container be implemented in its own file in std.containerimpl.somecontainer for development convenience and publicly imported by std.container.  The only major problem I see with this is Ddoc, as mentioned above.<br>
<br>The bottom line is that, when using D, I hate being forced to write tons of import statement boilerplate to do anything non-trivial (what you get if you make the import system fine-grained) but when developing Phobos I hate having to scroll through 6,000 line files like std.algorithm (what you get when you make the import system coarse-grained).  I&#39;d like to clean this up from the developer&#39;s perspective, but in a way that&#39;s transparent to the user.<br>
<br><div class="gmail_quote">On Thu, Sep 16, 2010 at 9:46 AM, Jacob Carlborg <span dir="ltr">&lt;<a href="mailto:doob@me.com">doob@me.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I don&#39;t think it&#39;s the number of modules that makes it hard, it&#39;s because of the organization of the modules. Too many modules in one package (std) and too much code in one module. Take std.container for example, every container type in on module, that&#39;s just insane. It should clearly be, in my opinion, a container package (or actually I would prefer it to be called collection) and one module per container type. std.container is almost 3500 LOC and have four (or something like that) container types, what happens when (if) we get more container types like different types of trees and other containers, just put everything in std.container? That is just too much code in one module. Just my opinion.<br>

<br>
<br>
/Jacob Carlborg<br>
<div><div></div><div class="h5"><br>
On 16 sep 2010, at 15:30, Lars Tandle Kyllingstad wrote:<br>
<br>
&gt; I disagree,  I like the flat hierarchy.<br>
&gt;<br>
&gt; And just to clarify my earlier e-mail, for which I may have chosen a bad<br>
&gt; subject:  I do not think that the number of modules in Phobos is too<br>
&gt; high in general.  I think it has too many *obsolete* modules, and too<br>
&gt; many modules with very limited functionality.<br>
&gt;<br>
&gt; If we got rid of the cruft that has been accumulating, and merge some of<br>
&gt; the smaller modules into larger ones, Phobos would seem a lot less<br>
&gt; unwieldly.<br>
&gt;<br>
&gt; -Lars<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Thu, 2010-09-16 at 14:54 +0200, Jacob Carlborg wrote:<br>
&gt;&gt; I think it&#39;s time for Phobos to start using sub packages and drop the flat module hierarchy.<br>
&gt;&gt;<br>
&gt;&gt; On 15 sep 2010, at 13:56, Lars Tandle Kyllingstad wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; I said in an earlier e-mail that I think std.file, std.path, and<br>
&gt;&gt;&gt; std.stdio should remain separate modules.  However, I do think that, for<br>
&gt;&gt;&gt; a library with a flat module hierarchy, Phobos has acquired way too many<br>
&gt;&gt;&gt; modules.  Some of them should (and will) be removed, and some could be<br>
&gt;&gt;&gt; merged.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The following are my suggestions for how to trim the Phobos module list<br>
&gt;&gt;&gt; a bit.  At the bottom I&#39;ll show the resulting module list.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Modules which could be removed, most of them *right now*, because they<br>
&gt;&gt;&gt; are superseded by other modules or built-in functionality:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       std.bind       - use lambdas or nested functions instead<br>
&gt;&gt;&gt;       std.boxer      - superseded by std.variant<br>
&gt;&gt;&gt;       std.contracts  - superseded by std.exception<br>
&gt;&gt;&gt;       std.cstream    - superseded by std.stdio.File<br>
&gt;&gt;&gt;       std.demangle   - superseded by core.demangle<br>
&gt;&gt;&gt;       std.iterator   - superseded by std.range<br>
&gt;&gt;&gt;       std.openrj     - obscure format, better to use std.json<br>
&gt;&gt;&gt;       std.perf       - superseded by StopWatch<br>
&gt;&gt;&gt;       std.regexp     - superseded by std.regex<br>
&gt;&gt;&gt;       std.stream     - ranges are the way to go<br>
&gt;&gt;&gt;       std.syserror   - superseded by std.windows.syserror<br>
&gt;&gt;&gt;       std.c.*        - superseded by core.stdc.* and core.sys.*<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Modules for which there is no documentation on the D home page, and<br>
&gt;&gt;&gt; which I suspect nobody are using:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       std.loader<br>
&gt;&gt;&gt;       std.stdarg<br>
&gt;&gt;&gt;       std.typelist<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Modules which can be merged into a single one, possibly after<br>
&gt;&gt;&gt; substantial/complete rewrites:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       std.compiler + std.cpuid + std.system (= std.sysinfo?)<br>
&gt;&gt;&gt;       std.ctype + std.uni (= std.character?)<br>
&gt;&gt;&gt;       std.date + std.dateparse + std.gregorian + std.stopwatch<br>
&gt;&gt;&gt;         (= std.datetime?)<br>
&gt;&gt;&gt;       std.encoding + std.utf (= std.encoding?)<br>
&gt;&gt;&gt;       std.socket + std.socketstream (= std.socket (or <a href="http://std.net?" target="_blank">std.net?</a>))<br>
&gt;&gt;&gt;       std.typecons + std.typetuple (= std.types?)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; And finally, some renaming suggestions (which were actually posed by<br>
&gt;&gt;&gt; Andrei):<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       std.conv -&gt; std.convert<br>
&gt;&gt;&gt;       std.stdio -&gt; <a href="http://std.io" target="_blank">std.io</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; All this gives us the following, nice and short (well... shorter, at<br>
&gt;&gt;&gt; least) module list:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       std.algorithm<br>
&gt;&gt;&gt;       std.array<br>
&gt;&gt;&gt;       std.base64<br>
&gt;&gt;&gt;       std.bigint<br>
&gt;&gt;&gt;       std.bitmanip<br>
&gt;&gt;&gt;       std.character<br>
&gt;&gt;&gt;       std.complex<br>
&gt;&gt;&gt;       std.concurrency<br>
&gt;&gt;&gt;       std.container<br>
&gt;&gt;&gt;       std.convert<br>
&gt;&gt;&gt;       std.datetime<br>
&gt;&gt;&gt;       std.encoding<br>
&gt;&gt;&gt;       std.exception<br>
&gt;&gt;&gt;       std.file<br>
&gt;&gt;&gt;       std.format<br>
&gt;&gt;&gt;       std.functional<br>
&gt;&gt;&gt;       std.getopt<br>
&gt;&gt;&gt;       std.intrinsic<br>
&gt;&gt;&gt;       <a href="http://std.io" target="_blank">std.io</a><br>
&gt;&gt;&gt;       std.json<br>
&gt;&gt;&gt;       std.math<br>
&gt;&gt;&gt;       std.md5<br>
&gt;&gt;&gt;       std.metastrings<br>
&gt;&gt;&gt;       std.mmfile<br>
&gt;&gt;&gt;       std.numeric<br>
&gt;&gt;&gt;       std.outbuffer<br>
&gt;&gt;&gt;       std.path<br>
&gt;&gt;&gt;       std.process<br>
&gt;&gt;&gt;       std.random<br>
&gt;&gt;&gt;       std.range<br>
&gt;&gt;&gt;       std.regex<br>
&gt;&gt;&gt;       std.signals<br>
&gt;&gt;&gt;       std.socket<br>
&gt;&gt;&gt;       std.stdint<br>
&gt;&gt;&gt;       std.string<br>
&gt;&gt;&gt;       std.sysinfo<br>
&gt;&gt;&gt;       std.traits<br>
&gt;&gt;&gt;       std.types<br>
&gt;&gt;&gt;       std.variant<br>
&gt;&gt;&gt;       std.xml<br>
&gt;&gt;&gt;       std.zip<br>
&gt;&gt;&gt;       std.linux<br>
&gt;&gt;&gt;       std.windows<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Just something to think about.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -Lars<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; phobos mailing list<br>
&gt;&gt;&gt; <a href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br>
&gt;&gt;&gt; <a href="http://lists.puremagic.com/mailman/listinfo/phobos" target="_blank">http://lists.puremagic.com/mailman/listinfo/phobos</a><br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; phobos mailing list<br>
&gt; <a href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br>
&gt; <a href="http://lists.puremagic.com/mailman/listinfo/phobos" target="_blank">http://lists.puremagic.com/mailman/listinfo/phobos</a><br>
<br>
</div></div>--<br>
<font color="#888888">/Jacob Carlborg<br>
</font><div><div></div><div class="h5"><br>
_______________________________________________<br>
phobos mailing list<br>
<a href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br>
<a href="http://lists.puremagic.com/mailman/listinfo/phobos" target="_blank">http://lists.puremagic.com/mailman/listinfo/phobos</a><br>
</div></div></blockquote></div><br>