When beginning to learn D one comes across the need to learn a lot about what is happening in its development to really understand what they should be looking at. One aspect that is probably the strangest for new comers is the competing runtime libraries: Phobos and Tango. Note that there really is only one standard library, which is Phobos.
Phobos is the original and first library for D developed and maintained by Walter Bright. This library is developed in a way that feels similar to the C libraries. The library has been placed onto DSource for community input, while having Walter decide what changes will be added to the release bundle.
Tango started in 2006 as a runtime library to replace Phobos. This library has more of a C++ feeling as it uses streams for standard io and many objects will return themselves for chaining. Tango has had some misconceptions relating to its design. It has been gaining more popularity as more projects are created using Tango, and older Phobos projects are moved to a Tango code base.Tango that people seem to make when looking into whether they should use it.
- Tango is solely class based
- Tango is for large projects and not system level coding
- Tango only knows one dance
To resolve the problem of movement the Ares project was started, the second coming of Phobos. This never got much momentum and the reason I will give is that it felt like Phobos. There wasn't much benefit to switch as there was still a need to have it expanded.
Ares declared defeat after Tango made itself known. There were good reasons Tango has survived. There is a great development crew working on it. It has had a greatly different design from Phobos letting others see it as an alternative rather than an extension.
There are at least two reasons that Tango was not built on top of Phobos. One is the differences in what its goal was as a library. Phobos has a lot of interdependence while Tango wished to use the layered scheme. It also was going to be expanding functionality, it would not be good to add on top of Phobos an then later have to remove something when it was later added to Phobos.Phobos split into 2 libraries, druntime.lib and phobos.lib. This is to allow a common runtime to be used with both Phobos and Tango. While there is no plan to merge both libraries or even include Tango with releases of DMD, this will allow both libraries to be used at the same time without a compatibility layer.