std.compress
Jakob Ovrum
jakobovrum at gmail.com
Wed Jun 5 05:02:37 PDT 2013
On Wednesday, 5 June 2013 at 07:39:12 UTC, Jonathan M Davis wrote:
> Maybe some do, but many don't, and 1000 lines is _far_ from too
> much. If we
> start making modules that small, we're going to end up with
> tons of them to
> wade through to find anything.
>
> - Jonathan M Davis
We have a standard library in disagreement with the language's
encapsulation mechanics. The module/package system in D is almost
ignored in Phobos (and that's probably why the package system
still has all these little things needing ironing out). It seems
to owe influence to typical C and C++ library structure, which is
simply suboptimal in D's module system.
Third-party libraries tend to do a much better job at this. For
example, Tango goes all out and embraces the package and module
system, and the result is an extremely organized tree of modules
with appropriate granularity. Code isn't hard to find because
everything isn't just dumped into (bloated) blobs in a flat
structure like in Phobos; it's organized into a tree. It seems
like a no-brainer with the D language, and Phobos is the only D
library I know that doesn't embrace this style of organization.
The result is awful coupling throughout; with Phobos, we can't
even write Hello World without pulling in half of the standard
library.
It's not just about the actual dependencies a module has, but the
perceived dependencies; important from a readability perspective.
I know a lot of D programmers embrace selective imports when
working with Phobos, because just seeing a plain import statement
such as "import std.datetime;" tells you very little about what
the importing module actually does, and it's harder to figure out
exactly where unqualified symbols come from when reading the
module's code.
I think the programmer should have a choice of convenience versus
readability/fine dependency management when importing. The
current module system does a decent job at enabling this already,
and it's bound to get better with improvements like DIP37.
Scripts and certain application code may want to prioritize
productivity over finely managed dependencies, while library code
- especially the *standard* library! - should definitely aim for
lean coupling that makes sense.
To that end, I think a lot of improvements can be made without
breaking user code, but I'd be very much willing to see all kinds
of breakage if it means we can get rid of the present standard
library of substandard quality. The language may have been
declared stable, but Phobos is in no laudable state.
More information about the Digitalmars-d
mailing list