On Thursday, 19 January 2012 at 21:22:23 UTC, Zachary Lund wrote:
On Thursday, 19 January 2012 at 19:06:41 UTC, Alex Rønne
Petersen wrote:
On 19-01-2012 19:52, Zachary Lund wrote:
I've been wondering in the back of my mind for awhile now and
it really
hasn't bothered me much but I figured I might as well get it
off my mind.
Why is there a need for a default "standard" library? I can
understand
about some of the core stuff, but hell, even threads can be
handled via
a 3rd party library. Why must Phobos or any library be a part
of D itself?
I'm unfamiliar with the reason for C++ having a standard
library as well
(which I bring up when people bitch about poor design or
something
similar which I usually get no viable or any answer at all).
More of an
ignorant question probably but oh well...
Without a standard library, interoperation between libraries
becomes a huge pain, because there's no standard
interface/design for various things such as threads,
containers, bigints, networking, file I/O, etc.
Not to mention, if a standard library didn't exist, you'd have
to adapt your build system to whatever arbitrary amount of
libraries you need to use.
C++ has interoperability between containers and allocators
which have done much good. However, they hardly have any
libraries that force preferential design that doesn't require
flexible implementation.
Things like bigint and networking are not based on optimized or
flexible implementation but on ease of use. You generally
choose a BigInt library that is the easiest to use, not the one
that has the most flexibility when it comes to which
implementation it uses or the one that is most optimized. Also,
I'm not sure who would reuse the std.socket design. There are
plenty of libraries that give a more robust and clean interface
to sockets.
I don't mind robustness but I do not like being forced onto a
preferential design (which doesn't require flexible
implementation) simply because it is in the "standard". I do
not think the etc.curl or std.bigint promote library
interoperability. Thus, I do not think these modules belong in
the library considered "standard".
Also, libraries aren't really that big of a pain to add to a
build system. It's generally just a matter of finding where the
library is. On Linux, this is simple. On Windows, it generally
requires either environmental variable or user input. I don't
see any way around this nor do I find putting everything into
one glob of a library a solution.
I also forgot to mention about library reuse. You don't tend to
use BigInt libraries all the time. In 6 years of programming,
I've not used a single one. Nor have I used regex in a C program.
Nor have I needed the constant use of MD5 hashing. And I sure as
hell did not need the constant use of CURL or ZLib nor have I
ever even used those libraries.