On Tuesday, 26 August 2014 at 19:22:22 UTC, Daniel Murphy wrote:
"eles" wrote in message
Apart from the fact that it's too late to change of course.
Well, that separation is just a detail of the implementation, not
of the specification. You could simply say that phobos has
several namespaces: std, etc, core.
Druntime and phobos both had c/OS bindings at some point
(core.stdc + std.c) but duplication is bad, so they were/are
being moved into druntime.
The question of dupplication may be addressed now better, since
the newly fixed bug about hierarchical packaging.
In druntime you have the true, hidden runtime code (startup,
profiler, coverage, unittesting, AAs), plus core language stuff
(GC, Thread (+core.time)).
_only that_ should be the runtime. And the sole part that one
needs to port in order to claim having a full port of the D
language (that is, the compiler). These are the tires of the
cars, the things that touch the ground. Everything else is
optional. (Pirelli had a nice advertisemnt with this line)
And, to go further, only c/OS bindings required for this are to
be embedded at this level.
Phobos is supposed to be 100% optional, although it isn't,
quite. If you don't want to use phobos, for example if you are
automatically porting a large C++ application, it's nice to
simply ban phobos and have that clear distinction.
Phobos shall be 100% optional, otherwise you don't have a
language, but a framework. This is the separation line: the
runtime is a must for the language, the standard library is not.
If in doubt wether one piece belongs, cut here.