Any chance to call Tango as Extended Standard Library
Don
nospam at nospam.com
Sat Jan 17 21:14:53 PST 2009
John Reimer wrote:
> Hello dsimcha,
>
>> == Quote from Daniel Keep (daniel.keep.lists at gmail.com)'s article
>>
>>> Piotrek wrote:
>>>
>>>> Lars Ivar Igesund wrote:
>>>>
>>>>> Tango will stay Tango (and tango.*). The above naming assumes that
>>>>> Tango will depend on Phobos, and it will not.
>>>>>
>>>> I see.
>>>>
>>>> Cheers
>>>>
>>> (Note: speaking as merely an infrequent contributor to Tango; my
>>> opinion
>>> is my own and does not reflect on those of the Master Dancers, or the
>>> ruling council of glittery-shoed programmers.)
>>> (Warning: semi-rant ahead.)
>>> The problem is that Phobos and Tango are diametrically opposed in
>>> almost
>>> every conceivable way. Bringing them together would be like trying
>>> to
>>> bring matter and anti-matter together; you're just going to blow
>>> yourself up.
>>> It's best if you think of Phobos as being Python and Tango as being
>>> Java. Phobos implements a relatively flat (if messy) hierarchy of
>>> simple, fat classes. For example, IO is done using the Stream
>>> interfaces, each one implements all the methods you'd probably need
>>> to
>>> work with streams.
>>> Tango, on the other hand, implements a very deep (if confusing)
>>> hierarchy of simple, component interfaces that get plugged together.
>>> Unlike Phobos, IO in Tango has many layers and components, each of
>>> which
>>> is very narrowly defined, allowing you to plug them together however
>>> you
>>> like.
>>> The problem is that neither of these approaches is WRONG. They're
>>> both
>>> valid and arguably better in certain circumstances. What's more, the
>>> continued existence of both shows that there are people who believe
>>> in
>>> each of them (not necessarily at the same time, but there you go.)
>>> So let's say we combined them into std.* and stdex.*. Why is Tango
>>> stdex? Why isn't Tango std.* and Phobos stdsimple?
>>> Ok, ignoring egos, the problem is that they wouldn't work together
>>> anyway. An old favourite of mine is (again, sorry about this) IO.
>>> Phobos strives to be compatible with the C IO library; so you can
>>> interleave Phobos and C IO calls and it's all gravy.
>>> Tango takes C out the back and shoots it before burying it
>>> upside-down
>>> at a crossroads with a steak through the heart and salting the earth.
>>> You CAN mix Tango and C IO calls, but you really have no idea what
>>> order
>>> the output's going to arrive in.
>>> I remember Andrei getting antsy about this a while back; why break
>>> compatibility?! Because Tango's IO was faster this way. Neither one
>>> of
>>> them was 'right' because they both had legitimate points of view.
>>> Really, it all boils down to this: there *is no* one right way. Yes,
>>> it's more confusing. But it's a problem with programming in general;
>>> programming is all about looking at your options and making a
>>> decision
>>> on the matter.
>>> -- Daniel
>> Wow. Excellent analysis. One thing I'd like to add is that Phobos
>> tends to be
>> much more focused on the bleeding edge, with pretty much all
>> development happening
>> on the D2 branch, while Tango is more focused on targeting stable
>> compilers.
>> Also, another way I would summarize the situation is that Phobos
>> focuses on first
>> making simple operations simple first and foremost, and then worries
>> about making
>> complicated operations possible, while Tango does just the opposite.
>
> I don't know if that is strictly true. In Tango's defense, I believe it
> has tried quite hard to move in the direction of making simple things
> simple even under the restrictions of its own philosophy :). If you
> examine the progression of Tango revisions, there has been a significant
> "cleanup" in progress that appears to be simplifying what was originally
> verbose.
>
>> I've said this before, but I think it's not so bad for D to have two
>> standard libraries with different design philosophies, at least in
>> principle, though the inability to use both side by side on D1 is
>> obviously a bad thing. There are times when I like the Phobos "keep
>> it simple, stupid" approach and times when I want Tango's "everything
>> but the kitchen sink" approach. There are a few things that I think
>> would help a lot here:
>>
>
>> 1. Both Phobos and Tango should adopt these opposite design
>> philosophies, which are true de facto anyhow, officially. This will
>> prevent excessive feature envy and duplication of effort and allow
>> newcomers to determine which is best for their everyday use.
>>
> Like I said, I believe Tango has worked harder at doing this than you
> might think. I don't think Phobos cares to look at the opposite
> philosophy because it really doesn't merge well with it's intended
> goals. Tango can afford some brevity because it started at the verbose
> end.
>
>
>> 2. The creation of druntime so that Phobos and Tango can be used side
>> by side is a huge step forward. Once D2 is out of alpha and Tango is
>> ported to D2, people will be able to use their preferred lib most of
>> the time and the other when their preferred lib has some missing
>> functionality. This will also greatly simplify 3rd party libs.
>>
>
>
> This somehow parallels my original thinking too which I've mentioned
> before. I am all for the druntime, and it certainly will be a net gain
> if both Tango V2 (if it ever surfaces complete) and Phobos can share it
> once D2 is stable. But I'm afraid, it is still a grave difficulty for
> new users to face two different libraries. Now that I've waited and
> think about it longer, I'm not sure what to make of it. How does one
> promote this twin package deal for D. I predict that the first person
> that finds a clever way to promote D 2.0 and it's shiny new twin-library
> / pick-your-style feature will be a D hero forever. ;-)
>
> No, it's not bad.
<small rant>
I completely disagree. I think the two libraries is a disaster. I can
see that so many people have been exposed to a lifetime of propaganda
that "competition is a good thing", but it's just propaganda.
Competition inevitably means wasted effort, and it's obvious in D.
</small rant>
Note, however that the gulf between Phobos and Tango mostly exists in
I/O; and C++ also has two I/O packages (the one inherited from C, and
the awful iostreams). So I don't think this is a big a problem as
stated. If we work at it, we could move the difference to be entirely a
I/O difference. But that would require willingless to do it, and I'm not
sure that it's really there.
<big rant>
In my attempt to bring both libraries together I have experienced
reactions from both sides which appeared hostile (or at least reluctant)
to a merger. Apart from Sean and myself, I don't see much evidence that
people actually want them to merge. They just want the other one to
disappear.
</big rant>
More information about the Digitalmars-d
mailing list