Any chance to call Tango as Extended Standard Library

Johan Granberg lijat.meREM at OVEgmail.com
Wed Jan 21 09:28:51 PST 2009


Don wrote:

> 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>

As a user of D primarily and of the standard libraries secondly I see this
reluctance to solve the library situation as the single biggest threat to
D. It creates a division in the community and an uncertainty of which
library to base my own libraries on. If I use one and the other wins the
competition I have to redo a lot of work. It's also a headache when
distributing code as I don't know which functions and packages I can assume
exists. 

This split actually has made me put some of my own projects on hold while
trying to see if we eventually get a merge or one side wins. Through here
lack of time also contributes.

I sinercelly hope this situation gets resolved as the current situation can
be really discoraging for both new and old D developers.



More information about the Digitalmars-d mailing list