It is the year 2020: why should I use / learn D?

Jonathan M Davis newsgroup.d at jmdavisprog.com
Fri Nov 16 03:22:00 UTC 2018


On Thursday, November 15, 2018 7:30:15 PM MST AlCaponeJr via Digitalmars-d 
wrote:
> On Friday, 16 November 2018 at 02:02:26 UTC, H. S. Teoh wrote:
> > ... after that Tango vs. Phobos fiasco....
>
> Do you mind to explain this for newcomers?

Walter has always been focused primarily on dmd, not the standard library or
its runtime. During D1, Andrei was not involved, and Walter was the main
person behind everything. Phobos was the standard library, and it included
druntime. They weren't separate, and the standard library was very small.
The process was also less open at the time, since none of it was on github.
It was in a subversion repo that not many folks had access to. So, it was
much harder to get changes committed, and Walter's focus was on the
language, not the library.

There were folks in the D community who created a library called Tango which
grew to dwarf Phobos. At some point in the process, it got its own runtime,
which meant that it was incompatible with Phobos. So, anyone using D1 had to
choose whether they wanted to use the standard library, Phobos, or to use
Tango. Almost everyone chose Tango, since it was much, much larger and was
actively developed. This did sort of fork the community, and there was talk
of two standard libraries (though officially, there was only Phobos), since
you had to pick one or the other. However, since most everyone used Tango, I
think that the biggest problem here was really a PR problem if anything. The
fact that you couldn't use the standard library with Tango was definitely
bad, but almost everyone used Tango, so I don't think that there was a huge
split in reality (though I didn't use D until early in D2, so my
understanding could be off). It did make the community look bad though.

The bigger fork in the community came with D2. Folks had been using D1 in
production, and when Walter was going to add const in a serious way, it was
going to break enough code that he decided to fork the language so that
folks could continue to use D1, and he could continue to develop the
language with D2. Andrei had joined up around then. So, he took over the
design of Phobos and started to influence the direction of the language
(e.g. making everything thread-local by default). And since Walter no longer
had to worry about avoiding breaking production code, he was a lot more
willing to make massive changes. So, for a while, D2 was very volatile and
not at all viable for production. During that process, Phobos grew quite a
bit. The runtime was split out from Phobos to try and fix the problem that
had existed between Phobos and Tango in D1, and in fact, druntime comes from
Tango's runtime. But as D2 grew and matured, it became a very different
language from D1.

So, eventually, we ended up with a shrinking community using D1 with Tango,
and a growing community using D2 with Phobos (some of whom came from the D1
community). A lot of the folks using D1 did not like D2. Phobos was _very_
different in its approach from Tango. D1 and Tango were more Java-like if
anything, and Phobos and D2 are closer to C++ and the STL in their approach.
Tango did eventually get ported to D2, and thanks to druntime being separate
from Phobos, Phobos and Tango could be used together, but they were so
different that most folks probably still wouldn't for the most part. And at
this point, Tango is unmaintained.

So, the fact that we had two major libraries in D1 that were viewed as the
"standard" library (even though only one was actually the standard library)
was a divider in the community, and the switch to D2 was an even bigger
divider in the community. I think that the switch to D2 was by far the
bigger divider in reality, but outside of the community, folks still
sometimes bring up how D is divided by having two standard libraries.

- Jonathan M Davis





More information about the Digitalmars-d mailing list