The role of Tango

David B. Held dheld at codelogicconsulting.com
Sun Nov 18 19:35:58 PST 2007


Kris wrote:
> "renoX" <renosky at free.fr> wrote
> 
>> when contributors add new code in a project, reusing the same style as the 
>> other code is a sign of professional/mature programmers (ok, amateurish 
>> was too strong sorry)
> 
> Sure, RenoX. I agree completely. But the thing is, Tango was never intended 
> to be a contribution to any other library. It is not a part of phobos. In 
> fact, phobos is currently being reworked to have parts of Tango instead. So 
> your point simply doesn't apply. You see the distinction? The outcome is 
> that you're calling people "amateurish" and so on for no valid reason 
> whatsoever.
> [...]

I think it's always worthwhile to look back on the work of others who 
have gone before.  If I were to compare Tango to anything, I would 
compare it to Boost.  In some ways, that is appropriate, and others, it 
is very generous.  Like Tango, Boost was intended as a free, 
open-source, community-contributed library designed to improve the 
language community for which it was created.  Unlike Tango, when Boost 
had to choose a naming convention, guess what they did?  They said: 
"Ultimately, we have the ambition for this code to end up in the 
standard library.  Thus, it must look like the standard library *now*." 
  What they *didn't* say is: "Our code is so good, when the standard 
library includes it, it just better put up or shut up, yo!"

Now, the folks who started Boost were no small fry.  They weren't garage 
programmers fresh out of high school with a keyboard and a CRT and a ton 
of attitude.  They were world-class, respected programmers with decades 
of experience and enough clout and political capital to say: "We're 
going to do things differently and we're right".  But they didn't.  They 
stuck with the established, standard C++ conventions, and that alone 
lends additional legitimacy to the effort.

This is not to say that Tango made the wrong choice, or that camelCase 
is evil (I go both ways on the issue).  However, the conceit that Tango 
is independent of Phobos, and that Phobos is borrowing from it, so it 
just has to put up or shut up is a very different reaction and attitude 
from Boost "lending" libraries to standard C++.

One thing you learn very quickly when participating in the Boost 
community is that these people take C++ very seriously.  If your library 
doesn't take into account every minute detail of the language, you are 
virtually guaranteed that some expert somewhere in the world is going to 
point this out and make a big deal about it.  At first, it seems petty 
and overbearing.  But after a while, you see that the scrutiny is a 
trial by fire, and that reviewed libraries themselves gain extra 
credibility by taking into account the criticisms and feedback of what 
are truly world-class experts (and sometimes you can't tell the experts 
from the non-experts, but usually that doesn't matter because the truth 
has a way of bubbling up rather quickly).

What you especially learn is that there are definite best practices in 
the C++ community, and if you deviate from those, you had better have an 
excellent reason.  Conformity is King.  Your code had better *look* like 
Boost code, regardless of its quality otherwise.  Your documentation had 
better *look* like Boost documentation if you want to be taken 
seriously.  You had better have a full set of regression tests using the 
Boost.Test framework so your library will show up properly in the full 
regression results.  Miss any of these details, or try to be an 
"innovator", and you risk having your library rejected.  This isn't high 
school.  This is conformity with a purpose.

When a Boost reviewer says: "I think you choose a poor name for this 
function.  Please explain why you made that choice or try this suggested 
name instead", the author does not say: "Hey, jump on my IRC channel and 
we can discuss it."  That would be considered..."unprofessional"...to 
put it politely.  At work, when people have problems with some tools, 
the tool authors say: "Well, just file a bug report on our forums." 
Unfortunately, that says: "I can't be bothered to file a bug report on 
your behalf, even though you spelled out the details in an email." 
That's not to say that IRC is a bad communications medium; merely that 
it has a certain barrier to entry (not everyone has an IRC client 
installed by default, or would know how to use one).

At the end of the day, a Boost library author has to *defend* the 
library under review for it to be accepted.  Even though the author is 
the one contributing free work, it is ultimately the clients who get to 
decide whether it meets the bar of quality.  At no point would a Boost 
library author get away with saying: "No, you tell *me* why you think 
it's wrong.  My library rocks.  Capisce?"  Rather, the reality is that 
authors are more likely to run to the standard and quote chapter and 
verse to demonstrate that they made the right choice.  The onus is on 
the library writer to show that the library is well-designed.

As Alex mentioned, it's about selling.  Whether you like your customers 
or hate them, they are your customers, and will ultimately influence 
your success, even if they do nothing but elicit your unsavory side. 
The D community is not the Boost community, and has a long way to go to 
reach that level of experience (because D is a much younger language, to 
be sure).  But that doesn't mean we can't get a head start and take the 
language and its users as seriously as if there were a million D 
programmers in the world, with users in major Fortune 500 companies, and 
that most of them read the D forums as religiously as c.l.c++.m. 
Reputations take a very long time to build, but are quite easily 
destroyed, and often by oneself (ask James Watson about that).

Dave



More information about the Digitalmars-d mailing list