## digitalmars.D - Phango

• Janice Caron (9/9) Nov 15 2007 I've started to like Tango, now that I've got bits of it working with Ph...
• Jarrett Billingsley (4/14) Nov 15 2007 http://www.dsource.org/projects/tango/docs/current/ is useful indeed. Y...
• Janice Caron (4/9) Nov 15 2007 I don't want docs, I want example source code. I want something I can
• Frank Benoit (3/6) Nov 15 2007 http://www.dsource.org/projects/tango/wiki/ChapterStorage
• Janice Caron (4/6) Nov 15 2007 That's what I was looking for! Great! :-)
• Janice Caron (7/11) Nov 16 2007 That was easy!
• Alexander Panek (8/10) Nov 16 2007 As you might know already or at least have guessed - since there's an
• Janice Caron (37/37) Nov 16 2007 I dunno if you'd consider this a bug in tango.io.filepath.parse(), but
• Steven Schveighoffer (5/8) Nov 16 2007 Register at dsource: http://www.dsource.org/forums/profile.php?mode=regi...
• Steven Schveighoffer (8/14) Nov 15 2007 Just an FYI, some of us are working on a D 2.x compatible version of Tan...
• Janice Caron (16/21) Nov 15 2007 Yeah, well that's kind of what I did. I took the source in the "tango"
• Alexander Panek (12/17) Nov 15 2007 Actually, the core of Tango is in tango.core - the std/ folder is just
• Janice Caron (19/24) Nov 16 2007 I didn't understand that, but hey ho. In any case, the original Phobos
• Bill Baxter (2/2) Nov 16 2007 I thought we agreed that this should be called "Phandango". :-)
• Janice Caron (9/10) Nov 16 2007 Well, there isn't really an "it". I was actually getting this working
• Alexander Panek (14/41) Nov 16 2007 My apologies - ... tweaked?
• Janice Caron (21/32) Nov 16 2007 Well yeah. As I said at the start of this thread, what I did was:
• Sean Kelly (6/13) Nov 16 2007 So do you have a /std directory at all? I would hope so, or some
• Janice Caron (8/15) Nov 16 2007 I have Phobos's std directory. It is completely unchanged and intact.
• Sean Kelly (4/12) Nov 16 2007 Oh, that's fine then. The /std directory included with Tango just
• Sean Kelly (17/38) Nov 16 2007 Not to plug the Tango engine, but it does actually fix a number of bugs
• Walter Bright (5/12) Nov 18 2007 Mixed case package/module names are avoided because there needs to be a
• Lars Ivar Igesund (13/26) Nov 18 2007 As I said elsewhere in the thread, other FS _are_ case sensitive, and th...
• torhu (8/20) Nov 18 2007 I believe Walter's point is that "all package and module names are lower...
• Lars Ivar Igesund (9/31) Nov 18 2007 Yes, I see his point. My point is that there is no difference from havin...
• Bill Baxter (10/33) Nov 18 2007 There is another issue. Often a module has basically only one main
• Lars Ivar Igesund (20/56) Nov 18 2007 Using fully qualified class names are very seldom necessary in D, I find
• Bill Baxter (37/91) Nov 18 2007 Ok, but then the most obvious name for the renamed import is the last
• Lars Ivar Igesund (17/82) Nov 18 2007 Never liked static imports :P The static keyword is probably part of tha...
• Oskar Linde (76/85) Nov 18 2007 It is interesting to see how such a trivial thing as the capitalization
• Walter Bright (5/7) Nov 19 2007 It's normal for easily understood issues to get a lot more comments than...
• Matti Niemenmaa (20/35) Nov 20 2007 One problem with shoving all iterators into one module is the way the pr...
• John Reimer (20/55) Nov 18 2007 I actually think both package.foo.Foo and package.Foo.Foo look bizarre.
• Don Clugston (3/4) Nov 20 2007 John, it's great to see you back! I feared you were gone forever.
• John Reimer (20/25) Nov 20 2007 Don,
• John Reimer (6/40) Nov 21 2007 *sigh*
• Don Clugston (7/51) Nov 21 2007 Indeed.
• Sean Kelly (5/16) Nov 21 2007 Yup. John has always been a valuable member of the D community. I was
• Kris (2/17) Nov 21 2007 Yeah, I fully agree. Good to see him back here!
• Sean Kelly (4/12) Nov 21 2007 Fortunately, with usenet, not being a part of the discussion is as
• Christopher Wright (14/27) Nov 18 2007 The only way to solve this is to have the DMD frontend do
• Walter Bright (5/24) Nov 18 2007 The const stuff is changing significantly (for the much better, I hope),...
• Jason House (3/4) Nov 16 2007 This reminds me... Walter and the Tango team agreed to make their librar...
• Sean Kelly (9/17) Nov 16 2007 D 1.0 is in maintenance mode now, so Phobos 1.0 isn't likely to change
• Jason House (3/13) Nov 16 2007 I translate that to mean that the merge of Tango and Phobos relies on th...
• Janice Caron (2/3) Nov 16 2007 I surely hope so. ++myVote
• Lars Ivar Igesund (7/12) Nov 17 2007 You understand that that would mean Phobos gaining Tango's style?
• Janice Caron (17/22) Nov 17 2007 Oh I don't think so. Walter is quite clear that module names should be
• Sean Kelly (8/26) Nov 17 2007 This seems a bit extreme. The only variables I can think of in Tango
• Derek Parnell (7/18) Nov 17 2007 Windows file system is case insensitive therefore it is easy to cause
• Lars Ivar Igesund (10/27) Nov 17 2007 When one thinks the file system is case insensitive, it is easy creating
• Kris (7/25) Nov 17 2007 Hiya Derek,
• Walter Bright (15/20) Nov 18 2007 The compiler will distinguish modules Foo and foo as being different,
• renoX (7/41) Nov 17 2007 Easy: when in Romes do like Romans i.e. coherency beats 'invent your own...
• Sean Kelly (4/21) Nov 17 2007 What if that convention proves insufficient for a library that is much
• Kris (23/28) Nov 17 2007 No problem, renoX, but there's at least two strawmen in your post. Maybe...
• Alix Pexton (3/45) Nov 18 2007 All I'm going to say to respond to that is that you have done a very goo...
• Kris (11/12) Nov 18 2007 Thanks Alix.
• Alix Pexton (11/31) Nov 18 2007 I can only assume that there is a red mist that is stopping you from see...
• Kris (8/59) Nov 18 2007 Wow ... I really have no idea of what you're talking about Alix. Honestl...
• Alix Pexton (3/76) Nov 18 2007 Nope, tat is not what I want at all...
• Kris (5/6) Nov 18 2007 Then, it not yet clear what it is that you want. I suggest you start a
• Alix Pexton (6/28) Nov 18 2007 I agree, I don't know where it started, but I got used to the convention...
• Sean Kelly (4/6) Nov 18 2007 Tango's naming convention isn't consistent with my own style either, but...
• Kris (6/47) Nov 18 2007 Alix;
• Lars Ivar Igesund (15/42) Nov 17 2007 Well, there are many using this style because W says/said it's standard.
• Kris (17/23) Nov 17 2007 knew you'd find a way to dredge this up again :)
• phango (3/30) Nov 17 2007 i love that - please release it to us all!
• Kris (22/24) Nov 17 2007 There's a fair chance the poster below is actually Janice, but just in c...
• Janice Caron (5/6) Nov 17 2007 Who? What?
• Lars Ivar Igesund (10/19) Nov 17 2007 FWIW, you can't call a distinction on you as a person and your opinions ...
• Janice Caron (10/24) Nov 17 2007 Kris made a false accusation. That was unwarranted. You can't go
• Kris (11/35) Nov 17 2007 Nonsense. I made an interesting parapraxes in conjuction with a speculat...
• Bruce Adams (2/31) Nov 17 2007 Are you sure you aren't jumping the gun. I read Kris's post as meaning y...
• James Dennett (7/22) Dec 12 2007 There's an interesting issue here. There are two ways of viewing
• Kris (12/18) Nov 17 2007 Dash it all. This is what I meant to write:
• Janice Caron (3/4) Nov 17 2007 Phew! OK, I'm happy now. :-)
• Kris (10/22) Nov 18 2007 Sure, no problem. Now, perhaps you will address the questions asked
• Janice Caron (15/21) Nov 18 2007 Module name components: likethis
• Kris (5/9) Nov 18 2007 LOL -- it was the last time you were being shrill about this very topic
• Janice Caron (10/15) Nov 18 2007 shrill - adj - said of a voice, sound, etc: high-pitched and piercing.
• Regan Heath (22/27) Nov 19 2007 Don't hold your breath. Many a poster has been in your shoes, myself
• Kris (34/36) Nov 19 2007 He is? I don't recall saying anything particularly negative to Alix. Tri...
• Regan Heath (15/26) Nov 19 2007 Must be the cynic in me, I try to keep him locked up but sometimes he
• Bill Baxter (7/41) Nov 19 2007 What about the pen island module problem? Underscores? Do you have any...
• Regan Heath (18/27) Nov 19 2007 I don't really like underscores either. Is the "pen island" problem
• Jeff Nowakowski (17/25) Nov 18 2007 For the record, what you said was in this posting:
• Janice Caron (20/32) Nov 18 2007 Ooh thank you. Well, that clarifies it.
• Jeff Nowakowski (16/18) Nov 18 2007 The problem is you presented your argument as either they did something
• Jeff Nowakowski (8/14) Nov 18 2007 By the way, that Jeff fellow is absolutely BRILLIANT and INSIGHTFUL with...
• Jeff Nowakowski (6/23) Nov 18 2007 The below forgery was posted by David B. Held. I must say I'm very
• David B. Held (10/15) Nov 19 2007 I had a lot of help from my friends who led the way. Obviously, I'm not...
• Jeff Nowakowski (12/18) Nov 20 2007 What was your point? That you are willing to post personal attacks
• Regan Heath (7/10) Nov 20 2007 Your use of the word "charge" in this sentence:
• Jeff Nowakowski (9/17) Nov 20 2007 Ok, I can see how that can be misconstrued, but I tried to make it clear...
• David B. Held (77/92) Nov 20 2007 Yes, to make a point, I was willing to do that. And if you weren't
• Kris (56/146) Nov 21 2007 Excellent! I don't spend much time on this ng anymore, but recently it's...
• David B. Held (103/124) Nov 23 2007 Well, the double-standard here is quite amusing. Both of you accused
• Kris (90/210) Nov 23 2007 Which obvious reading? Can you be more specific about that?
• Janice Caron (6/9) Nov 23 2007 Because I have stated that fact loudly and clearly. Once again, I,
• Kris (9/18) Nov 24 2007 Oh, you make that claim, and that's fine. But the point is that David ca...
• David B. Held (56/105) Nov 24 2007 I believe I spelled it out in my last response to Jeff. Since you seem
• Kris (34/69) Nov 24 2007 I asked a simply question, and there's really no need to take this attit...
• David B. Held (106/153) Nov 25 2007 You asked a simple question, but I didn't see one ounce of sincerity in
• Kris (51/182) Nov 25 2007 Huh? Perhaps you should remind yourself that you are the one who's been
• Regan Heath (12/24) Nov 26 2007 I think you must have missunderstood something here Kris, or perhaps I
• Daniel Keep (4/4) Nov 25 2007 It's a month until Christmas, and I think this thread isn't doing anyone
• Kris (3/7) Nov 25 2007 Gladly. No further comment.
• Bill Baxter (3/8) Nov 25 2007 Here here! /Raises glass of eggnog/
• Clay Smith (2/7) Nov 25 2007 Please, just let it rest in peace.
• Jeff Nowakowski (17/43) Nov 21 2007 Your posts are almost always thoughtful and refraining from animosity.
• David B. Held (32/65) Nov 23 2007 No matter how wrong you think I was, you have no excuse for claiming my
• Jeff Nowakowski (83/99) Nov 24 2007 You crossed the line from debate to taking an underhanded action. You
• David B. Held (35/75) Nov 25 2007 From my perspective, the thread had left the realm of "debate" long
• Regan Heath (10/13) Nov 19 2007 I prefer to assume the best of people, it generally turns out to be true...
• Jeff Nowakowski (6/10) Nov 19 2007 I agree, and that was my point. Calling somebody a sock puppet in
• Tom S (45/49) Nov 18 2007 And you realize that by stating that the decision was amateurish, you
• Bill Baxter (14/34) Nov 18 2007 It seems to me the burden should be on the Tango developers here, as the...
• Kris (8/12) Nov 18 2007 Newcomers? Tango has been in development for almost 4 years, Bill. As fo...
• Bill Baxter (20/35) Nov 18 2007 Yes, newcomers. 4 is less than 10. That makes you newcomers relative
• Kris (23/40) Nov 18 2007 Oh that's easy to answer: we understood those to be guidelines only, and...
• Alix Pexton (3/54) Nov 18 2007 Why aren't you listening? it's not "simply stylistic"!
• Kris (3/4) Nov 18 2007 Then I suggest you hop onto IRC and explain it better, please Alix, beca...
• Alix Pexton (4/11) Nov 18 2007 I think it would be better if you just answered your critics concerns op...
• Kris (4/20) Nov 18 2007 Er, why don't you give us some examples, Alix? That's what we'd be askin...
• Christopher Wright (11/34) Nov 19 2007 I'll bite. Why do you use mixedCamelCase for both member variables and
• Sean Kelly (8/22) Nov 19 2007 For member variables, I personally prefix the non-public variables with
• Christopher Wright (2/31) Nov 19 2007 Groovy, thanks.
• Bill Baxter (16/33) Nov 19 2007 I used to be a big 'm_' guy, but I recently started using trailing
• Robert Fraser (2/39) Nov 19 2007 Why do private members need to be differentiated typographically?
• Christopher Wright (13/51) Nov 19 2007 More that they should be differentiated from locals. It's a reminder
• Sean Kelly (7/9) Nov 19 2007 It can increase the clarity of member functions, as a variable prefix
• Walter Bright (4/5) Nov 20 2007 I kinda wonder the same thing. Private members are limited in scope,
• Sean Kelly (7/22) Nov 19 2007 I prefer the "m_" prefix specifically because it is more visible than a
• Bill Baxter (13/35) Nov 19 2007 That's exactly why it's so great. It feels like you're using regular
• Brian Hay (7/12) Nov 19 2007 FWIW I've grown to appreciate the "my" prefix for member variables.
• Bill Baxter (46/76) Nov 18 2007 Yes, I agree. But if the established guidelines work, you might as well...
• Kris (17/54) Nov 18 2007 Tired of it, Bill. Some people will always latch onto something because
• Bill Baxter (5/20) Nov 18 2007 Yep. There are those. But every cogent, well-reasoned argument you
• Kris (6/8) Nov 18 2007 Reply to Bill:
• Bill Baxter (7/21) Nov 18 2007 Look for a thread called "Module naming conventions".
• Kris (4/25) Nov 18 2007 Hrm ... I did look and, apart from some very recent ones from Sean, they...
• Bill Baxter (3/29) Nov 18 2007 So would you like for me to spell it out for you line by line, then?
• Kris (6/36) Nov 18 2007 Please do, Bill. Frankly, I'm tired and weary, and it's entirely possibl...
• Bill Baxter (8/50) Nov 18 2007 Ok. Will do. Maybe part of what you're not getting is that I'm trying
• Kris (6/13) Nov 18 2007 Thanks! I see your list, Bill, and I'll just keep my opinion to myself.
• Don Clugston (17/66) Nov 19 2007 Kris -
• Kris (6/11) Nov 19 2007 Sure I'm familiar with Java, Don. But I'm also familiar with Simula, Pas...
• Regan Heath (13/27) Nov 19 2007 You may recall I made the same assumption a few years back until you put...
• Don Clugston (12/25) Nov 19 2007 Perhaps it's not Java at all, but rather "curly brace languages other th...
• Lars Ivar Igesund (8/31) Nov 19 2007 I used to be a C++ programmer, and based on the styles I used then (not
• Kris (27/53) Nov 19 2007 FWIW, I have written mountains of C, so it's not at all unfamiliar to me...
• Kris (3/5) Nov 19 2007 Pardon, Don ... I switched subject lines on you. Replied under "Tango
• Sean Kelly (7/17) Nov 19 2007 I think this is probably true. I am a C++ person myself, and required
• Walter Bright (13/17) Nov 19 2007 I think you've touched on a larger issue. Languages tend to have a look
• Lars Ivar Igesund (9/30) Nov 19 2007 And I have to say again - the C++ libraries I have used all make me more
• Christopher Wright (21/97) Nov 19 2007 Why is that?
• Sean Kelly (5/22) Nov 19 2007 This is why I like deeper hierarchies. I tend to look at the code
• Walter Bright (3/6) Nov 20 2007 I like flatter ones, probably because I'm too lazy to type out the long
• Christopher Wright (20/43) Nov 20 2007 One could argue that you just need better documentation.
• Lars Ivar Igesund (10/38) Nov 20 2007 I think an open source project have it's code browsed very often, and ev...
• Matti Niemenmaa (12/16) Nov 20 2007 Ah, but consider the task of finding the right part of the module. :-)
• Sean Kelly (7/19) Nov 20 2007 I just woke up and your math is confusing me :-) I like two things
• Christopher Wright (4/23) Nov 20 2007 You're saying that having fewer large modules is a direct consequence of...
• Matti Niemenmaa (8/11) Nov 20 2007 You're right, of course. Sorry, don't know where I got that from.
• Sean Kelly (5/31) Nov 20 2007 Certainly. But I've come to accept that the existence of any
• Don Clugston (15/28) Nov 26 2007 Actually, I agree. I advocate shallow heirachies, not deep ones. But a
• Aarti_pl (11/18) Nov 26 2007 Yup. First one is definitely too deep.
• darrylb (5/25) Nov 26 2007 Ok, I usually just lurk and sit back and eat popcorn while reading the f...
• David Wilson (15/23) Nov 26 2007 I doubt this has anything to do with number of characters typed, at
• darrylb (5/20) Nov 26 2007 Ok, I hear what you're saying, but I think it becomes much less relevant...
• Oskar Linde (26/54) Nov 26 2007 You are probably 100 % right that for a fully rational person those few
• Sean Kelly (44/53) Nov 18 2007 I think some of the reasons may be there already, but the page is broken...
• Bill Baxter (50/104) Nov 18 2007 I agree that deviceconduit is atrocious.
• Sean Kelly (55/104) Nov 18 2007 It's not true of every module, because as you say, not every module
• Bill Baxter (35/59) Nov 18 2007 Asking for a feature where class package.Options.Options can be accessed...
• Don Clugston (6/24) Nov 19 2007 Quite true -- the fact that D allows free functions means that Java styl...
• Bill Baxter (4/31) Nov 19 2007 Oh dang, I've been using dsss for so long now that I had blissfully
• Sean Kelly (5/12) Nov 19 2007 Technically, you can, so long as the files are not in the same
• Alix Pexton (6/15) Nov 18 2007 I'll say this here, for want of a better place.
• Janice Caron (13/14) Nov 18 2007 To be honest, I never actually intended to make this version public -
• Janice Caron (10/16) Nov 18 2007 In fact, to be absolutely clear, I didn't start doing this because I
• Alix Pexton (3/22) Nov 18 2007 Regardless of your motivations, I'm sill interested in the results.
• Phango (2/22) Nov 18 2007
• Christopher Wright (23/48) Nov 18 2007 I think it shouldn't be too difficult to arrange an automated system for...
• renoX (11/44) Nov 18 2007 Uh? That's my honest opinion: when contributors add new code in a
• Lars Ivar Igesund (8/15) Nov 18 2007 Indeed, and Tango is quite a different project from Phobos (not counting...
• renoX (16/27) Nov 18 2007 *Sigh*, would you have a look at the big picture please?
• Alix Pexton (3/40) Nov 18 2007 I've not used every part of Phobos, and some parts of it do grate a litt...
• Janice Caron (11/12) Nov 18 2007 I thought camel case was when every word /except/ the first was
• Alix Pexton (3/18) Nov 18 2007 It was my understanding that CamelCase was the catch all term for all sp...
• Janice Caron (3/4) Nov 18 2007 Hey, according to Wikipedia, you're right! Well, you live and learn. I
• Don Clugston (5/10) Nov 19 2007 Yes. It's really unfortunate, because it means that CamelCase = union{
• Robert DaSilva (2/16) Nov 19 2007 How about camelCase?
• Matti Niemenmaa (4/19) Nov 20 2007 The terms I've heard and use are lowerCamelCase and UpperCamelCase.
• Oskar Linde (4/21) Nov 20 2007 Or CamelCase and dromedarCase :)
• Matti Niemenmaa (5/27) Nov 20 2007 Yes, that's another (although isn't it dromedaryCase?). But I don't like...
• Lars Ivar Igesund (15/47) Nov 18 2007 I think it was already said, but we think that for any larger project
• Alix Pexton (7/51) Nov 18 2007 Firstly, I think it quite rude to refer to me by my surname alone, even ...
• Lars Ivar Igesund (13/76) Nov 18 2007 Deeply sorry for this Alix, I usually get such things right, and I don't
• Kris (16/23) Nov 18 2007 Thanks, Alix, for offering an honest perspective. It's a shame that it
• Alix Pexton (21/55) Nov 18 2007 Its not as simple as personal preference, my preferences nor anyone else...
• Kris (23/156) Nov 18 2007 Thanks for your considerable treatment of the subject Alix, but I can't
• Kris (4/6) Nov 18 2007 I suggest you try to answer sean's questions early on in this thread? Th...
• Kris (39/42) Nov 18 2007 Sure, RenoX. I agree completely. But the thing is, Tango was never inten...
• David B. Held (77/90) Nov 18 2007 I think it's always worthwhile to look back on the work of others who
• Kris (9/34) Nov 18 2007 Appreciate the insights, Dave, and respect your opinion. However, you'r...
• Alix Pexton (5/41) Nov 18 2007 Well, I went on IRC, through a sleepy haze I think I managed to get my c...
• Lutger (15/15) Nov 19 2007 David B. Held wrote:
• Sean Kelly (7/18) Nov 16 2007 Andrei and Brad Roberts are working on Phobos 2.0 in various capacities....
I've started to like Tango, now that I've got bits of it working with Phobos :-)

With a bit of kludging, I've persuaded all of the examples in the
"console" and "text" directories to build with Phobos using DMD 2.007.
Of the examples files, only "properties.d" needed to be tweaked
slightly - and that was just to replace "char[]" with "string".

I think I'll attack the "conduits" folder next.

Anyway, someone tell me - does Tango have containers? If so, are there
any examples of use in the "examples" folder of the Tango download? I
couldn't find any.

Nov 15 2007
"Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"Janice Caron" <caron800 googlemail.com> wrote in message
news:mailman.70.1195164582.2338.digitalmars-d puremagic.com...
I've started to like Tango, now that I've got bits of it working with
Phobos :-)

With a bit of kludging, I've persuaded all of the examples in the
"console" and "text" directories to build with Phobos using DMD 2.007.
Of the examples files, only "properties.d" needed to be tweaked
slightly - and that was just to replace "char[]" with "string".

I think I'll attack the "conduits" folder next.

Anyway, someone tell me - does Tango have containers? If so, are there
any examples of use in the "examples" folder of the Tango download? I
couldn't find any.

http://www.dsource.org/projects/tango/docs/current/ is useful indeed.  Yes,
there are containers, in tango.util.collection.

Nov 15 2007
On 11/15/07, Jarrett Billingsley <kb3ctd2 yahoo.com> wrote:
Anyway, someone tell me - does Tango have containers? If so, are there
any examples of use in the "examples" folder of the Tango download? I
couldn't find any.

http://www.dsource.org/projects/tango/docs/current/ is useful indeed.  Yes,
there are containers, in tango.util.collection.

I don't want docs, I want example source code. I want something I can
compile, with tests to prove it's all working. Is there not a
test-suite handy?

Nov 15 2007
 I don't want docs, I want example source code. I want something I can
compile, with tests to prove it's all working. Is there not a
test-suite handy?

http://www.dsource.org/projects/tango/wiki/ChapterStorage

and all the snippets are here

examples/manual/chapterStorage.d

Nov 15 2007
On 11/15/07, Frank Benoit <keinfarbton googlemail.com> wrote:
and all the snippets are here

examples/manual/chapterStorage.d

That's what I was looking for! Great! :-)

The folder name ("manual") didn't really make it obvious what was in
it. Guess I'll attack that one next.

Nov 15 2007
On 11/15/07, Janice Caron <caron800 googlemail.com> wrote:
examples/manual/chapterStorage.d

That's what I was looking for! Great! :-)

The folder name ("manual") didn't really make it obvious what was in
it. Guess I'll attack that one next.

That was easy!

Obviously, chapterstorage.d was not written for D2+, so I had to
change all the char[]s into strings in that file.

Anyway, all I had to do was change char[] into string in the source
files, except in toUpper and toLower, and guess what - it compiled
without complaint, and runs perfectly. Woo hoo!

Nov 16 2007
Alexander Panek <alexander.panek brainsware.org> writes:
On Fri, 16 Nov 2007 12:46:24 +0000

Obviously, chapterstorage.d was not written for D2+, so I had to
change all the char[]s into strings in that file.

As you might know already or at least have guessed - since there's an
experimental  Tango /branch/ for D 2.x -, Tango is D 1.x only, right
now. So it'd be pretty weird to write the reference manual of Tango for
D 2.x. :)

--
Alexander Panek <alexander.panek brainsware.org>

Nov 16 2007
I dunno if you'd consider this a bug in tango.io.filepath.parse(), but
the example program filepathname.d looks like this:

void main(){
Cout ((new FilePath(r"d:\path\foo.bat")).name).newline;
Cout ((new FilePath(r"d:\path.two\bar")).name).newline;
Cout ((new FilePath("/home/user.name/bar.")).name).newline;
Cout ((new FilePath(r"d:\path.two\bar")).name).newline;
Cout ((new FilePath("/home/user/.resource")).name).newline;
}

And (on Windows) emits the following output - at least, on my ported version:

foo
bar
/home/user.name/bar
bar
/home/user/

I think I understand what's going on here. The slash in the third and
fifth examples is being (incorrectly) regarded as a component
character, instead of a path separator, so it thinks "/home/user/" is
the file part and "resource" the extension.

Yes, I know there's a flag in the constructor which converts "\" to
"/", and that that flag wasn't set in this example, BUT...

In Windows, "\" and "/" are BOTH acceptable as file separators. As far
as fopen() is concerned, they are interchangable. If you open
"/home/user/.resource" you'll get exactly the same file as had you
opened "\home\user\.resource".

This isn't true in a Windows (Command Prompt) shell, however, even
there, "/" is not a valid character for use in filenames. In fact, all
of the characters \ / : * ? " < > and | are prohibited from being used
in filenames.

I feel that the filepath.parse routine really should understand how
pathnames actually work on Windows. Sure, if the native flag is set,
then convert / to \. But even if that doesn't happen, parse() should
recognise both \ and / as pathname separators, and should throw an
exception if an illegal character is used in a pathname.

If there are no objections, I plan to "fix" this in my local copy, and
I can certainly post the fix for you, in case you should want to
incorporate it into the real Tango.

Nov 16 2007
"Steven Schveighoffer" <schveiguy yahoo.com> writes:
"Janice Caron" wrote
I dunno if you'd consider this a bug in tango.io.filepath.parse(), but
the example program filepathname.d looks like this:
...

Register at dsource: http://www.dsource.org/forums/profile.php?mode=register
File a ticket on tango: http://www.dsource.org/projects/tango/newticket.

It's actually a pretty nice system, and the developers are very responsive.

-Steve

Nov 16 2007
"Steven Schveighoffer" <schveiguy yahoo.com> writes:
"Janice Caron" wrote
I've started to like Tango, now that I've got bits of it working with
Phobos :-)

With a bit of kludging, I've persuaded all of the examples in the
"console" and "text" directories to build with Phobos using DMD 2.007.
Of the examples files, only "properties.d" needed to be tweaked
slightly - and that was just to replace "char[]" with "string".

Just an FYI, some of us are working on a D 2.x compatible version of Tango.

Basically the hard part is adding const.

It's not release-ready yet, but I'm hoping once Walter has fixed const, we
should be able to finish the port.

Of course, it does not use Phobos... But hopefully that problem will be
solved soon also.

-Steve

Nov 15 2007
On 11/15/07, Steven Schveighoffer <schveiguy yahoo.com> wrote:
Just an FYI, some of us are working on a D 2.x compatible version of Tango.

Yeah, well that's kind of what I did. I took the source in the "tango"
dir (i.e. not the "std" dir, not "object.d"), and then did

foreach(example)
while(does not compile)
fix_first_error()

Basically the hard part is adding const.

I noticed. I liberally added const and invariant everywhere I could
get away with it. It takes some fine tuning to get it right. D strings
are invariant now, so I had to throw in some idups in places where I
couldn't prove to myself that the original was actually unique.

I also changed toUtf to toString, and changed all the module names to lowercase.

It's not release-ready yet, but I'm hoping once Walter has fixed const, we
should be able to finish the port.

I'm working with 2.007. I assume it will be not too hard to upgrade.

Of course, it does not use Phobos...

Mine does. I specifically do not use Tango's object.d, nor anything in
Tango's std. I'm importing phobos and my bastardised version of Tango
simultaneously.

It's actually quite fun.

Nov 15 2007
Alexander Panek <alexander.panek brainsware.org> writes:
On Thu, 15 Nov 2007 23:09:55 +0000
Of course, it does not use Phobos...

Mine does. I specifically do not use Tango's object.d, nor anything in
Tango's std. I'm importing phobos and my bastardised version of Tango
simultaneously.

Actually, the core of Tango is in tango.core - the std/ folder is just
there because DMD requires the intrinsic module to be there, IIRC.

Just curious: why don't you use Tango and the freestanding functions of
Phobos (AFAIK most of them interface with C, anyways - which can be
done in Tango, too, of course)? I suppose that would be less work to
achieve the same goal (oh, and btw, you'll have a less buggy
runtime.. /me hides.)

Kind regards
--
Alexander Panek <alexander.panek brainsware.org>

Nov 15 2007
On 11/16/07, Alexander Panek <alexander.panek brainsware.org> wrote:
Actually, the core of Tango is in tango.core

Yeah, I've tweaked my copies of several of files in core already.

- the std/ folder is just
there because DMD requires the intrinsic module to be there, IIRC.

I didn't understand that, but hey ho. In any case, the original Phobos
std is still there in my case.

Just curious: why don't you use Tango and the freestanding functions of
Phobos

Lot of reasons.

(1) If an engine ain't broke, don't fix it.

(2) I like D2.007, and I'll be switching to D2.008 the day it comes out.

(3) I hate Tango, stylisticly. I hate the mixed case module names, and
the mixed case global variable names (e.g. Stdout). I want everything
to look and feel like Phobos.

(4) Walter has been doing this for seven years or whatever, and has
earned my greatest respect. Ripping out the innards of D scares the
shit out of me - and not only that, I see no reason why I should have
to.

This way, I get to use the latest cutting-edge version of D, I can
make all the module names lowercase (yes, that matters!), and though
things like Stdout(x).newline compile and run, I don't have to use
them - I'll be able to throw in nicer looking functions that do the
same thing.

Nov 16 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
I thought we agreed that this should be called "Phandango".  :-)

--bb

Nov 16 2007
On 11/16/07, Bill Baxter <dnewsgroup billbaxter.com> wrote:
I thought we agreed that this should be called "Phandango".  :-)

Well, there isn't really an "it". I was actually getting this working
just for me. I wasn't planning on uploading it anywhere because the
/real/ Tango is being made Phobos compatible, as I understand it, and
we should all just wait for that. Anyone who's impatient could do what
I did, I guess, or maybe I could show my source anyway, but I make no
claims that it's in any way "official". As for the name, it is the
work of /seconds/ to search and replace, and name it anything you
want.

Nov 16 2007
Alexander Panek <alexander.panek brainsware.org> writes:
On Fri, 16 Nov 2007 08:17:42 +0000

On 11/16/07, Alexander Panek <alexander.panek brainsware.org> wrote:
Actually, the core of Tango is in tango.core

Yeah, I've tweaked my copies of several of files in core already.

My apologies - ... tweaked?

- the std/ folder is just
there because DMD requires the intrinsic module to be there, IIRC.

I didn't understand that, but hey ho. In any case, the original Phobos
std is still there in my case.

As said - you could as well put the Phobos sources into Tango's std
folder and *tweak* those.

Just curious: why don't you use Tango and the freestanding
functions of Phobos

Lot of reasons.

(1) If an engine ain't broke, don't fix it.

I think there are people who definitely wouldn't agree on that. But I
am not in the qualified position to argue about that.

(3) I hate Tango, stylisticly. I hate the mixed case module names, and
the mixed case global variable names (e.g. Stdout). I want everything
to look and feel like Phobos.

No comment on that.

(4) Walter has been doing this for seven years or whatever, and has
earned my greatest respect. Ripping out the innards of D scares the
shit out of me - and not only that, I see no reason why I should have
to.

It scares you? Why?

This way, I get to use the latest cutting-edge version of D, I can
make all the module names lowercase (yes, that matters!), and though
things like Stdout(x).newline compile and run, I don't have to use
them - I'll be able to throw in nicer looking functions that do the
same thing.

You know, there's still printf in tango.stdc.stdio ..... just in
case. :P

--
Alexander Panek <alexander.panek brainsware.org>

Nov 16 2007
On 11/16/07, Alexander Panek <alexander.panek brainsware.org> wrote:
On Fri, 16 Nov 2007 08:17:42 +0000

On 11/16/07, Alexander Panek <alexander.panek brainsware.org> wrote:
Actually, the core of Tango is in tango.core

Yeah, I've tweaked my copies of several of files in core already.

My apologies - ... tweaked?

Well yeah. As I said at the start of this thread, what I did was:

foreach(example)
while(does not compile)
fix_first_error()

So if the compiler tells me that A won't cast to B because of some
invariant issue or some-such, then I modified the source in the
offending file. If that happened to be tango.core (actually I renamed
it phango.core to avoid confusion) then so be it.

As said - you could as well put the Phobos sources into Tango's std
folder and *tweak* those.

As I mentioned, I did not copy tango's std folder at all. I am doing
without it. I am not interested in messing around with D's standard
library (Phobos) in any way. In fact, I sometimes have had to call on
its services (e.g. std.contracts.assumeUnique()) to get things to
compile.

It scares you? Why?

Because it might stop something upon which I already rely from working

You know, there's still printf in tango.stdc.stdio ..... just in

True. But that's not really an issue for what I'm doing. If I can be
bothered, I might find a way to add cout.writefln() and
stdout.writefln() or whatever, to give me Phobos syntax with Tango's
streams. But right now I've still got Phobos's writef() and writefln()
functions at my disposal, so I'm perfectly happy.

Besides ... printf()? Now there's a function that really should be deprecated!

Nov 16 2007
Sean Kelly <sean f4.ca> writes:
Janice Caron wrote:
On 11/16/07, Alexander Panek <alexander.panek brainsware.org> wrote:

As said - you could as well put the Phobos sources into Tango's std
folder and *tweak* those.

As I mentioned, I did not copy tango's std folder at all. I am doing
without it.

So do you have a /std directory at all?  I would hope so, or some
portions of Tango won't work.  The instrinsic functions, for example,
must have a mangled name that begins with "std".  This is unfortunate,
but what can you do.

Sean

Nov 16 2007
On 11/16/07, Sean Kelly <sean f4.ca> wrote:

As I mentioned, I did not copy tango's std folder at all. I am doing
without it.

So do you have a /std directory at all?

I have Phobos's std directory. It is completely unchanged and intact.
(And obviously it will be updated the moment D2.008 comes along).

I would hope so, or some
portions of Tango won't work.

Given that I have (a now modified copy of) the source code, and the
power and ability to change it. I can make anything work.

The instrinsic functions, for example,
must have a mangled name that begins with "std".

None of the examples I've got working have given me this problem so
far, but I'm fair sure that if something doesn't work, I can just
change the source until it does.

Nov 16 2007
Sean Kelly <sean f4.ca> writes:
Janice Caron wrote:
On 11/16/07, Sean Kelly <sean f4.ca> wrote:

As I mentioned, I did not copy tango's std folder at all. I am doing
without it.

So do you have a /std directory at all?

I have Phobos's std directory. It is completely unchanged and intact.
(And obviously it will be updated the moment D2.008 comes along).

Oh, that's fine then.  The /std directory included with Tango just
contains cleaned-up copies of the Phobos files Tango needs.

Sean

Nov 16 2007
Sean Kelly <sean f4.ca> writes:
Janice Caron wrote:
On 11/16/07, Alexander Panek <alexander.panek brainsware.org> wrote:

Just curious: why don't you use Tango and the freestanding functions of
Phobos

Lot of reasons.

(1) If an engine ain't broke, don't fix it.

Not to plug the Tango engine, but it does actually fix a number of bugs
which are listed in the D bug tracker and have not been fixed in Phobos.

(2) I like D2.007, and I'll be switching to D2.008 the day it comes out.

(3) I hate Tango, stylisticly. I hate the mixed case module names, and
the mixed case global variable names (e.g. Stdout). I want everything
to look and feel like Phobos.

I'm not a huge fan of the mixed case global variable names either, but
it does help them stand out, which I think is the point.  The mixed case
module names help make multi-word names more readable and also help
distinguish from directories, which is an advantage in such a large
library.  The C module names have been left lowercase to match the
original C names and to provide a visual distinction between the API
layer and Tango.

(4) Walter has been doing this for seven years or whatever, and has
earned my greatest respect. Ripping out the innards of D scares the
shit out of me - and not only that, I see no reason why I should have
to.

For what it's worth, the Tango core is based on Ares, which began as a
project perhaps four years ago (I've lost track).  So the Tango runtime
isn't perhaps quite as new as it may seem.

This way, I get to use the latest cutting-edge version of D, I can
make all the module names lowercase (yes, that matters!), and though
things like Stdout(x).newline compile and run, I don't have to use
them - I'll be able to throw in nicer looking functions that do the
same thing.

This is what wrapper functions are for, in my opinion.  But then Tango
was created because of a dissatisfaction with Phobos, so I can't really
object to a dissatisfaction with Tango ;-)

Sean

Nov 16 2007
Walter Bright <newshound1 digitalmars.com> writes:
Sean Kelly wrote:
Janice Caron wrote:
(3) I hate Tango, stylisticly. I hate the mixed case module names, and
the mixed case global variable names (e.g. Stdout). I want everything
to look and feel like Phobos.

I'm not a huge fan of the mixed case global variable names either, but
it does help them stand out, which I think is the point.

Mixed case package/module names are avoided because there needs to be a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

Nov 18 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Walter Bright wrote:

Sean Kelly wrote:
Janice Caron wrote:
(3) I hate Tango, stylisticly. I hate the mixed case module names, and
the mixed case global variable names (e.g. Stdout). I want everything
to look and feel like Phobos.

I'm not a huge fan of the mixed case global variable names either, but
it does help them stand out, which I think is the point.

Mixed case package/module names are avoided because there needs to be a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

As I said elsewhere in the thread, other FS _are_ case sensitive, and thus
you need to be aware of which case you use in either case, rendering the
argument moot. Early on in D history, I encountered several cases of
modules being saved on Windows, then not working on Linux with their
intended module names due to this. And this can only happen if the Windows
programmer typed in a file name with upper case letters, even though the
module name was all lower case.

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 18 2007
torhu <no spam.invalid> writes:
Lars Ivar Igesund wrote:
>> Mixed case package/module names are avoided because there needs to be a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

As I said elsewhere in the thread, other FS _are_ case sensitive, and thus
you need to be aware of which case you use in either case, rendering the
argument moot. Early on in D history, I encountered several cases of
modules being saved on Windows, then not working on Linux with their
intended module names due to this. And this can only happen if the Windows
programmer typed in a file name with upper case letters, even though the
module name was all lower case.

I believe Walter's point is that "all package and module names are lower
case" is a simple rule that will help us avoid this problem, given that
everyone does their best to adhere to the rule.  I don't know how much
it matters, since I've never run into the problem myself.  But I just
tried it, and it shouldn't be hard to track down the problem based on
the compiler's error messages.  Not a big deal either way, it seems.

Nov 18 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
torhu wrote:

Lars Ivar Igesund wrote:
>> Mixed case package/module names are avoided because there needs to be
>> a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

As I said elsewhere in the thread, other FS _are_ case sensitive, and
thus you need to be aware of which case you use in either case, rendering
the argument moot. Early on in D history, I encountered several cases of
modules being saved on Windows, then not working on Linux with their
intended module names due to this. And this can only happen if the
Windows programmer typed in a file name with upper case letters, even
though the module name was all lower case.

I believe Walter's point is that "all package and module names are lower
case" is a simple rule that will help us avoid this problem, given that
everyone does their best to adhere to the rule.  I don't know how much
it matters, since I've never run into the problem myself.  But I just
tried it, and it shouldn't be hard to track down the problem based on
the compiler's error messages.  Not a big deal either way, it seems.

Yes, I see his point. My point is that there is no difference from having
that as a rule, and CamelCased module names as a rule :) In both cases you

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
torhu wrote:
Lars Ivar Igesund wrote:
>> Mixed case package/module names are avoided because there needs to be a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

As I said elsewhere in the thread, other FS _are_ case sensitive, and
thus
you need to be aware of which case you use in either case, rendering the
argument moot. Early on in D history, I encountered several cases of
modules being saved on Windows, then not working on Linux with their
intended module names due to this. And this can only happen if the
Windows
programmer typed in a file name with upper case letters, even though the
module name was all lower case.

I believe Walter's point is that "all package and module names are lower
case" is a simple rule that will help us avoid this problem, given that
everyone does their best to adhere to the rule.  I don't know how much
it matters, since I've never run into the problem myself.  But I just
tried it, and it shouldn't be hard to track down the problem based on
the compiler's error messages.  Not a big deal either way, it seems.

There is another issue.  Often a module has basically only one main
class in it.  If the main class is called Foo, and that's all that's in
the module, some version of "Foo" is the logical name for the package
too.  But then if you use fully qualified names you end up with
Package.Foo.Foo when referring to the class in the module, which just
look *so* silly that it's easy to forget the second Foo.  But
package.foo.Foo looks more reasonable, since it's clear the second to
last "foo" is not a class name.

--bb

Nov 18 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Bill Baxter wrote:

torhu wrote:
Lars Ivar Igesund wrote:
>> Mixed case package/module names are avoided because there needs to be
>> a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

As I said elsewhere in the thread, other FS _are_ case sensitive, and
thus
you need to be aware of which case you use in either case, rendering the
argument moot. Early on in D history, I encountered several cases of
modules being saved on Windows, then not working on Linux with their
intended module names due to this. And this can only happen if the
Windows
programmer typed in a file name with upper case letters, even though the
module name was all lower case.

I believe Walter's point is that "all package and module names are lower
case" is a simple rule that will help us avoid this problem, given that
everyone does their best to adhere to the rule.  I don't know how much
it matters, since I've never run into the problem myself.  But I just
tried it, and it shouldn't be hard to track down the problem based on
the compiler's error messages.  Not a big deal either way, it seems.

There is another issue.  Often a module has basically only one main
class in it.  If the main class is called Foo, and that's all that's in
the module, some version of "Foo" is the logical name for the package
too.  But then if you use fully qualified names you end up with
Package.Foo.Foo when referring to the class in the module, which just
look *so* silly that it's easy to forget the second Foo.  But
package.foo.Foo looks more reasonable, since it's clear the second to
last "foo" is not a class name.

--bb

Using fully qualified class names are very seldom necessary in D, I find
using renaming imports are much more useful. I'd like to turn your argument
the other way round: If you do

import package.Foo;

then it make a lot of sense that you can just use your class Foo. I
understand that this may have been uncommon for those coming from C, but I
know of several C++ libraries (Object oriented) using header files with
capitalized names, Qt and Coin3D (Open Inventor) comes to mind. Qt wasn't
always this way, but changed with version 4. OI I think always did this,
and it is 15+ years old. Indeed, its top level package is "Inventor"!
FWIW, I think SGI and TrollTech is two of very few companies that have
created truly good library API's in C++.

I could of course also pull in Java and C# as examples, but those are
weirdly enough disregarded in this debate.

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Lars Ivar Igesund wrote:
Bill Baxter wrote:

torhu wrote:
Lars Ivar Igesund wrote:
>> Mixed case package/module names are avoided because there needs to be
>> a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

As I said elsewhere in the thread, other FS _are_ case sensitive, and
thus
you need to be aware of which case you use in either case, rendering the
argument moot. Early on in D history, I encountered several cases of
modules being saved on Windows, then not working on Linux with their
intended module names due to this. And this can only happen if the
Windows
programmer typed in a file name with upper case letters, even though the
module name was all lower case.

I believe Walter's point is that "all package and module names are lower
case" is a simple rule that will help us avoid this problem, given that
everyone does their best to adhere to the rule.  I don't know how much
it matters, since I've never run into the problem myself.  But I just
tried it, and it shouldn't be hard to track down the problem based on
the compiler's error messages.  Not a big deal either way, it seems.

There is another issue.  Often a module has basically only one main
class in it.  If the main class is called Foo, and that's all that's in
the module, some version of "Foo" is the logical name for the package
too.  But then if you use fully qualified names you end up with
Package.Foo.Foo when referring to the class in the module, which just
look *so* silly that it's easy to forget the second Foo.  But
package.foo.Foo looks more reasonable, since it's clear the second to
last "foo" is not a class name.

--bb

Using fully qualified class names are very seldom necessary in D, I find
using renaming imports are much more useful.

Ok, but then the most obvious name for the renamed import is the last
component of the dot-separated module name:
import Foo = Package.Name.Too.Long.Foo;
...
Foo.Foo

Of course you could rename the module lower-case 'foo', but you could
also just have named it in lowercase from the beginning.  Or you could
come up with some other convention.

But anyway, I agree that in Tango the package names are so long that
static import is impractical.  But for other libraries that's not the
case, and I think what a lot of people are after here is a convention
that's universally applicable.  I use static import all the time in my
code because Phobos' flatter naming works well with that, and my own
code also is usually only 1 or 2 levels deep.  But I also use renamed
and selective imports too, depending how much stuff I plan to use from
the module.
[As an aside I really wish I could do renamed and selective importing on
one line, like import mod=some.long.module : Foo, Bar; ]

Saying "don't use static import" isn't a very strong argument for the
Tango naming convention in my opinion.

I'd like to turn your argument
the other way round: If you do

import package.Foo;

then it make a lot of sense that you can just use your class Foo.

If that were the only way to do imports in D, then that would make a lot
of sense.  But we also have static, renamed, and selective imports and
their use should be encouraged.  They help keep the top-level namespace
clean, and help make code more readable by specifying explicitly where
symbols are coming from.

I
understand that this may have been uncommon for those coming from C, but I
know of several C++ libraries (Object oriented) using header files with
capitalized names, Qt and Coin3D (Open Inventor) comes to mind. Qt wasn't
always this way, but changed with version 4. OI I think always did this,
and it is 15+ years old. Indeed, its top level package is "Inventor"!
FWIW, I think SGI and TrollTech is two of very few companies that have
created truly good library API's in C++.

The comparison with C++ is not valid because in C++ namespaces and file
names are decoupled.  So in C++ something like
#include<Package/SubPackage/ClassName.h>  will generally put the
ClassName into the Package::SubPackage namespace.  Or sometimes just the
Package namespace.  I've never seen anyone create a
Package::SubPackage::ClassName namespace to enclose a class called
ClassName.  But in D you don't have a choice.  The full path always
becomes part of the namespace.

I could of course also pull in Java and C# as examples, but those are
weirdly enough disregarded in this debate.

I don't remember enough about how Java imports worked to comment, and
I've never touched C#.

--bb

Nov 18 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Bill Baxter wrote:

Lars Ivar Igesund wrote:

Using fully qualified class names are very seldom necessary in D, I find
using renaming imports are much more useful.

Ok, but then the most obvious name for the renamed import is the last
component of the dot-separated module name:
import Foo = Package.Name.Too.Long.Foo;
...
Foo.Foo

Of course you could rename the module lower-case 'foo', but you could
also just have named it in lowercase from the beginning.  Or you could
come up with some other convention.

But anyway, I agree that in Tango the package names are so long that
static import is impractical.  But for other libraries that's not the
case, and I think what a lot of people are after here is a convention
that's universally applicable.  I use static import all the time in my
code because Phobos' flatter naming works well with that, and my own
code also is usually only 1 or 2 levels deep.  But I also use renamed
and selective imports too, depending how much stuff I plan to use from
the module.
[As an aside I really wish I could do renamed and selective importing on
one line, like import mod=some.long.module : Foo, Bar; ]

I think it does? At least I think the spec allows it.

Saying "don't use static import" isn't a very strong argument for the
Tango naming convention in my opinion.

Never liked static imports :P The static keyword is probably part of that :)

I'd like to turn your argument
the other way round: If you do

import package.Foo;

then it make a lot of sense that you can just use your class Foo.

If that were the only way to do imports in D, then that would make a lot
of sense.  But we also have static, renamed, and selective imports and
their use should be encouraged.  They help keep the top-level namespace
clean, and help make code more readable by specifying explicitly where
symbols are coming from.

I
understand that this may have been uncommon for those coming from C, but
I know of several C++ libraries (Object oriented) using header files with
capitalized names, Qt and Coin3D (Open Inventor) comes to mind. Qt wasn't
always this way, but changed with version 4. OI I think always did this,
and it is 15+ years old. Indeed, its top level package is "Inventor"!
FWIW, I think SGI and TrollTech is two of very few companies that have
created truly good library API's in C++.

The comparison with C++ is not valid because in C++ namespaces and file
names are decoupled.  So in C++ something like
#include<Package/SubPackage/ClassName.h>  will generally put the
ClassName into the Package::SubPackage namespace.  Or sometimes just the
Package namespace.  I've never seen anyone create a
Package::SubPackage::ClassName namespace to enclose a class called
ClassName.  But in D you don't have a choice.  The full path always
becomes part of the namespace.

I could of course also pull in Java and C# as examples, but those are
weirdly enough disregarded in this debate.

I don't remember enough about how Java imports worked to comment, and
I've never touched C#.

I'll withdraw C# from the discussion, as I don't know all aspects well
enough. Java however requires module names to equal class names, whether
they are lowercased or CamelCased. I may agree that such comparisons
possibly aren't entirely applicable though, considering modules in D are
much more important than in those languages. They are encapsulated entities
themselves after all. Which, if used as such, would imply that casing
should be the same as for classes and structs.

I'll accept this match to end with a remis though, so I can stop posting

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 18 2007
Oskar Linde <oskar.lindeREM OVEgmail.com> writes:
It is interesting to see how such a trivial thing as the capitalization
of module names can lead to a much more involved discussion than any of
Tango's technical merits ever have (possibly with one exception). It is
somewhat like making a choice between two equipment manufacturers from
the colors they use on the buttons. But form and style seems to be of
undervalued importance, and maybe there is more to this issue than it
appears. Either way, I cannot refrain from writing something about it
too. :)

Lars Ivar Igesund wrote:

Using fully qualified class names are very seldom necessary in D, I find
using renaming imports are much more useful. I'd like to turn your argument
the other way round: If you do

import package.Foo;

then it make a lot of sense that you can just use your class Foo.

What says that the module package.Foo contains a class named Foo? Most
of my own modules contain no classes at all, and many that do contain
more than one class. I know that (with different qualifiers), that is
true for Tango as well.

I wouldn't encourage module renaming, at least not without guidelines
for how things should be renamed. Lots of people making up their own
custom abbreviations for the same long module names can't lead to
something good.

I am personally quite fond of using FQN (fully qualified names) in
certain situations, but names such as

tango.util.collection.iterator.InterleavingIterator.InterleavingIterator

make that a tad inconvenient. :)

Three design choices in Tango seem to be:

* deep rather than shallow package hierarchy
* descriptive rather than abbreviated package names
* highly fragmented modules

In some ways, I tend to feel those three points are misdirected, or at
least taken a bit too far.

What are the reasons for dividing things into modules? First and
foremost, functionally independent parts should be separated so that one
can be replaced or used independent of the others. Secondly, there are
some issues with compile times and object file sizes, and the third
reason is convenience for the implementors. The reasons mentioned are in
descending order of importance. A library should always be designed for
its users, rather than for its implementers.

We humans, psychologically, tend not to be very hierarchical in our
categorization of the world. There is a basic level of categorization
that is the one most readily named and first learned (bird, cat, car).
The function of a categorization should be to provide the maximum amount
of information with the least amount of cognitive effort. The more fine
grained a categorization is, the more cognitive effort is needed. The
conclusion is that it would be cognitively advantageous to only separate
library entities into different modules if there is a relevant reason to
do so (for the purposes at hand).

I believe shallow hierarchies generally are better than deep, and also
that there should be a functional rather than logical separation between
packages.

tango.util.collection.iterator.InterleavingIterator

couldn't there just be:

tango.collection.iterators

or perhaps even:

tango.collection

An interesting parallel is the taxonomy of plants and animals from the
18th century. The Linnaean taxonomy is a highly hierarchical
classification, where for instance the common snowdrop is classified as:

Plantae.Magnoliophyta.Liliopsida.Asparagales.Amaryllidaceae.
Galanthus.nivalis

But such names were considered too unwieldy to use in full, so a concise
binomial nomenclature was used as a supplement. The same snowdrop as
above in binomials is just:

Galanthus.nivalis

Regarding capitalized module names: As far as I see it, there are
entities (functions, classes, etc) and modules (std.string,
tango.text.convert.Format). I don't really see the point of making a
distinction between modules and packages, and therefore can't really see
a point in capitalizing the last part of the module name only. But on
the other hand, there is a precedent in the binomials above -- only the
other way around. :)

I could of course also pull in Java and C# as examples, but those are
weirdly enough disregarded in this debate.

Not so weird for Java at least (I don't know C# well enough to comment).
Java (more or less) forces file names to be identical to the sole public
class in them. There are no modules in java, just classes, and since
classes are capitalized, so are the file names.

To end, I think it speaks very highly of Tango that the only issues
being actively debated are the purely stylistic ones.

--
Oskar

Nov 18 2007
Walter Bright <newshound1 digitalmars.com> writes:
Oskar Linde wrote:
To end, I think it speaks very highly of Tango that the only issues
being actively debated are the purely stylistic ones.

It's normal for easily understood issues to get a lot more comments than
the ones that need more work to grok.

However, silence is the worst case <g>. It means nobody has even looked
at it.

Nov 19 2007
"David Wilson" <dw botanicus.net> writes:
On 11/19/07, Walter Bright <newshound1 digitalmars.com> wrote:
Oskar Linde wrote:
To end, I think it speaks very highly of Tango that the only issues
being actively debated are the purely stylistic ones.

It's normal for easily understood issues to get a lot more comments than
the ones that need more work to grok.

http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/misc.html#BIKESHED-PAINTING

However, silence is the worst case <g>. It means nobody has even looked
at it.


Nov 19 2007
Walter Bright <newshound1 digitalmars.com> writes:
David Wilson wrote:
On 11/19/07, Walter Bright <newshound1 digitalmars.com> wrote:
Oskar Linde wrote:
To end, I think it speaks very highly of Tango that the only issues
being actively debated are the purely stylistic ones.

It's normal for easily understood issues to get a lot more comments than
the ones that need more work to grok.

http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/misc.html#BIKESHED-PAINTING

Spot on.

Nov 19 2007
Oskar Linde wrote:
I believe shallow hierarchies generally are better than deep, and also
that there should be a functional rather than logical separation between
packages.

tango.util.collection.iterator.InterleavingIterator

couldn't there just be:

tango.collection.iterators

or perhaps even:

tango.collection

One problem with shoving all iterators into one module is the way the protection
specifiers work in D. As you probably know, private and co are module-level.
This means that InterleavingIterator and TropicalJungleIterator, while
completely distinct, can access each other's privates! The fact that they are in
different modules thus accentuates their independence of each other.

If protection specifiers worked as they do in C++ (and, as a matter of fact, in
just about every other language I know of that implements such a feature), then
a "tango.collection.iterators" package would make more sense. As it is, putting
two classes into the same module suggests that they are tightly coupled and, at
least to me, that they do access each other's private members.

Plus, especially a general-purpose module such as "tango.collection" would grow
to thousands of lines in length. This would make it a pain to code in, but there
are also issues for the user. For instance, the automatically generated DDoc
would also be exceedingly long and would have to manually be separated into
coherent parts.

I do agree that the "tango.util.collection" package should be just
"tango.collection", though. :-)

--
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi

Nov 20 2007
John Reimer <terminal.node gmail.com> writes:
I actuallBill Baxter wrote:
torhu wrote:
Lars Ivar Igesund wrote:
>> Mixed case package/module names are avoided because there needs to
be a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

As I said elsewhere in the thread, other FS _are_ case sensitive, and
thus
you need to be aware of which case you use in either case, rendering the
argument moot. Early on in D history, I encountered several cases of
modules being saved on Windows, then not working on Linux with their
intended module names due to this. And this can only happen if the
Windows
programmer typed in a file name with upper case letters, even though the
module name was all lower case.

I believe Walter's point is that "all package and module names are
lower case" is a simple rule that will help us avoid this problem,
given that everyone does their best to adhere to the rule.  I don't
know how much it matters, since I've never run into the problem
myself.  But I just tried it, and it shouldn't be hard to track down
the problem based on the compiler's error messages.  Not a big deal
either way, it seems.

There is another issue.  Often a module has basically only one main
class in it.  If the main class is called Foo, and that's all that's in
the module, some version of "Foo" is the logical name for the package
too.  But then if you use fully qualified names you end up with
Package.Foo.Foo when referring to the class in the module, which just
look *so* silly that it's easy to forget the second Foo.  But
package.foo.Foo looks more reasonable, since it's clear the second to
last "foo" is not a class name.

I actually think both package.foo.Foo and package.Foo.Foo look bizarre.
I've always disliked this part of D.  In that light, I think it really
is more a shortcoming of the way D does namespaces.  Tango just tries to
work around this (for good or bad... there's seems little choice in the
matter: I believe tango developers and others haggled over this and
other issues long and hard in the past: it wasn't an easy decision).

I'm not sure what might be a good solution to these problems without
"fixing" D. Maybe a more C++ style (horrors!! did I say that?!) would be
useful in differentiating module namespace from class?  I'm not sure...
but that would mean a another D spec change:

such as

package.foo::Foo

as a reference to class Foo (or whatever other symbol one wants to specify)

or package.foo::

as an implied reference to whatever symbol has the same name as module
name... in this case "foo".  If module name "Foo" is capitalized,
therefore, the class or symbol with "Foo" would be selected.

Just some thoughts,

John

Nov 18 2007
Don Clugston <dac nospam.com.au> writes:
John Reimer wrote:

John, it's great to see you back! I feared you were gone forever.
- Don.

Nov 20 2007
John Reimer <terminal.node gmail.com> writes:
Don Clugston wrote:
John Reimer wrote:

John, it's great to see you back! I feared you were gone forever.
- Don.

Don,

You are too kind. :-)

I almost figured I was gone for good too, but it's hard to stay away
from the techy side of life for too long... and D is smack in the center
of it.

Life has been very busy, especially because I'm now apprenticing in log
home construction (www.pioneerloghomesofbc.com) ... a welcome change
from paramedic work (yes, a very unusual change in employment yet
fascinating, nonetheless; it's great to have the opportunity to pick up
these kind of skills).  Anyway, due to winter finally setting in, my
work hours are shorter.  Thus, I've managed a time-slice for D lurking
again among other things (and hopefully a continuation of some
documentation effort). :-D

It's great to see the rapid growth that's been happening around D.
Looks like you have been as creative and productive as ever. ;-)  More
exciting things to come from your end, I can only imagine.

Great to hear from you too, Don. :-)

Take care,

John

Nov 20 2007
John Reimer <terminal.node gmail.com> writes:
John Reimer wrote:
Don Clugston wrote:
John Reimer wrote:

John, it's great to see you back! I feared you were gone forever.
- Don.

Don,

You are too kind. :-)

I almost figured I was gone for good too, but it's hard to stay away
from the techy side of life for too long... and D is smack in the center
of it.

Life has been very busy, especially because I'm now apprenticing in log
home construction (www.pioneerloghomesofbc.com) ... a welcome change
from paramedic work (yes, a very unusual change in employment yet
fascinating, nonetheless; it's great to have the opportunity to pick up
these kind of skills).  Anyway, due to winter finally setting in, my
work hours are shorter.  Thus, I've managed a time-slice for D lurking
again among other things (and hopefully a continuation of some
documentation effort). :-D

It's great to see the rapid growth that's been happening around D. Looks
like you have been as creative and productive as ever. ;-)  More
exciting things to come from your end, I can only imagine.

Great to hear from you too, Don. :-)

Take care,

John

*sigh*

Looking over this thread, I am reminded of the major reason that I left
in the first place (of course, I was partly responsible for it last
time). :-(

Human nature is so ugly.

Nov 21 2007
Don Clugston <dac nospam.com.au> writes:
John Reimer wrote:
John Reimer wrote:
Don Clugston wrote:
John Reimer wrote:

John, it's great to see you back! I feared you were gone forever.
- Don.

Don,

You are too kind. :-)

I almost figured I was gone for good too, but it's hard to stay away
from the techy side of life for too long... and D is smack in the
center of it.

Life has been very busy, especially because I'm now apprenticing in
log home construction (www.pioneerloghomesofbc.com) ... a welcome
change from paramedic work (yes, a very unusual change in employment
yet fascinating, nonetheless; it's great to have the opportunity to
pick up these kind of skills).  Anyway, due to winter finally setting
in, my work hours are shorter.  Thus, I've managed a time-slice for D
lurking again among other things (and hopefully a continuation of some
documentation effort). :-D

It's great to see the rapid growth that's been happening around D.
Looks like you have been as creative and productive as ever. ;-)  More
exciting things to come from your end, I can only imagine.

Great to hear from you too, Don. :-)

Take care,

John

*sigh*

Looking over this thread, I am reminded of the major reason that I left
in the first place (of course, I was partly responsible for it last
time). :-(

Human nature is so ugly.

Indeed.

Especially since it was a post by you (on a C++ ng I think) that made me give D
a chance in the first place. That's why I'm here.

-Don.

Nov 21 2007
Sean Kelly <sean f4.ca> writes:
Don Clugston wrote:
John Reimer wrote:
Human nature is so ugly.

Indeed.

Especially since it was a post by you (on a C++ ng I think) that made me
give D a chance in the first place. That's why I'm here.

Yup.  John has always been a valuable member of the D community.  I was
very disappointed to see him leave, though I can understand why one
would not want to deal with the drama.

Sean

Nov 21 2007
"Kris" <foo bar.com> writes:
"Sean Kelly" <sean f4.ca> wrote in message
Don Clugston wrote:
John Reimer wrote:
Human nature is so ugly.

Indeed.

Especially since it was a post by you (on a C++ ng I think) that made me
give D a chance in the first place. That's why I'm here.

Yup.  John has always been a valuable member of the D community.  I was
very disappointed to see him leave, though I can understand why one would
not want to deal with the drama.

Yeah, I fully agree. Good to see him back here!

Nov 21 2007
Sean Kelly <sean f4.ca> writes:
John Reimer wrote:

*sigh*

Looking over this thread, I am reminded of the major reason that I left
in the first place (of course, I was partly responsible for it last
time). :-(

Human nature is so ugly.

Fortunately, with usenet, not being a part of the discussion is as

Sean

Nov 21 2007
Christopher Wright <dhasenan gmail.com> writes:
Walter Bright wrote:
Sean Kelly wrote:
Janice Caron wrote:
(3) I hate Tango, stylisticly. I hate the mixed case module names, and
the mixed case global variable names (e.g. Stdout). I want everything
to look and feel like Phobos.

I'm not a huge fan of the mixed case global variable names either, but
it does help them stand out, which I think is the point.

Mixed case package/module names are avoided because there needs to be a
1:1 correspondence between file names and package/module names, and not
all file systems are case sensitive (like FAT32 and NTFS, for a couple
widely used examples).

The only way to solve this is to have the DMD frontend do
case-insensitive matching of imports. As it stands, I should be able to
say 'import STD.STDIO;' on Windows/ntfs and have it work, but have it
fail when using ext3. (I don't have a copy of Windows, so I can't check;
and I don't feel like making a case-insensitive fs on my machine right
now. I don't think you put in an explicit check for accurate case, since
if you typed in a command line 'cd phobos/StD/', Windows might update
the case of the folder name.)

This would have a minor benefit of allowing people using tango to write
'import tango.io.stdout;', but using a standard convention also works
decently. It's just that different projects use different conventions,
and I can't use both in my project because of the case insensitive file
systems.

Nov 18 2007
Christopher Wright wrote:
Walter Bright wrote:
Mixed case package/module names are avoided because there needs to be
a 1:1 correspondence between file names and package/module names, and
not all file systems are case sensitive (like FAT32 and NTFS, for a
couple widely used examples).

The only way to solve this is to have the DMD frontend do
case-insensitive matching of imports. As it stands, I should be able to
say 'import STD.STDIO;' on Windows/ntfs and have it work, but have it
fail when using ext3. (I don't have a copy of Windows, so I can't check;
and I don't feel like making a case-insensitive fs on my machine right
now. I don't think you put in an explicit check for accurate case, since
if you typed in a command line 'cd phobos/StD/', Windows might update
the case of the folder name.)

This would have a minor benefit of allowing people using tango to write
'import tango.io.stdout;', but using a standard convention also works
decently. It's just that different projects use different conventions,
and I can't use both in my project because of the case insensitive file
systems.

import StD.sTdIo;
void main() { writefln("hello world"); }

Compiles and runs on Windows.

--
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi

Nov 18 2007
Walter Bright <newshound1 digitalmars.com> writes:
Steven Schveighoffer wrote:
"Janice Caron" wrote
I've started to like Tango, now that I've got bits of it working with
Phobos :-)

With a bit of kludging, I've persuaded all of the examples in the
"console" and "text" directories to build with Phobos using DMD 2.007.
Of the examples files, only "properties.d" needed to be tweaked
slightly - and that was just to replace "char[]" with "string".

Just an FYI, some of us are working on a D 2.x compatible version of Tango.

Basically the hard part is adding const.

It's not release-ready yet, but I'm hoping once Walter has fixed const, we
should be able to finish the port.

Of course, it does not use Phobos... But hopefully that problem will be
solved soon also.

The const stuff is changing significantly (for the much better, I hope),
so be prepared to do another pass over it if you are adapting it to
const. I've found the necessary changes to the source to be simple to do
(and they are flagged by the compiler), so it shouldn't be a problem.

Nov 18 2007
Jason House <jason.james.house gmail.com> writes:
Janice Caron Wrote:

I've started to like Tango, now that I've got bits of it working with Phobos
:-)

This reminds me... Walter and the Tango team agreed to make their libraries
compatible with each other.

Along those lines, what's the plans/status of that?  I suspect there may even
be different plans/status for D 1.x and D 2.x.

Nov 16 2007
Sean Kelly <sean f4.ca> writes:
Jason House wrote:
Janice Caron Wrote:

I've started to like Tango, now that I've got bits of it working with Phobos
:-)

This reminds me... Walter and the Tango team agreed to make their libraries
compatible with each other.

Along those lines, what's the plans/status of that?  I suspect there may even
be different plans/status for D 1.x and D 2.x.

D 1.0 is in maintenance mode now, so Phobos 1.0 isn't likely to change
much, if at all.  D 2.0 is obviously still in flux, and Phobos 2.0 has
already incorporated some of Tango's changes.  It is uncertain what the
final result of the merge will be for D 2.0, but from a code perspective
it is more likely that Phobos 2.0 will end up effectively using the
Tango runtime than vice-versa.  This is because everyone seems to agree
that the Tango runtime is a bit more robust.

Sean

Nov 16 2007
Jason House <jason.james.house gmail.com> writes:
Sean Kelly Wrote:
D 1.0 is in maintenance mode now, so Phobos 1.0 isn't likely to change
much, if at all.  D 2.0 is obviously still in flux, and Phobos 2.0 has
already incorporated some of Tango's changes.  It is uncertain what the
final result of the merge will be for D 2.0, but from a code perspective
it is more likely that Phobos 2.0 will end up effectively using the
Tango runtime than vice-versa.  This is because everyone seems to agree
that the Tango runtime is a bit more robust.

I translate that to mean that the merge of Tango and Phobos relies on the
Phobos developers to do the work.  Is Phobos being actively matured?  My
previous impression is that Walter was doing both that and compiler
internals... with most time dedicated to the latter.

Is there a timeline when 2.0 versions of phobos and tango will be compatible?
How will the pieces be partitioned?  Will tango be released with new dmd
versions?  Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

Sean


Nov 16 2007
On 11/16/07, Jason House <jason.james.house gmail.com> wrote:
Will both libraries adopt the same style (naming conventions, capitalization,
etc...)?

I surely hope so. ++myVote

Nov 16 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Janice Caron wrote:

On 11/16/07, Jason House <jason.james.house gmail.com> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 17 2007
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him. And (apart from Tango) I think it is
"the norm" to name classes in titlecase and variables in lowercase.
Tango is just plain weird in giving variables names like "Stdout".
That's just perverse. Just because it's a global variable doesn't mean
you can go all titlecase.

I kid you not - if Tango used "normal" case conventions, it would have

In any case, I am currently crafting my own personally bastardised
version of Tango. I've already got a significant fraction of it
compiling under D2.007 (including Phobos), and yes I renamed all the
module names to lowercase. And I'll probably make "Stdout" merely an
alias for "stdout" too (etc.)

Seriously - Tango's stylistic issues are a big turn-off. Tango
fix them.

Nov 17 2007
Sean Kelly <sean f4.ca> writes:
Janice Caron wrote:
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him.

What is your objection to CamelCase module names?

I kid you not - if Tango used "normal" case conventions, it would have

This seems a bit extreme.  The only variables I can think of in Tango
are Stdin, Stdout, and Stderr.  And these could easily be aliased to
something else if the user finds the names offensive.

In any case, I am currently crafting my own personally bastardised
version of Tango. I've already got a significant fraction of it
compiling under D2.007 (including Phobos), and yes I renamed all the
module names to lowercase. And I'll probably make "Stdout" merely an
alias for "stdout" too (etc.)

You may run into conflicts with the C file handle of the same name.

Seriously - Tango's stylistic issues are a big turn-off. Tango
fix them.

Please suggest an alternate formatting style and explain why it is better.

Sean

Nov 17 2007
Derek Parnell <derek psych.ward> writes:
On Sat, 17 Nov 2007 14:07:56 -0800, Sean Kelly wrote:

Janice Caron wrote:
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him.

What is your objection to CamelCase module names?

Windows file system is case insensitive therefore it is easy to cause
'can't find module' type errors even though the file exists.

--
Derek Parnell
Melbourne, Australia
skype: derek.j.parnell

Nov 17 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Derek Parnell wrote:

On Sat, 17 Nov 2007 14:07:56 -0800, Sean Kelly wrote:

Janice Caron wrote:
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him.

What is your objection to CamelCase module names?

Windows file system is case insensitive therefore it is easy to cause
'can't find module' type errors even though the file exists.

When one thinks the file system is case insensitive, it is easy creating
files that breaks the compile on a system where the FS is case sensitive,
so IMO not a very strong argument. It can be equally useful to have the
creators aware of the casing used.

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 17 2007
"Kris" <foo bar.com> writes:
Hiya Derek,

It's probably worth pointing out that millions of Java developers don't have
the issue you note? I mean, if it were an issue, we'd surely have heard

- Kris

"Derek Parnell" <derek psych.ward> wrote in message
news:x2bmtq679an5$.1sopa9nv1qrgk$.dlg 40tude.net...
On Sat, 17 Nov 2007 14:07:56 -0800, Sean Kelly wrote:

Janice Caron wrote:
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him.

What is your objection to CamelCase module names?

Windows file system is case insensitive therefore it is easy to cause
'can't find module' type errors even though the file exists.

--
Derek Parnell
Melbourne, Australia
skype: derek.j.parnell


Nov 17 2007
Walter Bright <newshound1 digitalmars.com> writes:
Kris wrote:
Hiya Derek,

It's probably worth pointing out that millions of Java developers don't have
the issue you note? I mean, if it were an issue, we'd surely have heard

The compiler will distinguish modules Foo and foo as being different,
but the filesystem won't.

Does it cause problems? See http://mindprod.com/jgloss/casesensitive.html

Evidently it does come up as an issue:
http://gcc.gnu.org/ml/java/2002-03/msg00334.html

As for me, I've routinely ported code between filesystems that had all
kinds of varying support for case. What works best is naming files with
all lower case - then things port smoothly without problems. Why have
potential problems when they are so easily avoided?

A further reason is that having case conventions for different kinds of
symbols aids in reading the code (and even catching errors). Having
module names use a different form than class names, for example, just
helps. Not a whole lot, but why not take it?

And in the end, the Tango team can use whatever conventions they want to.

Nov 18 2007
renoX <renosky free.fr> writes:
Sean Kelly a écrit :
Janice Caron wrote:
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him.

What is your objection to CamelCase module names?

Easy: when in Romes do like Romans i.e. coherency beats 'invent your own
style' any time of the day, otherwise big projects looks ugly.

So Tango should really follow convention used by Walter in Phobos.

Not following this simple rule looks 'amateurish' from Tango's guys,
sorry for the harsh word but that's my view.

renoX

I kid you not - if Tango used "normal" case conventions, it would have

This seems a bit extreme.  The only variables I can think of in Tango
are Stdin, Stdout, and Stderr.  And these could easily be aliased to
something else if the user finds the names offensive.

In any case, I am currently crafting my own personally bastardised
version of Tango. I've already got a significant fraction of it
compiling under D2.007 (including Phobos), and yes I renamed all the
module names to lowercase. And I'll probably make "Stdout" merely an
alias for "stdout" too (etc.)

You may run into conflicts with the C file handle of the same name.

Seriously - Tango's stylistic issues are a big turn-off. Tango
fix them.

Please suggest an alternate formatting style and explain why it is better.

Sean


Nov 17 2007
Sean Kelly <sean f4.ca> writes:
renoX wrote:
Sean Kelly a écrit :
Janice Caron wrote:
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him.

What is your objection to CamelCase module names?

Easy: when in Romes do like Romans i.e. coherency beats 'invent your own
style' any time of the day, otherwise big projects looks ugly.

So Tango should really follow convention used by Walter in Phobos.

What if that convention proves insufficient for a library that is much
larger than Phobos?

Sean

Nov 17 2007
"Kris" <foo bar.com> writes:
"renoX" <renosky free.fr> wrote in message
news:fhnr42$1ego$1 digitalmars.com...

Easy: when in Romes do like Romans i.e. coherency beats 'invent your own
style' any time of the day, otherwise big projects looks ugly.

So Tango should really follow convention used by Walter in Phobos.

Not following this simple rule looks 'amateurish' from Tango's guys, sorry
for the harsh word but that's my view.

No problem, renoX, but there's at least two strawmen in your post. Maybe
three:

1) "big projects look ugly" -- unsustained nonsense :)

2) "convention used by Walter" -- phobos is a mix of all kinds of
non-cohesive design and implementation. So much for convention :)

3) "amatuerish" because of a minor variation in style?  Digging for
mountainous molehills, my friend :)

Further, there a vague implication that Tango is somehow non-coherent, and
that we 'invented' our own style of using camelCase for global variables and
module names. LOL!
Well, we didn't invent anything new. Those idioms have been used very
successfully by millions of programmers for decades.

This is great! No offence taken, RenoX, and none intended toward you ... but
you might as well say that "D sucks goat turds" because it changes how C
programmers view the world. Yeah, I know people don't like change, but
seriously.

If you truly feel the use of CamelCase in global vars is just too
distressing, please, see a doctor. Such things are /really/ not worth
"sorry for the harsh words, but that's my view"

- Kris

Nov 17 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Kris wrote:
"renoX" <renosky free.fr> wrote in message
news:fhnr42$1ego$1 digitalmars.com...

Easy: when in Romes do like Romans i.e. coherency beats 'invent your own
style' any time of the day, otherwise big projects looks ugly.

So Tango should really follow convention used by Walter in Phobos.

Not following this simple rule looks 'amateurish' from Tango's guys, sorry
for the harsh word but that's my view.

No problem, renoX, but there's at least two strawmen in your post. Maybe
three:

1) "big projects look ugly" -- unsustained nonsense :)

2) "convention used by Walter" -- phobos is a mix of all kinds of
non-cohesive design and implementation. So much for convention :)

3) "amatuerish" because of a minor variation in style?  Digging for
mountainous molehills, my friend :)

Further, there a vague implication that Tango is somehow non-coherent, and
that we 'invented' our own style of using camelCase for global variables and
module names. LOL!
Well, we didn't invent anything new. Those idioms have been used very
successfully by millions of programmers for decades.

This is great! No offence taken, RenoX, and none intended toward you ... but
you might as well say that "D sucks goat turds" because it changes how C
programmers view the world. Yeah, I know people don't like change, but
seriously.

If you truly feel the use of CamelCase in global vars is just too
distressing, please, see a doctor. Such things are /really/ not worth
"sorry for the harsh words, but that's my view"

- Kris

All I'm going to say to respond to that is that you have done a very good job
of showing that you are much less mature than RenoX.

A...

Nov 18 2007
"Kris" <foo bar.com> writes:
"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_
wrote in message you are much less mature than RenoX.

Thanks Alix.

I find serious immaturity surrounding this entire issue. It's seems to be

"I don't like Stdout because it should be stdout instead. Dammit!", or "I
won't even use Tango just because the module names aren't lowercase!".

I mean, seriously. What would you call that, Alix? I suspect most people
would call it "petty beyond contemplation".

You have a choice. Don't get hung up on the tiny details, when there's a
whole treasure of functionality in Tango, plus an active and dedicted group
of people to ensure it remains nurtured.

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Kris wrote:
"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_
wrote in message you are much less mature than RenoX.

Thanks Alix.

I find serious immaturity surrounding this entire issue. It's seems to be

"I don't like Stdout because it should be stdout instead. Dammit!", or "I
won't even use Tango just because the module names aren't lowercase!".

I mean, seriously. What would you call that, Alix? I suspect most people
would call it "petty beyond contemplation".

You have a choice. Don't get hung up on the tiny details, when there's a
whole treasure of functionality in Tango, plus an active and dedicted group
of people to ensure it remains nurtured.

I can only assume that there is a red mist that is stopping you from seeing the
points that pwople are trying to make, you are too protective of your precious.

I have tried to be constructive and explain exactly my objections and why I
find that one particular aspect of Tango, for me, makes code that uses it
more so if I use my own.

All you reply is that you have a choice, you do not try to explain why the
system that you have chosen is better.

Some might read into that you don't actually have a counter argument but are
too stuborn to make any kind of address.

If you were a professional contractor and I had hired you to implement a
library, would you have the same responce, or would you just say "you have a

I can understand that you perhaps feel that you have already covered this issue
before and that you don't want to get drawn into it again, but your attitude
just seems strange for someone who is creating a library for a community.

And from your point of view as the writer of the library, the presence of some
capitals might be a tiny detail, but the confusion that I have found when
trying to use that library as a consumer are sufficient to deter me from

While there is no alternative, and the fledgeling D community is in effect your
captured audience I believe Tango will do well, but if you ever find yourself
with real competition, I think that you will have to change your attitude (and
this effects way more than theis CamelCase issue) or see Tango's user base
rapidly dwindle.

You will never see any company advertise its products with the slogan "Well,
you have a choice!"

A...

Nov 18 2007
"Kris" <foo bar.com> writes:
Wow ... I really have no idea of what you're talking about Alix. Honestly, I
really don't. There is no strange red mist or anything else. Instead it is
quite simple:

You want something different from what other people want. That cannot be
accomodated.

- Kris

"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote in message
news:fhqee1$2sps$1 digitalmars.com...
Kris wrote:
"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_
wrote in message you are much less mature than RenoX.

Thanks Alix.

I find serious immaturity surrounding this entire issue. It's seems to be

"I don't like Stdout because it should be stdout instead. Dammit!", or "I
won't even use Tango just because the module names aren't lowercase!".

I mean, seriously. What would you call that, Alix? I suspect most people
would call it "petty beyond contemplation".

You have a choice. Don't get hung up on the tiny details, when there's a
whole treasure of functionality in Tango, plus an active and dedicted
group of people to ensure it remains nurtured.

I can only assume that there is a red mist that is stopping you from
seeing the points that pwople are trying to make, you are too protective

I have tried to be constructive and explain exactly my objections and why
I find that one particular aspect of Tango, for me, makes code that uses
and more so if I use my own.

All you reply is that you have a choice, you do not try to explain why the
system that you have chosen is better.

Some might read into that you don't actually have a counter argument but
are too stuborn to make any kind of address.

If you were a professional contractor and I had hired you to implement a
library, would you have the same responce, or would you just say "you have
a choice" and forfeit your payment?

I can understand that you perhaps feel that you have already covered this
issue before and that you don't want to get drawn into it again, but your
attitude just seems strange for someone who is creating a library for a
community.

And from your point of view as the writer of the library, the presence of
some capitals might be a tiny detail, but the confusion that I have found
when trying to use that library as a consumer are sufficient to deter me

While there is no alternative, and the fledgeling D community is in effect
your captured audience I believe Tango will do well, but if you ever find
yourself with real competition, I think that you will have to change your
attitude (and this effects way more than theis CamelCase issue) or see
Tango's user base rapidly dwindle.

You will never see any company advertise its products with the slogan
"Well, you have a choice!"

A...


Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Kris wrote:
Wow ... I really have no idea of what you're talking about Alix. Honestly, I
really don't. There is no strange red mist or anything else. Instead it is
quite simple:

You want something different from what other people want. That cannot be
accomodated.

- Kris

"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote in message
news:fhqee1$2sps$1 digitalmars.com...
Kris wrote:
"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_
wrote in message you are much less mature than RenoX.

Thanks Alix.

I find serious immaturity surrounding this entire issue. It's seems to be

"I don't like Stdout because it should be stdout instead. Dammit!", or "I
won't even use Tango just because the module names aren't lowercase!".

I mean, seriously. What would you call that, Alix? I suspect most people
would call it "petty beyond contemplation".

You have a choice. Don't get hung up on the tiny details, when there's a
whole treasure of functionality in Tango, plus an active and dedicted
group of people to ensure it remains nurtured.

I can only assume that there is a red mist that is stopping you from
seeing the points that pwople are trying to make, you are too protective

I have tried to be constructive and explain exactly my objections and why
I find that one particular aspect of Tango, for me, makes code that uses
and more so if I use my own.

All you reply is that you have a choice, you do not try to explain why the
system that you have chosen is better.

Some might read into that you don't actually have a counter argument but
are too stuborn to make any kind of address.

If you were a professional contractor and I had hired you to implement a
library, would you have the same responce, or would you just say "you have
a choice" and forfeit your payment?

I can understand that you perhaps feel that you have already covered this
issue before and that you don't want to get drawn into it again, but your
attitude just seems strange for someone who is creating a library for a
community.

And from your point of view as the writer of the library, the presence of
some capitals might be a tiny detail, but the confusion that I have found
when trying to use that library as a consumer are sufficient to deter me

While there is no alternative, and the fledgeling D community is in effect
your captured audience I believe Tango will do well, but if you ever find
yourself with real competition, I think that you will have to change your
attitude (and this effects way more than theis CamelCase issue) or see
Tango's user base rapidly dwindle.

You will never see any company advertise its products with the slogan
"Well, you have a choice!"

A...

Nope, tat is not what I want at all...

A...

Nov 18 2007
"Kris" <foo bar.com> writes:
"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_>

Nope, tat is not what I want at all...

Then, it not yet clear what it is that you want. I suggest you start a
completely separate thread, or hook up on IRC where the conversation
badwidth is a lot higher than here?

- Kris

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
renoX wrote:
Sean Kelly a écrit :
Janice Caron wrote:
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him.

What is your objection to CamelCase module names?

Easy: when in Romes do like Romans i.e. coherency beats 'invent your own
style' any time of the day, otherwise big projects looks ugly.

So Tango should really follow convention used by Walter in Phobos.

Not following this simple rule looks 'amateurish' from Tango's guys,
sorry for the harsh word but that's my view.

renoX

I agree, I don't know where it started, but I got used to the convention that
IdentifiersLikeThis were classes onesLikeThis were instances and
OTHERS_LIKE_THIS constants, leaveing alllowercase for
modules/namespaces/short-term-variables.
In an OO lang, its nice to look at an identifier and be able to consistently
know if its a class or an instance or a module. I want "InitailUpper.foo()" to
always be a call to a static method of a class and not be confused with the
disambiguation of a funcion within a module.
That initial capital shouts out to me to declare "I am a class", and in Tango,
its not always the case. While you may be able to argue that modules are more
important than classes, the link to the file system where rules over case may
differ from those of the language, for me, take precidence, and wherever I have
that issue, I resort to all lower-case. This is because it has been shown in
experiments to be easier to read than all caps.
Tango's wild departure from myown naming style is one of the reasons that I was

A...

Nov 18 2007
Sean Kelly <sean f4.ca> writes:
Alix Pexton wrote:
Tango's wild departure from myown naming style is one of the reasons
that I was not an early adopter.

Tango's naming convention isn't consistent with my own style either, but
I didn't find it terribly difficult to get used to.

Sean

Nov 18 2007
"Kris" <foo bar.com> writes:
Alix;

You're certainly welcome to your opinion, just as we all are. There are many
who disagree with you, and there's no way to resolve that dillema as I've

"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote in message
news:fhp7v1$ff8$1 digitalmars.com...
renoX wrote:
Sean Kelly a écrit :
Janice Caron wrote:
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him.

What is your objection to CamelCase module names?

Easy: when in Romes do like Romans i.e. coherency beats 'invent your own
style' any time of the day, otherwise big projects looks ugly.

So Tango should really follow convention used by Walter in Phobos.

Not following this simple rule looks 'amateurish' from Tango's guys,
sorry for the harsh word but that's my view.

renoX

I agree, I don't know where it started, but I got used to the convention
that IdentifiersLikeThis were classes onesLikeThis were instances and
OTHERS_LIKE_THIS constants, leaveing alllowercase for
modules/namespaces/short-term-variables.
In an OO lang, its nice to look at an identifier and be able to
consistently know if its a class or an instance or a module. I want
"InitailUpper.foo()" to always be a call to a static method of a class and
not be confused with the disambiguation of a funcion within a module.
That initial capital shouts out to me to declare "I am a class", and in
Tango, its not always the case. While you may be able to argue that
modules are more important than classes, the link to the file system where
rules over case may differ from those of the language, for me, take
precidence, and wherever I have that issue, I resort to all lower-case.
This is because it has been shown in experiments to be easier to read than
all caps.
Tango's wild departure from myown naming style is one of the reasons that
I was not an early adopter.

A...


Nov 18 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Janice Caron wrote:

On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him. And (apart from Tango) I think it is
"the norm" to name classes in titlecase and variables in lowercase.

Well, there are many using this style because W says/said it's standard.
That doesn't really mean it's the norm, neither that it is better than any
other style.

Tango is just plain weird in giving variables names like "Stdout".
That's just perverse. Just because it's a global variable doesn't mean
you can go all titlecase.

Are you sure you understand the meaning of the word weird?

I kid you not - if Tango used "normal" case conventions, it would have

Wow, you certainly know a lot.

In any case, I am currently crafting my own personally bastardised
version of Tango. I've already got a significant fraction of it
compiling under D2.007 (including Phobos), and yes I renamed all the
module names to lowercase. And I'll probably make "Stdout" merely an
alias for "stdout" too (etc.)

I am truly impressed at the effort you put into this.

Seriously - Tango's stylistic issues are a big turn-off. Tango
fix them.

Tango have very few stylistic issues, all of which should be gone pretty
soon. Have a feeling those aren't the ones you mean though... Phobos have a
few as it isn't entirely consistent with itself.

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 17 2007
"Kris" <foo bar.com> writes:
"Janice Caron" <caron800 googlemail.com> wrote in message

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him. And (apart from Tango) I think it is
"the norm" to name classes in titlecase and variables in lowercase.
Tango is just plain weird in giving variables names like "Stdout".
That's just perverse. Just because it's a global variable doesn't mean
you can go all titlecase.

knew you'd find a way to dredge this up again :)

We've already discussed this Janice, and your position was shown to be
somewhat more than dubious at that time. That hasn't changed, so it comes
down purely to your 'personal' taste.

You don't /have/ to use Tango if you find the use of distinguishing
characters to be so bitterly offensive. Really, you don't. You swore it off
issue. It's nothing but a storm in a teacup. Shrug

And please, don't start again with the "it says in the D doc that ..."
because we've already been there. Done that. Over. Finito. Or maybe you
didn't read the responses the last time around? :)

Still, thanks for your interest in Tango all the same. I'm really glad that
you find the functionality worthwhile to be spending your time converting
it.

Best;

- Kris

Nov 17 2007
phango <phango phangowant.com> writes:
i love that - please release it to us all!
can't wait to get it for all the reasons you put forth.

Janice Caron Wrote:

On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

I surely hope so. ++myVote

You understand that that would mean Phobos gaining Tango's style?

Oh I don't think so. Walter is quite clear that module names should be
lowercase, and I agree with him. And (apart from Tango) I think it is
"the norm" to name classes in titlecase and variables in lowercase.
Tango is just plain weird in giving variables names like "Stdout".
That's just perverse. Just because it's a global variable doesn't mean
you can go all titlecase.

I kid you not - if Tango used "normal" case conventions, it would have

In any case, I am currently crafting my own personally bastardised
version of Tango. I've already got a significant fraction of it
compiling under D2.007 (including Phobos), and yes I renamed all the
module names to lowercase. And I'll probably make "Stdout" merely an
alias for "stdout" too (etc.)

Seriously - Tango's stylistic issues are a big turn-off. Tango
fix them.


Nov 17 2007
"Kris" <foo bar.com> writes:
There's a fair chance the poster below is actually Janice, but just in case
there really is someone voicing an honest opinion there, read on ...

What many people fail to realize is that software doesn't survive without
nurture. In fact, when you forcibly freeze software, it tends to die quite
quickly (this is what happened to Simula, for those who follow language
history, and it's somewhat relevant here since Simula is perhaps the closest
relative to D).

The take-home message is that Tango will continue to develop, grow, improve,
mature, in a non-static fashion. If anyone wants to chase that with a
redundant copy, that's their folly. Making a copy of Tango functionality is
only inviting more work for yourselves, and generating out-of-date
functionality for others to operate with. Isn't that obvious?

The recommendation is this: if you'd like something changed within Tango,
then request it. We can't always please everyone, but we do manage to make a
lot of people happy with the (often real-time) changes we do make. Having
said that, requesting sweeping stylistic changes, based purely upon personal
preference, is likely to conflict with the personal preference of others.
It's very hard to resolve such a dilemma, as I'm sure everyone can
understand.

- Kris

"phango" <phango phangowant.com> wrote in message
news:fhnplh$1cs3$1 digitalmars.com...
i love that - please release it to us all!
can't wait to get it for all the reasons you put forth.


Nov 17 2007
On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

Nov 17 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Janice Caron wrote:

On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

FWIW, you can't call a distinction on you as a person and your opinions when
it comes to insulting. So if you think you may have insulted my opinions
(about Tango or any other subject), then you probably insulted /me/

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 17 2007
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Janice Caron wrote:

On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

FWIW, you can't call a distinction on you as a person and your opinions when
it comes to insulting. So if you think you may have insulted my opinions
(about Tango or any other subject), then you probably insulted /me/

Kris made a false accusation. That was unwarranted. You can't go
around accusing people of things they didn't do. That is outrageous.
Worse, it's injustice.

Kris accused me of making a post in another name, in support my actual
posts. That, I did not do, and I resent the implication. That
accusation is several orders magnitude worse than an criticisism of
variable naming conventions, and it stinks.

Kris, That wasn't me. Deal with it. And I hope you have the decency to
retract the accuasion and apologise.

Nov 17 2007
"Kris" <foo bar.com> writes:
"Janice Caron" <caron800 googlemail.com> wrote in message
news:mailman.98.1195344174.2338.digitalmars-d puremagic.com...
On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Janice Caron wrote:

On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

FWIW, you can't call a distinction on you as a person and your opinions
when
it comes to insulting. So if you think you may have insulted my opinions
(about Tango or any other subject), then you probably insulted /me/

Nonsense. I made an interesting parapraxes in conjuction with a speculation
:)

That was unwarranted. You can't go
around accusing people of things they didn't do. That is outrageous.
Worse, it's injustice.

Melodramatic, yet perhaps true, Janice. But wait! I recall not so long ago
you accused people involved with Tango as being "amateurs", or something
like that. I'm not sure how that meshes with your sudden rash of
indignation?

Kris, That wasn't me. Deal with it.

Have nothing to "deal" with, Janice. This entire thread seems to be just
more of the personal ranting we heard in the past.

And I hope you have the decency to retract


Nov 17 2007
Janice Caron Wrote:

On 11/17/07, Lars Ivar Igesund <larsivar igesund.net> wrote:
Janice Caron wrote:

On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

FWIW, you can't call a distinction on you as a person and your opinions when
it comes to insulting. So if you think you may have insulted my opinions
(about Tango or any other subject), then you probably insulted /me/

Kris made a false accusation. That was unwarranted. You can't go
around accusing people of things they didn't do. That is outrageous.
Worse, it's injustice.

Kris accused me of making a post in another name, in support my actual
posts. That, I did not do, and I resent the implication. That
accusation is several orders magnitude worse than an criticisism of
variable naming conventions, and it stinks.

Kris, That wasn't me. Deal with it. And I hope you have the decency to
retract the accuasion and apologise.

Are you sure you aren't jumping the gun. I read Kris's post as meaning you'd be
the next person to reply, which funnily enough you were. You're quite prolific
you know.

Nov 17 2007
James Dennett <jdennett acm.org> writes:
Lars Ivar Igesund wrote:
Janice Caron wrote:

On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

FWIW, you can't call a distinction on you as a person and your opinions when
it comes to insulting. So if you think you may have insulted my opinions
(about Tango or any other subject), then you probably insulted /me/

There's an interesting issue here.  There are two ways of viewing
discussions.  In one, people *do* distinguish between personal attacks
and attacks on viewpoints; in the other, they do not.  When those of
either school encounter those of the other school, things tend to go
badly.  It's often a problem here on d.D.

-- James

Dec 12 2007
"Kris" <foo bar.com> writes:
"Janice Caron" <caron800 googlemail.com> wrote in message
On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

Dash it all. This is what I meant to write:

"There's a fair chance the poster below is actually trolling, but just in
case
there really is someone voicing an honest opinion there, read on ..."

But somehow it came out as:

"There's a fair chance the poster below is actually Janice, but just in case
there really is someone voicing an honest opinion there, read on ..."

Honest mistake, Janice. Really. When it comes to this topic perhaps you've
made some kind of impression? I don't know how to explain it otherwise,
except perhaps for senility on my part.

Anyway, I suspect you'd agree that the rest of it is what's important ...

Nov 17 2007
On 11/18/07, Kris <foo bar.com> wrote:
Dash it all. This is what I meant to write:

Phew! OK, I'm happy now. :-)
Thanks for clearing things up.

Nov 17 2007
"Kris" <foo bar.com> writes:
"Janice Caron" <caron800 googlemail.com> wrote
On 11/18/07, Kris <foo bar.com> wrote:
Dash it all. This is what I meant to write:

Phew! OK, I'm happy now. :-)
Thanks for clearing things up.

previously? I'll list them here for your convenience:

Seriously - Tango's stylistic issues are a big turn-off. Tango
fix them.

Please suggest an alternate formatting style and explain why it is better.

So Tango should really follow convention used by Walter in Phobos.

What if that convention proves insufficient for a library that is much
larger than Phobos?

That was unwarranted. You can't go
around accusing people of things they didn't do. That is outrageous.
Worse, it's injustice.

Melodramatic, yet perhaps true, Janice. But wait! I recall not so long ago
you accused people involved with Tango as being "amateurs", or something
like that. I'm not sure how that meshes with your sudden rash of
indignation?

Nov 18 2007
On 11/18/07, Kris <foo bar.com> wrote:
Please suggest an alternate formatting style and explain why it is better.

Module name components: likethis
Class names: LikeThis
Variable names: likeThis;
Constants: LIKETHIS or LIKE_THIS

Consistency makes code easier to understand and maintain.

What if that convention proves insufficient for a library that is much
larger than Phobos?

How can it be? You'd need an infinitely large library before you ran
out of identifier names.

But wait! I recall not so long ago
you accused people involved with Tango as being "amateurs", or something
like that.

Consider the possibility that you may have misunderstood? Alas, I
don't recall the quote you mention, but I'm sure that if you drag up
exactly what I said word for word, I can either clarify the quote or
change my mind or whatever.

All I can think of is I might have said that something or other seems
amateurish. But even then, I also say that about some movie plots, but
still think they're great movies. You may be reading too much into it.

Nov 18 2007
"Kris" <foo bar.com> writes:
"Janice Caron" <caron800 googlemail.com> wrote

Consider the possibility that you may have misunderstood? Alas, I
don't recall the quote you mention, but I'm sure that if you drag up
exactly what I said word for word, I can either clarify the quote or
change my mind or whatever.

Janice, and you were perfectly clear at the time. I won't bother to dredge
up your post, since you can do that yourself. However, it's vaguely amusing
to see your hypocracy is without bounds :)

Nov 18 2007
On 11/18/07, Kris <foo bar.com> wrote:

shrill - adj - said of a voice, sound, etc: high-pitched and piercing.
verb (shrilled, shrilling) to utter in such a high-pitched manner.
ETYMOLOGY: 14c: from German schrell.

Excuse me!?

I won't bother to dredge
up your post, since you can do that yourself.

I'm also capable of just speaking in words, and saying what I think,
which is that Tango is a truly excellent body of work with some
fantastic code in it. Perhaps you don't want to hear that?

However, it's vaguely amusing
to see your hypocracy is without bounds :)

Again, excuse me? Any chance you could just scale down the discourtesy a tad?

Nov 18 2007
Regan Heath <regan netmail.co.nz> writes:
Janice Caron wrote:
On 11/18/07, Kris <foo bar.com> wrote:
However, it's vaguely amusing
to see your hypocracy is without bounds :)

Again, excuse me? Any chance you could just scale down the discourtesy a tad?

Don't hold your breath.  Many a poster has been in your shoes, myself
included.  Heck, Alix is in the same position right now.  No doubt I'll
get some of the same treatment shortly, I just wanted to let you know
you're not alone.

Kris, I wish you wouldn't take comments about Tango quite so personally,
Sean and Lars are in the same boat and you don't see them responding
with personal attacks.  It's quite sad really because despite this you
have a number of quite admirable qualities which I respect you for, but
damn it if you don't make that hard sometimes.

Anyway, for what it's worth you can chalk my name up on the list of
people who haven't adopted Tango due to it's style, naming conventions
included.  Granted it's not the main reason, that being that I don't
have a large enough project to need the many wonderful features Tango
has.  If I did I could probably get past the stlye of Tango if I needed
to, I am a pragmatist at heart once I quell the perfectionist.

As for a suggestion of naming and style, I like the one Janice posted:

Module name components: likethis
Class names: LikeThis
Variable names: likeThis;
Constants: LIKETHIS or LIKE_THIS

Regan /dons flame retardant suit and leaves the building.

Nov 19 2007
"Kris" <foo bar.com> writes:
"Regan Heath" <regan netmail.co.nz> wrote in message

Heck, Alix is in the same position right now.

He is? I don't recall saying anything particularly negative to Alix. Tried
to get him onto IRC instead, which he ultimately did (thank-you Alix) and we
had a long and essentially productive discussion. It's quite unlike this
environment, because you /have/ to interact with people instead of perhaps
crouching behind a keyboard as some appear to do.

No doubt I'll get some of the same treatment shortly

Why Regan?

If you were ranting about how Tango cannot be used because of some minor
stylistic conventions, while advocated forking the library because of that,
and at the same time had been happily discrediting the team (this is the
second thread on this topic)  .... well, you'd probably get some pushback
also, Regan. You and I have been down that road, but we can still see
eye-to-eye. I'm very happy to say.

If this were a serious topic, then by all means let's talk seriously about
stylistic changes. That might be a worthy reason to discuss the Tango style
elements, and there might be something pertinent to debate or consider. But
this thread? It's hard to pick out anything of value Regan. There's just too
much misinformation and stylistic preference. I'd rather just get on and
listen carefully to the people who are willing to post tickets or discuss
things rationally.

There's plenty of people who use tango and would prefer it had some
different style here and there. Yet, they don't decry the package, or the
people responsible. They post tickets, based upon real world use-cases. We
make changes. These people are not the armchair quarterback types -- they
make requests based upon their real experience with Tango. We make changes.
Lot's of changes. We have to focus our limited energy somewhere, so that's
where it is focused. When there are tangible concerns about Tango in this
newsgroup, then they will warrant serious attention. That's not to dismiss
out of hand the concerns a few people have, but we find the interactivity of
the IRC channels to be far more conducive to progress than the misconduct
shown throughout this thread (and the prior related one).

I understand that may not be how you see things, and that's cool. There's
also a thread called "Tango Development" that I'd like to hear your input
on, if you'd be so kind?

Nov 19 2007
Regan Heath <regan netmail.co.nz> writes:
Kris wrote:
"Regan Heath" <regan netmail.co.nz> wrote in message

Heck, Alix is in the same position right now.

He is? I don't recall saying anything particularly negative to Alix.

My apologies then, I must have confused replies somewhere along the way.

No doubt I'll get some of the same treatment shortly

Why Regan?

Must be the cynic in me, I try to keep him locked up but sometimes he
escapes.  In any case I am glad to be mistaken.

<snip many good points>

I understand that may not be how you see things, and that's cool. There's
also a thread called "Tango Development" that I'd like to hear your input
on, if you'd be so kind?

To be honest I don't have a heck of a lot to say on the subject.  Due to
how little I use Tango (and therefore it's style) I don't feel qualified
to pass judgement.

All I can say at this stage is what I have already said, the style
initially put me off, perhaps for the reasons Sean gave when he said:

"I'm not sure if it helps, but I resisted the idea of CamelCase module
names when we began working on Tango, possibly because I come from a
C/C++ background."

in other words, it might just be my background.

Regan

Nov 19 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Regan Heath wrote:
Janice Caron wrote:
On 11/18/07, Kris <foo bar.com> wrote:
However, it's vaguely amusing
to see your hypocracy is without bounds :)

Again, excuse me? Any chance you could just scale down the discourtesy

Don't hold your breath.  Many a poster has been in your shoes, myself
included.  Heck, Alix is in the same position right now.  No doubt I'll
get some of the same treatment shortly, I just wanted to let you know
you're not alone.

Kris, I wish you wouldn't take comments about Tango quite so personally,
Sean and Lars are in the same boat and you don't see them responding
with personal attacks.  It's quite sad really because despite this you
have a number of quite admirable qualities which I respect you for, but
damn it if you don't make that hard sometimes.

Anyway, for what it's worth you can chalk my name up on the list of
people who haven't adopted Tango due to it's style, naming conventions
included.  Granted it's not the main reason, that being that I don't
have a large enough project to need the many wonderful features Tango
has.  If I did I could probably get past the stlye of Tango if I needed
to, I am a pragmatist at heart once I quell the perfectionist.

As for a suggestion of naming and style, I like the one Janice posted:

Module name components: likethis

What about the pen island module problem?  Underscores?  Do you have any
comments to add to the pro column for 'likethis' over in the Module
naming conventions thread?  Or rebuttals to those in the pro column for
LikeThis?

Class names: LikeThis
Variable names: likeThis;
Constants: LIKETHIS or LIKE_THIS

Regan /dons flame retardant suit and leaves the building.

Wait! Come back!  You haven't answered my questions!  :-)

--bb

Nov 19 2007
Regan Heath <regan netmail.co.nz> writes:
Bill Baxter wrote:
Regan Heath wrote:
As for a suggestion of naming and style, I like the one Janice posted:

Module name components: likethis

What about the pen island module problem?  Underscores?  Do you have any
comments to add to the pro column for 'likethis' over in the Module
naming conventions thread?  Or rebuttals to those in the pro column for
LikeThis?

I don't really like underscores either.  Is the "pen island" problem
really a problem?  How often does that happen?

I think the number of modules causes/increases the likelyhood.  Sean
made a good post describing the pro's/con's of having a large number of
modules:

http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=61853

A weakness in the linker may have been a factor in some of the decisions
and I wonder whether they would change if the weakness was fixed?

Then I think, regardless of the number of modules and what you call them
I'm still going to need searchable documentation to find the
class/method/feature I want at any given time.  So, while descriptive
naming of modules etc may help a little they don't mean all that much to me.

At the end of the day a decision has to be made and it won't make
everyone happy (as both Sean and Kris have said a few times).  Given
that and provided there isn't an obvious flaw the system used I would
simply get used to it.

Regan

Nov 19 2007
Jeff Nowakowski <jeff dilacero.org> writes:
Janice Caron wrote:
Consider the possibility that you may have misunderstood? Alas, I
don't recall the quote you mention, but I'm sure that if you drag up
exactly what I said word for word, I can either clarify the quote or
change my mind or whatever.

All I can think of is I might have said that something or other seems
amateurish. But even then, I also say that about some movie plots, but
still think they're great movies. You may be reading too much into it.

For the record, what you said was in this posting:

http://www.digitalmars.com/d/archives/digitalmars/D/Re_D_Conference_Tango_Phobos_58225.html#N58577

"Module names in mixed case!? Did the Tango folk not read the D style
guide where it says "Module and package names are all lower case, and
only contain the characters [a..z][0..9][_]", or did they just
purposefully decide to avoid it? If the former, that was amateurish;
if the latter, it was petty."

[...]

"My apologies if I come across as contentious. I realise I'm a newbie
in this group. But that is the first impression I get from looking at
the Tango docs. I just ask myself over and over again, "Why did they
do that?" (...which should be regarded as a rhetorical question which
really means "I wish they hadn't done that")."

But you guys already had this discussion in September.  Can you stop
trading barbs and agree that you both got overly personal?

-Jeff

Nov 18 2007
On 11/18/07, Jeff Nowakowski <jeff dilacero.org> wrote:
For the record, what you said was in this posting:

http://www.digitalmars.com/d/archives/digitalmars/D/Re_D_Conference_Tango_Phobos_58225.html#N58577

"Module names in mixed case!? Did the Tango folk not read the D style
guide where it says "Module and package names are all lower case, and
only contain the characters [a..z][0..9][_]", or did they just
purposefully decide to avoid it? If the former, that was amateurish;
if the latter, it was petty."

Ooh thank you. Well, that clarifies it.

So yes, the core body of code in Tango is excellent. The engine that
does all the work is a fantastic bit of software, and not in the least
bit amateurish.

So you'll notice that in the quote quoted above, the condition in the
if statement is false, so in fact it's the else branch that runs. My
statement boiled down to the opinion that the /decision/ to ignore the
style guide was petty. Note that the criticism was of the decision,
not the people making it. And actually, I do that to deliberately go
against the style guide was somewhat petty. It's a rival product,
after all.

"My apologies if I come across as contentious. I realise I'm a newbie
in this group. But that is the first impression I get from looking at
the Tango docs.

Thanks also for including that bit. Yes we only talking about a first
impression here anyway. But I understand now that weren't looking for
first impressions.

Can you stop
trading barbs and agree that you both got overly personal?

I think it's more that words were /taken/ personally when they were
not intended as such. I know that I have never criticised any
individual, and never would. I have only ever talked about software,
and design decisions. I have too much respect for individuals ever to
use "barbs".

Nov 18 2007
Jeff Nowakowski <jeff dilacero.org> writes:
Janice Caron wrote:
I think it's more that words were /taken/ personally when they were
not intended as such.

The problem is you presented your argument as either they did something
It's clear from the responses they that had valid reasons that involved
neither being petty nor amateurish, even if their decision can be debated.

So I think if you changed your tone you could have had a much more civil
and productive discussion.  Even now you claim they are being petty with
a rival product.  There's a big distinction between "this way is better"
and "let's be incompatible because we don't like the other guy".

By the way, the charge that one of the posts following yours was a sock
puppet was legitimate.  It was the first thing that crossed my mind.
Doesn't mean you did it, but it's a valid suspicion.  If you think it's
valid to point out motives as amateur or petty, then it should be
equally valid to point out possible sock-puppetry.  Maybe not so helpful
in either case?

-Jeff

Nov 18 2007
Jeff Nowakowski <jeff dilacero.org> writes:
By the way, that Jeff fellow is absolutely BRILLIANT and INSIGHTFUL with
PIERCING observations of HUMAN NATURE.  Better pay attention to
everything he says, because the man is a CERTIFIED GENIUS!!!  Here's
some more brilliance from the Mind of Jeff...whenever a sock puppet
posts something favorable to an individual, THAT INDIVIDUAL IS THE SOCK
PUPPET!!  ALWAYS!!!!  Yes, this means that I REALLY AM JEFF
NOWAKOWSKI!!!  Hahahahah!!!  Fooled you suckas!!!!  Boo-rah!

Jeff Nowakowski wrote:
By the way, the charge that one of the posts following yours was a sock
puppet was legitimate.  It was the first thing that crossed my mind.
Doesn't mean you did it, but it's a valid suspicion.  If you think it's
valid to point out motives as amateur or petty, then it should be
equally valid to point out possible sock-puppetry.  Maybe not so helpful
in either case?


Nov 18 2007
Jeff Nowakowski <jeff dilacero.org> writes:
The below forgery was posted by David B. Held.  I must say I'm very
surprised by this childish behavior.  To address David's point, I said
there was cause for suspicion, not that there were any kind of certainties.

Congratulations David B. Held on reaching new lows.

-Jeff

Jeff Nowakowski wrote:
By the way, that Jeff fellow is absolutely BRILLIANT and INSIGHTFUL with
PIERCING observations of HUMAN NATURE.  Better pay attention to
everything he says, because the man is a CERTIFIED GENIUS!!!  Here's
some more brilliance from the Mind of Jeff...whenever a sock puppet
posts something favorable to an individual, THAT INDIVIDUAL IS THE SOCK
PUPPET!!  ALWAYS!!!!  Yes, this means that I REALLY AM JEFF
NOWAKOWSKI!!!  Hahahahah!!!  Fooled you suckas!!!!  Boo-rah!

Jeff Nowakowski wrote:
>
> By the way, the charge that one of the posts following yours was a sock
> puppet was legitimate.  It was the first thing that crossed my mind.
> Doesn't mean you did it, but it's a valid suspicion.  If you think it's
> valid to point out motives as amateur or petty, then it should be
> equally valid to point out possible sock-puppetry.  Maybe not so helpful
> in either case?


Nov 18 2007
"David B. Held" <dheld codelogicconsulting.com> writes:
Jeff Nowakowski wrote:
The below forgery was posted by David B. Held.  I must say I'm very
surprised by this childish behavior.  To address David's point, I said
there was cause for suspicion, not that there were any kind of certainties.

Congratulations David B. Held on reaching new lows.

I had a lot of help from my friends who led the way.  Obviously, I'm not
as sophisticated as them...still, I hope I made my point.  BTW, Obama
whispering campaign against him.  Maybe she did, or maybe it was
Republicans.  In any event, it's dangerous to assume, or even suspect
when anonymity is at play.  For instance, I find it just as plausible
that *you* are the "sock puppet" and set up the entire subthread as a
basis to make false accusations.  Is that "cause for suspicion"?

Dave

Nov 19 2007
Jeff Nowakowski <jeff dilacero.org> writes:
David B. Held wrote:
I had a lot of help from my friends who led the way.  Obviously, I'm not
as sophisticated as them...still, I hope I made my point.

What was your point?  That you are willing to post personal attacks
using one of the lowest tricks in Usenet, forging your name as somebody
else?

"Reputations take a very long time to build, but are quite easily
destroyed, and often by oneself"

In any event, it's dangerous to assume, or even suspect
when anonymity is at play.  For instance, I find it just as plausible
that *you* are the "sock puppet" and set up the entire subthread as a
basis to make false accusations.  Is that "cause for suspicion"?

I've already discussed the issue in numerous times.  I never endorsed
any public accusation of sock puppetry -- quite the opposite.  I'll only
add here that *everything* is a matter of uncertainty.  It's only a
question of how much evidence you have.  This entire newsgroup could be
the fabrication of one person.  Not very likely though.

-Jeff

Nov 20 2007
Regan Heath <regan netmail.co.nz> writes:
Jeff Nowakowski wrote:
David B. Held wrote:
I've already discussed the issue in numerous times.  I never endorsed
any public accusation of sock puppetry -- quite the opposite.

Your use of the word "charge" in this sentence:

"By the way, the charge that one of the posts following yours was a sock
puppet was legitimate."

Gave me the impression you endorsed the accusation (charge), which
prompted my response and probably David's actions as well.

Regan

Nov 20 2007
Jeff Nowakowski <jeff dilacero.org> writes:
Regan Heath wrote:

Your use of the word "charge" in this sentence:

"By the way, the charge that one of the posts following yours was a sock
puppet was legitimate."

Gave me the impression you endorsed the accusation (charge), which
prompted my response and probably David's actions as well.

Ok, I can see how that can be misconstrued, but I tried to make it clear
in the rest of the paragraph that I did not support the accusation.  In
particular, the last sentence:

"It was the first thing that crossed my mind. Doesn't mean you did it,
but it's a valid suspicion.  If you think it's valid to point out
motives as amateur or petty, then it should be equally valid to point
out possible sock-puppetry.  Maybe not so helpful in either case?"

-Jeff

Nov 20 2007
"David B. Held" <dheld codelogicconsulting.com> writes:
Jeff Nowakowski wrote:
David B. Held wrote:
I had a lot of help from my friends who led the way.  Obviously, I'm
not as sophisticated as them...still, I hope I made my point.

What was your point?  That you are willing to post personal attacks
using one of the lowest tricks in Usenet, forging your name as somebody
else?

Yes, to make a point, I was willing to do that.  And if you weren't
sophisticated enough to discover the real author for yourself, I was
prepared to out myself.  I was putting you in Janice's shoes, so you
could try walking a mile in them.  You only lasted about 5 minutes, so I
fear the point was lost on you.

"Reputations take a very long time to build, but are quite easily
destroyed, and often by oneself"

In case you haven't noticed, I haven't been working especially hard to
win friends or standing in the D community.  I've always been too loose
with my tongue to be a respected expert like Andrei or Walter; but on
the other hand, it gives me the freedom to say whatever I think is
necessary, no matter how unpopular.

[...]
I've already discussed the issue in numerous times.  I never endorsed
any public accusation of sock puppetry -- quite the opposite.  I'll only
add here that *everything* is a matter of uncertainty.  It's only a
question of how much evidence you have.  This entire newsgroup could be
the fabrication of one person.  Not very likely though.

Well, your backpedaling and equivocation is pretty transparent, in my
book.  First you say:

"By the way, the charge that one of the posts following yours
was a sock puppet was legitimate."

Here, there is no "misconstruing" going on.  You clearly said: "Somebody
accused you of creating a sock puppet, and that accusation was valid,
not baseless."  I don't think it takes a lawyer to read it that way.
You made it about as unambiguous as could be.  Then, you followed up with:

"It was the first thing that crossed my mind."

Here, you say: "And I tend to agree with the accuser."  How do I draw
that conclusion?  Well, it's simple.  The first thing that crossed *my*
mind was: "Someone is playing a dirty trick on Janice, and then
exploiting it."  Which means that if you had a different first
Janice was guilty until proven innocent.  But you realized you had gone
too far, so you decided to try to smooth things over with a CYA clause:

"Doesn't mean you did it, but it's a valid suspicion."

And here, you make the weakest equivocation possible, with the way you
followed up with a confirmation of your original claim: "Accusing Janice
of making sock puppets is 'valid'.  I declare so by fiat."  Umm...you
pretty much say: "I declare open season on Janice!  Anyone who wants to
accuse her of sock puppetry, lock & load your .30-06 and put on yer
huntin' gear!"

If you look at what the "sock puppet" said:

"i love that - please release it to us all!
can't wait to get it for all the reasons you put forth."

and:

"yup - i'd do that too"

it seems just as likely, *if not more so*, that "Phango" was being
sarcastic and mocking Janice, in just the same way that I was with you.
Who in their right mind thinks we are gullible enough to buy the
endorsement of an anonymous poster with the fake domain name
"phangowant.com".  I mean, seriously!

The very idea that someone would sit down and say to themselves:
"Oooh...I got a good idea...I'll post something flattering about myself
via an anonymous alias...what email address should I make up?  A
real-sounding name?  Nah, too obvious.  Oh, oh, I know!  Nobody will
suspect a thing if I use the domain name 'phangowant.com'!!!  Yes!!!
It's a PERFECT PLAN!!!"  Clearly the email address
"phango phangowant.com" is transparent sarcasm.  It's insult enough to
Janice *all by itself*.

What makes your attack particularly heinous is that this was not enough
for you.  You had to twist the blade the other way by *accusing Janice
of the being the perpetrator of an anonymous attack on her*!  You want
to talk about low?!?  *That's* what I say is low, and what justified
pulling a little prank to make a dramatic point.  The fact that I have
to spell all this out is, frankly, quite tiresome and a little disturbing.

I think Janice was treated particularly poorly by someone without the
balls to use their real identity, and then others who happened to
disagree with her smelled blood in the water and went in for the kill.
If I have to make a fool of myself to point this out, so be it.  I can
live with that.  But don't try to gloss over what you pretty clearly
said by equivocating with your weasel words.  You have no moral high
ground here, despite the little escape route you think you made for
yourself.  It's about as legit as me saying:

"I accuse Jeff of being a big fat nincompoop!!!...possibly.
But there is some room for doubt, so don't get mad at me.  Oh,
and I don't endorse anyone calling Jeff a nincompoop, so that
makes what I said before OK.  This ad paid for by the committee
to re-elect David B. Held.  Hi, I'm David B. Held and I endorse
this message...to the extent that it cannot be 'misconstrued'
to mean something personally embarrassing."

Umm...yeah.  I'm not going to offer any apologies, because I don't care
if people think I'm a jerk (and I fairly doubt that's a new sentiment,
anyhow).  But I do think Janice still deserves one more...

Dave

Nov 20 2007
"Kris" <foo bar.com> writes:
"David B. Held" <dheld codelogicconsulting.com> wrote in ...
Jeff Nowakowski wrote:
David B. Held wrote:
I had a lot of help from my friends who led the way.  Obviously, I'm not
as sophisticated as them...still, I hope I made my point.

What was your point?  That you are willing to post personal attacks using
one of the lowest tricks in Usenet, forging your name as somebody else?

Yes, to make a point, I was willing to do that.  And if you weren't
sophisticated enough to discover the real author for yourself, I was
prepared to out myself.  I was putting you in Janice's shoes, so you could
try walking a mile in them.  You only lasted about 5 minutes, so I fear
the point was lost on you.

"Reputations take a very long time to build, but are quite easily
destroyed, and often by oneself"

In case you haven't noticed, I haven't been working especially hard to win
friends or standing in the D community.  I've always been too loose with
my tongue to be a respected expert like Andrei or Walter; but on the other
hand, it gives me the freedom to say whatever I think is necessary, no
matter how unpopular.

[...]
I've already discussed the issue in numerous times.  I never endorsed any
public accusation of sock puppetry -- quite the opposite.  I'll only add
here that *everything* is a matter of uncertainty.  It's only a question
of how much evidence you have.  This entire newsgroup could be the
fabrication of one person.  Not very likely though.

Well, your backpedaling and equivocation is pretty transparent, in my
book.  First you say:

"By the way, the charge that one of the posts following yours
was a sock puppet was legitimate."

Here, there is no "misconstruing" going on.  You clearly said: "Somebody
accused you of creating a sock puppet, and that accusation was valid, not
baseless."  I don't think it takes a lawyer to read it that way. You made
it about as unambiguous as could be.  Then, you followed up with:

"It was the first thing that crossed my mind."

Here, you say: "And I tend to agree with the accuser."  How do I draw that
conclusion?  Well, it's simple.  The first thing that crossed *my* mind
was: "Someone is playing a dirty trick on Janice, and then exploiting it."
Which means that if you had a different first impression, it must have
been because you had already decided that Janice was guilty until proven
innocent.  But you realized you had gone too far, so you decided to try to
smooth things over with a CYA clause:

"Doesn't mean you did it, but it's a valid suspicion."

And here, you make the weakest equivocation possible, with the way you
followed up with a confirmation of your original claim: "Accusing Janice
of making sock puppets is 'valid'.  I declare so by fiat."  Umm...you
pretty much say: "I declare open season on Janice!  Anyone who wants to
accuse her of sock puppetry, lock & load your .30-06 and put on yer
huntin' gear!"

If you look at what the "sock puppet" said:

"i love that - please release it to us all!
can't wait to get it for all the reasons you put forth."

and:

"yup - i'd do that too"

it seems just as likely, *if not more so*, that "Phango" was being
sarcastic and mocking Janice, in just the same way that I was with you.
Who in their right mind thinks we are gullible enough to buy the
endorsement of an anonymous poster with the fake domain name
"phangowant.com".  I mean, seriously!

The very idea that someone would sit down and say to themselves: "Oooh...I
got a good idea...I'll post something flattering about myself via an
anonymous alias...what email address should I make up?  A real-sounding
name?  Nah, too obvious.  Oh, oh, I know!  Nobody will suspect a thing if
I use the domain name 'phangowant.com'!!!  Yes!!! It's a PERFECT PLAN!!!"
Clearly the email address "phango phangowant.com" is transparent sarcasm.
It's insult enough to Janice *all by itself*.

What makes your attack particularly heinous is that this was not enough
for you.  You had to twist the blade the other way by *accusing Janice of
the being the perpetrator of an anonymous attack on her*!  You want to
talk about low?!?  *That's* what I say is low, and what justified pulling
a little prank to make a dramatic point.  The fact that I have to spell
all this out is, frankly, quite tiresome and a little disturbing.

I think Janice was treated particularly poorly by someone without the
balls to use their real identity, and then others who happened to disagree
with her smelled blood in the water and went in for the kill. If I have to
make a fool of myself to point this out, so be it.  I can live with that.
But don't try to gloss over what you pretty clearly said by equivocating
with your weasel words.  You have no moral high ground here, despite the
little escape route you think you made for yourself.  It's about as legit
as me saying:

"I accuse Jeff of being a big fat nincompoop!!!...possibly.
But there is some room for doubt, so don't get mad at me.  Oh,
and I don't endorse anyone calling Jeff a nincompoop, so that
makes what I said before OK.  This ad paid for by the committee
to re-elect David B. Held.  Hi, I'm David B. Held and I endorse
this message...to the extent that it cannot be 'misconstrued'
to mean something personally embarrassing."

Umm...yeah.  I'm not going to offer any apologies, because I don't care if
people think I'm a jerk (and I fairly doubt that's a new sentiment,
anyhow).  But I do think Janice still deserves one more...

Dave

Excellent! I don't spend much time on this ng anymore, but recently it's
been because someone or other has been generating or perpetrating inaccurate
information about Tango, or has been deriding the library and/or authors
over some questionable issue. Some of that has reached the dubious level of
fud-mongering. You may well disagree, yet that's my opinion of it. Knowing
nothing of value about a particular subject will never stop certain people
from mouthing off about it, but when they do so over Tango, I'll have
something to say. Yes, I'm personally tired of hearing that Tango is somehow
'amateurish' or 'petty' or whatever the other terms have been, since that
reflects upon all the people involved (and there are many). Not to mention
that the code and design itself is generally of exceptional quality and
clarity -- notably more so than a number of well-known libraries.

So, like you, I don't give a rats-ass if my "reputation" is somehow sullied,
burned or lost over my responses to posts that are "loaded" in this
manner -- "reputations" are the folly of political poseurs and ego-centric
fools. Far better to be judged by one's work instead, and there's lots of
that in Tango, by many people. I suggest those naysayers or
armchair-quarterbacks with a disposition to rant might perhaps use Tango for
a while, and ask us or tell us about it in a manner that we can presumably
respond appropriately to (IRC and tickets). Of course, some people just want
to vent and have no intent to ask for help at all. I recall one recent
ranter who adamantly refused to write a ticket for Tango, or discuss it with
us on IRC, and nor did they even try to or even want to use the library. In
that particular instance, there wasn't /even/ a tangible problem. The
instructions go like this: Open packet. Sprinkle fud-crystals into five
gallon bucket of water, mix well and disperse liberally.

As for this weird thing with the sock-puppet, I admit to being entirely
bemused until you owned up to it. Then I wondered if that might be a
double-blind post, but the one above does appear to be you. FWIW, it seems
sad that anyone would attempt to manipulate or subvert the ng like that ...
is it /really/ that important? You call that a 'prank', while I have to
wonder if such behavior isn't grounded in malevolence instead. Trolling is
bad enough, but what you claim to have done is surely several steps below?
Yet, here you are chewing out Jeff N over some token semantic distinction. I
don't get it. That does seem a bit hypocritical doesn't it? Why don't you
have a go at me instead? Or, did you perhaps think JeffN was me?

Also, I will admit that I have wondered why you made that analogy between
Boost and Tango, since your message appeared to be saying "Hey, the Tango
guys say Yo! Put up or Shutup!" which really couldn't be further from the
truth. Heck, there's even a long recent thread on toString vs toUtf8 in this
regard. As I pointed out in a reply to your post, Tango is changing in order
to have some measure of compatibility with phobos (which you no doubt know
of) and, as a library, it was never intended to be compatible in the first
place. This aspect was clearly noted in the text immediately above your
post, so you could hardly miss that either. Both these aspects would tend to
render the specific analogy worthless. Yet, you didn't bother to respond to
my query, in order to clarify whether the message you were sending could be
misconstrued. Thus, your post could be seen as something of a sly strawman,
with mucho negativity directed towards Tango. I sure hope it wasn't intended
as such, but now that I'm seeing this weird sock-puppet thing ...... heck, I
sure /hope/ that was not the case?

To be clear: I'm not trying to take pot-shots at you, Dave. I'm just a bit
concerned by these two things you're responsible for, and specifically
because they are both related to Tango. Can you help me understand them
better?

Nov 21 2007
"David B. Held" <dheld codelogicconsulting.com> writes:
Kris wrote:
[...]
As for this weird thing with the sock-puppet, I admit to being entirely
bemused until you owned up to it. Then I wondered if that might be a
double-blind post, but the one above does appear to be you. FWIW, it seems
sad that anyone would attempt to manipulate or subvert the ng like that ...
is it /really/ that important? You call that a 'prank', while I have to
wonder if such behavior isn't grounded in malevolence instead. Trolling is
bad enough, but what you claim to have done is surely several steps below?
Yet, here you are chewing out Jeff N over some token semantic distinction. I
don't get it. That does seem a bit hypocritical doesn't it? Why don't you
have a go at me instead? Or, did you perhaps think JeffN was me?

Well, the double-standard here is quite amusing.  Both of you accused
someone else of deception and trickery when the most obvious reading of
the "sock puppetry" does not lead to that conclusion.  On the contrary,
the puppeteer was most likely insulting Janice as well, which means that
you two were feigning stupidity, adding insult to injury, and then
making light of it by dismissing your claims as "speculation".  Well,
obviously, you haven't been a victim of such tricks yet, so it is easy
for you to blame the victim (which is what you did, let's not mince
words).  However, I notice that once Jeff was a victim, he had a wholly
different reaction to the situation and did not sit around waiting for
someone to accuse *him* of sock puppetry (even though that would be just
as silly as both of your accusations).  In fact, Jeff highlighted with
his strong words just how serious an offense it is, and now you, though
not being a victim, are merely emphasizing Jeff's point: being the
victim of an anonymous attack really sucks, in the way that a hit-n-run
sucks...you can't even strike back at your attacker.  How is it that an
*anonymous* person can attack a member of the community, and you have
the right to *accuse the victim of being the attacker*, but as soon as
you have a suspect in sight, it's *obviously wrong to accuse the
victim*.  *That*, my friend, is a double-standard.

Was it "malevolent" to demonstrate this point?  No more so than it was
for you two to blame the victim, which is an all-to-common sociological
reaction to crimes in which the suspects have gotten away scot-free.
The reason I targeted Jeff and not you is because you at least had the
decency to retract your accusation after Janice protested innocence, but
Jeff was not so forgiving, despite having not enough evidence to convict
a squirrel of burying nuts.  I have participated in enough electronic
social media to know that false-flag operations are the dirtiest tricks
of the game.  It *really* sucks to be a victim; and thus, accusing the
victim of being the perpetrator is what I consider to be particularly
"malevolent".  Since you seem to not have the taste of being a victim
yet, I can still pull out my sock puppet; and this time I'll be clever
enough to post through the web interface...then I'll lay an old
blame-the-victim trick on you and let you decide which is more
malevolent...blaming the victim or exposing the hypocrisy of doing so.

Also, I will admit that I have wondered why you made that analogy between
Boost and Tango, since your message appeared to be saying "Hey, the Tango
guys say Yo! Put up or Shutup!" which really couldn't be further from the
truth. Heck, there's even a long recent thread on toString vs toUtf8 in this
regard.

Obviously, Tango is written by more than one developer, not all of whom
express the same attitude towards commentary on the library.  The
difference is in challenging critics vs. justifying your design
decisions to critics.  Good library authors can disarm their critics
with a good explanation of the design decisions, while authors outside
of that set don't feel that justification is necessary, because they are
the ones who put their hard work into it.  Not all criticism is
justified, and some of it is simply bad, but the way it's responded to
makes all the difference in the world.

It reminds me of the interviewing process at work.  Some candidates
simply refuse to answer simple coding questions, because it is "beneath
them".  Well, maybe it is, but that's all the more reason to give a
quick answer rather than rejecting the question on principle.  Without
any answer at all, it's impossible to tell whether the question really
is beneath the candidate, or they are just stalling because they can't

When a critic says: "You should change X", you can say: "No, you're
wrong.  That's a matter of taste and I can't please everybody" or you
can say: "The reason I chose X was because given the alternatives, it
gave us the most flexibility as library authors.  Here is what I
mean..."  Maybe "You should change X" is a stupid criticism that isn't
worth your time to respond to.  Or maybe it's not.  If you have a
justification at the ready, it makes you look all the more knowledgeable
than protesting artistic license.  If you present the attitude that the
criticism is worthless, then other users begin to wonder whether X was
actually designed or was merely an accident.

self-congratulation on it is a bit generous).  I haven't seen enough of
Tango to say whether it is or not, and the parts I have seen seemed
reasonable to me.  My point is that some of Tangos authors are more
diplomatic than others; and whether you feel that is fair or not (to
have to suffer fools, from your perspective), the reputation of Tango as
a piece of work is affected by the attitudes of its contributors (the
point I was trying to make, as delicately as possible).  On the other
hand, I don't have any user-visible contributions to D, so I'm not
jeopardizing anything (the man who has nothing to lose is the most
dangerous of all).  I happen to think that Sean Kelly is a good
ambassador of Tango, and if everything I knew about Tango came from
things he said, I would be predisposed to think it's a pretty darned
good library.  I suspect a lot of other folks might say the same thing.

As I pointed out in a reply to your post, Tango is changing in order
to have some measure of compatibility with phobos (which you no doubt know
of) and, as a library, it was never intended to be compatible in the first
place.
[...]

That's not the point.  The point is that it was clearly designed to be a
standard library, or it would not have defined things like Object.d.  So
the whole "never intended to be Phobos-compatible" claim ignores the
fact that users of Tango are necessarily going to expect a feature set
similar to Phobos, if for no other reason than that Phobos is the
official standard library.  So whether that was an original design
intent or not, the Tango developers would have had to be extremely
short-sighted to not consider that such compatibility issues would
eventually arise.  I would like to give you that much credit, anyway.

If Tango merely offered an alternative implementation to Phobos'
features, then your claim would have merit (like OpenGL is an
alternative to DirectX).  But the fact that Tango offers a significantly
*disjoint but overlapping* feature set from Phobos makes it inevitable
that users would want to eat their cake and have it too (in the way that
both Qt and OpenGL allow you to draw on the display, and thus both
feature graphics primitives, but one is clearly more than an alternative
to the other).

Boost overlaps with but is disjoint from the Standard Library in that it
offers smart pointers, binders, and numerics.  It could easily have
said: "Well, Boost wasn't designed to be compatible with the Standard
Libray, so if you want to mix shared_ptr<> with auto_ptr<>, you're SOL."
That would have been just as reasonable as Tango taking that position.
But if you look at the interface of shared_ptr<>, you'll see that it
accepts a std::auto_ptr<>.  You're not telling me that the design of
Tango wasn't forward-looking, are you?  After all, as you say, Tango is
now changing to *become* compatible with Phobos...

Dave

Nov 23 2007
"Kris" <foo bar.com> writes:
"David B. Held" <dheld codelogicconsulting.com> wrote in message
news:fi87no$8h4$1 digitalmars.com...
Kris wrote:
[...]
As for this weird thing with the sock-puppet, I admit to being entirely
bemused until you owned up to it. Then I wondered if that might be a
double-blind post, but the one above does appear to be you. FWIW, it
seems sad that anyone would attempt to manipulate or subvert the ng like
that ... is it /really/ that important? You call that a 'prank', while I
have to wonder if such behavior isn't grounded in malevolence instead.
Trolling is bad enough, but what you claim to have done is surely several
steps below? Yet, here you are chewing out Jeff N over some token
semantic distinction. I don't get it. That does seem a bit hypocritical
doesn't it? Why don't you have a go at me instead? Or, did you perhaps
think JeffN was me?

Well, the double-standard here is quite amusing.  Both of you accused
someone else of deception and trickery when the most obvious reading of
the "sock puppetry" does not lead to that conclusion.

On the contrary, the puppeteer was most likely insulting Janice as well,
which means that you two were feigning stupidity, adding insult to injury,
and then making light of it by dismissing your claims as "speculation".
Well,

You say "most likely", and then draw an extensive conclusion from that. I
didn't read the post in the manner you have suggested at all, so can happily
and honestly disagree with your "assertions" in full.

obviously, you haven't been a victim of such tricks yet, so it is easy for
you to blame the victim (which is what you did, let's not mince

Victim? Surely you're making a rather grand assumption that the person you
call the 'victim' could never have made that post at all? How do you
actually know that, Dave? The only way you could be /so/ sure is if you'd
posted it yourself. Right?

Let me ask you: Did you make that post, David? Be honest about it.

words).  However, I notice that once Jeff was a victim, he had a wholly
different reaction to the situation and did not sit around waiting for
someone to accuse *him* of sock puppetry (even though that would be just
as silly as both of your accusations).  In fact, Jeff highlighted with his
strong words just how serious an offense it is, and now you, though not
being a victim, are merely emphasizing Jeff's point: being the victim of
an anonymous attack really sucks, in the way that a hit-n-run sucks...you
can't even strike back at your attacker.  How is it that an

Again, the only way you could be so sure is if you'd posted it yourself. Did
you make that post, David? If you didn't, then your assertions are surely
limited in extent and perhaps entirely baseless? If you did post as
"wantphango" or whatever, then simply own up to it.

*anonymous* person can attack a member of the community, and you have the
right to *accuse the victim of being the attacker*, but as soon as you
have a suspect in sight, it's *obviously wrong to accuse the victim*.
*That*, my friend, is a double-standard.

I really have no idea of what you're trying to say here. Sorry :)

Was it "malevolent" to demonstrate this point?  No more so than it was for
you two to blame the victim, which is an all-to-common sociological
reaction to crimes in which the suspects have gotten away scot-free.

You're still discussing a 'victim', and it's not even clear of what. Are you
saying that the troll post was somehow 'attacking' Janice? If so, how? I'd
like to understand that aspect.

The reason I targeted Jeff and not you is because you at least had the
decency to retract your accusation after Janice protested innocence, but
Jeff was not so forgiving, despite having not enough evidence to convict a
squirrel of burying nuts.  I have participated in enough electronic social
media to know that false-flag operations are the dirtiest tricks of the
game.  It *really* sucks to be a victim; and thus, accusing the victim of
being the perpetrator is what I consider to be particularly

Faceless conclusions based upon your own interprestions? You're projecting
shared opinion and knowledge here (with yourself), which is certainly

"malevolent".  Since you seem to not have the taste of being a victim
yet, I can still pull out my sock puppet; and this time I'll be clever
enough to post through the web interface...then I'll lay an old
blame-the-victim trick on you and let you decide which is more
malevolent...blaming the victim or exposing the hypocrisy of doing so.

I see. So, you intend to run around posting under false names with the
intend to cause some kind of malevolent damage within the NG? That really
doesn't seem appropriate, but if it happens we can all point to this post
and have a good idea of who is behind the scenes.

Also, I will admit that I have wondered why you made that analogy between
Boost and Tango, since your message appeared to be saying "Hey, the Tango
guys say Yo! Put up or Shutup!" which really couldn't be further from the
truth. Heck, there's even a long recent thread on toString vs toUtf8 in
this regard.

Good library authors can disarm their critics with a good explanation of
the design decisions, while authors outside of that set don't feel that
justification is necessary, because they are the ones who put their hard
work into it.

The connotation here is that perhaps those who do not "disarm their critics"
are not "good library authors". Thus, since you're implying elsewhere that
Tango has at least some such people, then the library itself is somehow not
"good". It's a silly, groundless, and vague accusation. Seems a bit like
fud, actually. You don't say anything about trolls either :)

Not all criticism is justified, and some of it is simply bad, but the way
it's responded to makes all the difference in the world.

You're using the term 'criticism' as though we don't deal with it every
single day. Perhaps you should hang out on IRC sometimes, and watch
carefully how criticism is most often responded to ... the vast majority of
such criticism results in a change to the codebase. There are exceptions to
that rule, but that's generally how criticism is responded to. Go and look
through the tickets also. Heck, log onto IRC and just ask - you couldn't ask
for a faster way of getting a reality check :)

It reminds me of the interviewing process at work.  Some candidates simply
refuse to answer simple coding questions, because it is "beneath them".
Well, maybe it is, but that's all the more reason to give a quick answer
rather than rejecting the question on principle.  Without any answer at
all, it's impossible to tell whether the question really is beneath the
candidate, or they are just stalling because they can't answer it.

That is indeed silly and, thankfully, I've never met such a person though
I've interviewed hundreds. Do you refuse to answer code questions?

When a critic says: "You should change X", you can say: "No, you're wrong.
That's a matter of taste and I can't please everybody" or you can say:
"The reason I chose X was because given the alternatives, it gave us the
most flexibility as library authors.  Here is what I mean..."  Maybe "You
should change X" is a stupid criticism that isn't worth your time to
respond to.  Or maybe it's not.  If you have a justification at the ready,
it makes you look all the more knowledgeable than protesting artistic
license.  If you present the attitude that the criticism is worthless,
then other users begin to wonder whether X was actually designed or was
merely an accident.

Not all good engineers are good politicians. I imagine few good politicians
make good engineers. That's the truth, and it's just fine.

My point is not that Tango is bad (though perhaps your self-congratulation
on it is a bit generous).  I haven't seen enough of Tango to say whether
it is or not, and the parts I have seen seemed reasonable to me.  My point
is that some of Tangos authors are more diplomatic than others; and
whether you feel that is fair or not (to have to suffer fools, from your
perspective), the reputation of Tango as a piece of work is affected by
the attitudes of its contributors (the point I was trying to make, as
delicately as possible).  On the other hand, I don't have any user-visible
contributions to D, so I'm not jeopardizing anything (the man who has
nothing to lose is the most

Tango does not rest upon all of us being diplomats (at all, or all the
time), so let's stop pretending it matters nearly as much as you've been
trying to make out.

dangerous of all).  I happen to think that Sean Kelly is a good ambassador
of Tango, and if everything I knew about Tango came from things he said, I
would be predisposed to think it's a pretty darned good library.  I
suspect a lot of other folks might say the same thing.

Indeed, and good for Sean. Having people with different skill-sets is often
crucial to the success of any project.

As I pointed out in a reply to your post, Tango is changing in order to
have some measure of compatibility with phobos (which you no doubt know
of) and, as a library, it was never intended to be compatible in the
first place.
[...]

That's not the point.  The point is that it was clearly designed to be a
standard library, or it would not have defined things like Object.d.  So
the whole "never intended to be Phobos-compatible" claim ignores the fact
that users of Tango are necessarily going to expect a feature set similar
to Phobos, if for no other reason than that Phobos is the official
standard library.  So whether that was an original design

Actually, it most certainly is the point, Dave. And it's not a "claim" (as
you say) about "phobos compatability" -- it is a cold hard fact instead.
Even if a handful of features *are* similar, the organization is entirely
different, and is thus wholly incompatible at the package level. That
decision, along with many others, was a concious and fully intentional one.
Other details aside, we needed to scale the library beyond the stage where
you can simply dump everything into one folder and call it good.

intent or not, the Tango developers would have had to be extremely
short-sighted to not consider that such compatibility issues would
eventually arise.  I would like to give you that much credit, anyway.

Please don't. We considered a slew of options and eventually decided that
we'd have to be incompatible in a variety of ways in order to make the
library operate the way we wanted it to.  Again, there was no intent to be
compatible, since it was not feasible to do so while at the same time meet
the goals we had set. That was a choice we made. You can contuinue denying
that all you like, but it really makes no difference whatsoever :)

If Tango merely offered an alternative implementation to Phobos' features,
then your claim would have merit (like OpenGL is an alternative to
DirectX).  But the fact that Tango offers a significantly *disjoint but
overlapping* feature set from Phobos makes it inevitable that users would
want to eat their cake and have it too (in the way that both Qt and OpenGL
allow you to draw on the display, and thus both feature graphics
primitives, but one is clearly more than an alternative to the other).

Again, Tango very quickly gave up on all notion of full phobos compatability
in the early stages.

Boost overlaps with but is disjoint from the Standard Library in that it
offers smart pointers, binders, and numerics.  It could easily have said:
"Well, Boost wasn't designed to be compatible with the Standard Libray, so
if you want to mix shared_ptr<> with auto_ptr<>, you're SOL." That would
have been just as reasonable as Tango taking that position. But if you
look at the interface of shared_ptr<>, you'll see that it accepts a
std::auto_ptr<>.  You're not telling me that the design of Tango wasn't
forward-looking, are you?  After all, as you say, Tango is now changing to
*become* compatible with Phobos...

We're changing some trivial things to be compatible at the runtime layer.
Things like toString() and so on. The upper layers, like I/O are
incompatible, as is the structure of the library itself and the package
layout. In fact, the phobos runtime is changing to look like Tango, since
there is currently an effort under way to use the Tango runtime instead of
the existing phobos one. Thus, as I already said, phobos is changing to look
like Tango. You apparently cut that bit out of my post, because it blows
huge holes in your entirely inaccurate analogy :)

Specifically related to Tango, your analogy is based on entirely false
assertions. I suspect  you don't know much about the library, or the history
behind it? If you did, then you'd understand how irrellevant the commentary
really is. That's to be expected, but I'm surprised at just how many
"concrete" conclusions you're managing to draw from thin air. I'd encourage
you to use Tango and draw conclusions based on some solid experience
instead? I'm sure people would be happy to answer any of those you may have
once you dig deeper.

In the end it comes down to a simple (reapeated) notion: we made an early
decision not to conform with phobos in a manner that could be considered
compatible. Phobos had frozen in time, and patches sent for the library lay
languishing somewhere for months and even years. There was little point in
sacrificing better approaches because of that, and we knew it. Those were
difficult choices, but we made them and moved on. If you want to ignore that
and draw your conclusions anyway, you are welcome to do so. Read the
history, as I've suggested, and you'll perhaps get a better feel for how far
off your analogy has actually been?

- Kris

p.s. Just out of interest, have you written or designed a library on a scale
similar to Tango?

Nov 23 2007
On 11/24/07, Kris <foo bar.com> wrote:
Surely you're making a rather grand assumption that the person you
call the 'victim' could never have made that post at all? How do you
actually know that, Dave?

Because I have stated that fact loudly and clearly. Once again, I,
Janice Caron, do hereby declare that I have made no posts on this
group in any name other than Janice Caron. Can I possibly be more
clear? Now stop making false accusations.

I am /so/ looking forward to the moderated newsgroup!

Nov 23 2007
"Kris" <foo bar.com> writes:
"Janice Caron" <caron800 googlemail.com> wrote in message
news:mailman.123.1195890481.2338.digitalmars-d puremagic.com...
On 11/24/07, Kris <foo bar.com> wrote:
Surely you're making a rather grand assumption that the person you
call the 'victim' could never have made that post at all? How do you
actually know that, Dave?

Because I have stated that fact loudly and clearly. Once again, I,
Janice Caron, do hereby declare that I have made no posts on this
group in any name other than Janice Caron. Can I possibly be more
clear?

Oh, you make that claim, and that's fine. But the point is that David cannot
know that for sure unless he made that post himself. David has attempted to
create a notable level of 'fact' based upon knowing exactly who did what. He
places so much emphasis on it, one surely has to ask the question posed
above. I am simply asking that question.

Now stop making false accusations.

There is no accusation there. Period. Instead, there is a question to Dave.
Perhaps you should stop attempting to create issue where there is none.

Nov 24 2007
"David B. Held" <dheld codelogicconsulting.com> writes:
Kris wrote:
"David B. Held" <dheld codelogicconsulting.com> wrote in message
[...]

I believe I spelled it out in my last response to Jeff.  Since you seem
to be following the thread, I don't really feel it's worth my while to
repeat the argument in full.

[...]
On the contrary, the puppeteer was most likely insulting Janice as well,
which means that you two were feigning stupidity, adding insult to injury,
and then making light of it by dismissing your claims as "speculation".
Well,

You say "most likely", and then draw an extensive conclusion from that. I
didn't read the post in the manner you have suggested at all, so can happily
and honestly disagree with your "assertions" in full.

Then I would say that either A) you didn't stop and think very carefully
about the implications, or B) you wrote the posts and they didn't work
out the way you had hoped.

obviously, you haven't been a victim of such tricks yet, so it is easy for
you to blame the victim (which is what you did, let's not mince

Victim? Surely you're making a rather grand assumption that the person you
call the 'victim' could never have made that post at all? How do you
actually know that, Dave? The only way you could be /so/ sure is if you'd
posted it yourself. Right?

Let me ask you: Did you make that post, David? Be honest about it.

Ok, ok, I admit it!  I did all of it!!!  I just wanted to stir the pot,
so first, I wrote an anonymous post that I knew would bait people like
you into responding in exactly the way I predicted.  Then, to avert
suspicion, I tried it again, but this time, did it in a clumsy way that
was easily traceable!  You figured it all out!  You are so brilliant!  A
sincere question deserves a sincere answer.

[...]
Good library authors can disarm their critics with a good explanation of
the design decisions, while authors outside of that set don't feel that
justification is necessary, because they are the ones who put their hard
work into it.

The connotation here is that perhaps those who do not "disarm their critics"
are not "good library authors". Thus, since you're implying elsewhere that
Tango has at least some such people, then the library itself is somehow not
"good".

Well, that's a non-sequitur.  Someone who isn't a diplomatic
representative of a library does not force the library itself to somehow
be bad.  And yet, that person can cause harm to the library by
influencing the opinions of prospective users.  However, if the author
*is* the library, then I agree that bad author == bad library.  Are you
a D library?

It's a silly, groundless, and vague accusation.

What's silly is the line of reasoning used to arrive at this putative
"accusation".

[...]
Not all criticism is justified, and some of it is simply bad, but the way
it's responded to makes all the difference in the world.

You're using the term 'criticism' as though we don't deal with it every
single day. Perhaps you should hang out on IRC sometimes, and watch
carefully how criticism is most often responded to ...

Whether you like it or not, the NG is not some kind of static IRC
channel.  What you say on IRC is not recorded and archived and made
public in the way this newsgroup is.  It may well be that people who
talk to you on IRC have a completely different experience than those who
read this NG.  Whether that is a good thing or a bad thing, I'll let you
decide.

[...]
Tango does not rest upon all of us being diplomats (at all, or all the
time), so let's stop pretending it matters nearly as much as you've been
trying to make out.

I wonder if you've ever tried to commercialize anything you've written.
I've sold software I wrote to put bread on the table, and the way you
makes all the difference in the world.  I can especially tell you that
it makes a difference to companies like Borland, where I saw people
complain about their products every day (because I was often one of
them).  Maybe Tango will always be a free product, and that would be
great.  But if you ever decide that you should get paid for your hard
work (say, through a dual-licensing scheme, which seems rather popular
these days), you might find that diplomacy hits the bottom line rather
directly.

[...]
Again, Tango very quickly gave up on all notion of full phobos compatability
in the early stages.

There's a difference between full compatibility and gratuitous
incompatibility.  C++ isn't fully compatible with C, and obviously had
to do things differently to do them better.  On the other hand, Bjarne
always had a good reason for doing things differently, and wasn't afraid
to share it with users (and, I might add, he managed to do so without
calling them idiots).

[...]
p.s. Just out of interest, have you written or designed a library on a scale
similar to Tango?

No, Kris, I haven't.  I'm not a brilliant programmer who only writes
amazing code like you are.  I doubt I could write a 10 line program
without introducing more than one bug per line.  My judgment and opinion
wisdom bless the D community for all of its days!  I've only ever worked
on toy codebases of a few hundred lines, and never on something that was
actually used by other people.  Every night when I go to bed, I think
to myself: "If only I could one day be as great a h X0r as Kris...that
would be swell!"  I feel stupid even replying to you, as if I have the
right to challenge a man who has so profoundly changed the face of D!
I'm sorry, I won't ever let it happen again.

Dave

Nov 24 2007
"Kris" <foo bar.com> writes:
"David B. Held" <dheld codelogicconsulting.com> wrote
Let me ask you: Did you make that post, David? Be honest about it.

Ok, ok, I admit it!  I did all of it!!!  I just wanted to stir the pot, so
first, I wrote an anonymous post that I knew would bait people like you
into responding in exactly the way I predicted.  Then, to avert suspicion,
I tried it again, but this time, did it in a clumsy way that was easily
traceable!  You figured it all out!  You are so brilliant!  A sincere

I asked a simply question, and there's really no need to take this attitude.
I will admit to being saddened by the levels that you claim to stoop to,
though I guess I should not be surprised given what you've previously
claimed:

1) that you deliberately subverted the integrity of the ng via your
sock-puppet spoof
2) that you'd be more than willing to do so again

now you claim:

3) trolling against Tango is fair game for you (phangowant)
4) doing so with the intent to generate a flame fest was your goal ("baiting
people ... exactly the way I predicted")

Bring on those moderators ...

Given those elements, one could be forgiven for concluding that your
innacurate analogy regarding Boost and Tango was posted with similar

You're using the term 'criticism' as though we don't deal with it every
single day. Perhaps you should hang out on IRC sometimes, and watch
carefully how criticism is most often responded to ...

Whether you like it or not, the NG is not some kind of static IRC channel.
What you say on IRC is not recorded and archived and made public in the
way this newsgroup is.  It may well be that people who talk to you on IRC
have a completely different experience than those who read this NG.
Whether that is a good thing or a bad thing, I'll let you decide.

Thanks. Well, given the claims you've made so far, I'd say the NG is an
inappropriate place to conduct any kind of rational discourse. I mean,
what's the point if people like you are more than willing to (as you've
described) subvert and/or pervert the environment? I (perhaps ignorantly)
thought it was a place for D enthusiasts to discuss related topics, rather
than for those with some kind of twisted agenda. That's too bad.

Tango does not rest upon all of us being diplomats (at all, or all the
time), so let's stop pretending it matters nearly as much as you've been
trying to make out.

Maybe Tango will always be a free product, and that would be great.  But
if you ever decide that you should get paid for your hard work (say,
through a dual-licensing scheme, which seems rather popular these days),
you might find that diplomacy hits the bottom line rather directly.

Yes, I'm aware how the business environment operates. And yes, Tango will
always be a free product as far as I'm concerned. Why would it not be? Tango
exists because we are D enthusiasts.

p.s. Just out of interest, have you written or designed a library on a
scale similar to Tango?

No, Kris, I haven't.  I'm not a brilliant programmer who only writes
amazing code like you are.  I doubt I could write a 10 line program
without introducing more than one bug per line.  My judgment and opinion
bless the D community for all of its days!  I've only ever worked on toy
codebases of a few hundred lines, and never on something that was actually
used by other people.  Every night when I go to bed, I think to myself:
"If only I could one day be as great a h X0r as Kris...that would be
swell!"  I feel stupid even replying to you, as if I have the right to
challenge a man who has so profoundly changed the face of D! I'm sorry, I
won't ever let it happen again.

There's really no need to utterly wig-out, is there? I asked a perfectly
innocent, and what I thought to be reasonable, question. I mean, you might
have had far more experience in that arena than all of Tango put together,
and could thus be in a position to offer lots of solid advice on technical
concerns too. I asked only because you seemed to be hinting in that
direction.. However, I'll take your reply to be an affirmation in the
negative sense.

Thank you for clarifying my original two questions regarding your posts over
Tango.

Nov 24 2007
"David B. Held" <dheld codelogicconsulting.com> writes:
Kris wrote:
"David B. Held" <dheld codelogicconsulting.com> wrote
Let me ask you: Did you make that post, David? Be honest about it.

Ok, ok, I admit it!  I did all of it!!!  I just wanted to stir the pot, so
first, I wrote an anonymous post that I knew would bait people like you
into responding in exactly the way I predicted.  Then, to avert suspicion,
I tried it again, but this time, did it in a clumsy way that was easily
traceable!  You figured it all out!  You are so brilliant!  A sincere

I asked a simply question, and there's really no need to take this attitude.

You asked a simple question, but I didn't see one ounce of sincerity in
it.  I just got done writing several long posts about the evils of
anonymous posting, and now you want to accuse *me* of being the poster??
Obviously, the original poster was far more sophisticated in the ways
of evading detection than I was, so let me ask you this...what would be
my reward for then making a clumsy *not-so-anonymous* post??  There are
only two conclusions to be made here:

1) you didn't take 5 seconds to think this through and realize that only
an utter moron would perform the sequence of events:

a) post as phango
b) post as dheld , "anonymously"
c) admit that b) was a ruse

2) you were not being sincere

Now, you are saying that 2) is not the case, so you are basically
calling me a complete idiot for trying to pull off 1).  Your faux
"sincerity" is extremely annoying and does you no credit, and I take the
insult quite personally.

I will admit to being saddened by the levels that you claim to stoop to,
though I guess I should not be surprised given what you've previously
claimed:

You're "saddened"?  Oh, poor, poor crocodile...look at those big tears...

1) that you deliberately subverted the integrity of the ng via your
sock-puppet spoof
2) that you'd be more than willing to do so again

At least I'm honest.  You've never disclaimed being phango .  Since you
seem to want a straight declaration, here it is: I AM NOT THE PERSON
POSTING AS phango .  Let me ask you: Did you make that post, Kris? Be
honest about it (because if I didn't add this clause, you wouldn't be).

now you claim:

3) trolling against Tango is fair game for you (phangowant)

Ok, since you seem to lack the basic comprehension of literary devices,
I'll spell this one out for you in excruciating detail: my "admission"
above is something called "sarcasm".  Here's a good reference:
http://en.wikipedia.org/wiki/Sarcasm.  I think it's ok for me to quote
an excerpt:

Sarcasm[A] is the sneering, sly, jesting, or mocking of a
person, situation or thing.

I felt that was all that your "sincere" query deserved as a response.
So to be perfectly explicit (since that seems to be what you need, in
your I'm-playing-literal-and-naive mode), this is a false conclusion
because I am not phango , I do not endorse anything phango  says, I am
opposed to trolling, and I have nothing against Tango the library, nor
do I endorse attacking the library.  On the other hand, I think every
piece of work is open for criticism (certainly including anything I've
written), but that is different from an attack in that a criticism has
technical merit and an attack does not.

4) doing so with the intent to generate a flame fest was your goal ("baiting
people ... exactly the way I predicted")

Kris, if this is really a sincere interpretation of my words, I have to
wonder if you simply have a hard time communicating with other people
via idioms and expressions and forms of speech which are not literal?  I
understand that there are specific cognitive defects which can lead to
this situation, but usually the are the result of some developmental
disability that is more systemic in nature.  You don't seem to merely be
a high-functioning autistic or Aspberger's patient, but I don't get to
see you in your normal milieu, so I can't make any kind of guess as to

[...]
Given those elements, one could be forgiven for concluding that your
innacurate analogy regarding Boost and Tango was posted with similar

Yes, by comparing Boost to Tango, I wanted to heap aspersions on Tango.
Clearly, Boost is a simmering pile of dung, and by association, I'm
saying that Tango is crap.  It's a totally unflattering comparison, and
one for which Tango is most undeserving.  You have persuaded me to
retract my comparison and say that Tango is nothing at all like Boost in
any way, shape, or form.  In fact, it's more like the opposite of Boost.
Are you happy?

[...]
Thanks. Well, given the claims you've made so far, I'd say the NG is an
inappropriate place to conduct any kind of rational discourse. I mean,
what's the point if people like you are more than willing to (as you've
described) subvert and/or pervert the environment? I (perhaps ignorantly)
thought it was a place for D enthusiasts to discuss related topics, rather
than for those with some kind of twisted agenda. That's too bad.

Yes, it is too bad.  Apparently, all the "rational" discourse goes on in
IRC, which is clearly where the D newsgroup should migrate (not the
least of all because *you* are there).  If only the perverts and the
subverts would go away, the D newsgroup would become a playground of
rational discourse by D enthusiasts.  My "twisted agenda" has rained
down hellfire and brimstone on the face of D, and everything has come
grinding to a halt.  Oh, woe is we!  Woe is we!  Let us put on sackcloth
and ashes and mourn for the death of our beloved newsgroup...

Kris, let me remind you that the instigator of this thread was that
anonymous coward posting as phango .  And what fanned the flames was
when you and Jeff accused Janice of being that coward (though you
yourself still have not disclaimed being phango ).  At that point, the
thread left the realm of "rational discourse" and ceased being about D
at all.  Trying to impute the nature of the subsequent posts to the rest
of the newsgroup is about as irrational as one can get (and you have
shown me just how irrational one can get).  For instance, I invite you
to show how I have "subverted" or "perverted" the environment outside of

[...]
Yes, I'm aware how the business environment operates. And yes, Tango will
always be a free product as far as I'm concerned. Why would it not be? Tango
exists because we are D enthusiasts.

Oh, that's interesting.  Do all the other Tango contributors agree with
you, or are you the official spokesman for the library?  What if someone
else tried to sell Tango with a license?  What would you do?

[...]
There's really no need to utterly wig-out, is there? I asked a perfectly
innocent, and what I thought to be reasonable, question.

I'm sorry, Kris.  I thought your question was as "sincere" as the others
in your last post and I reacted accordingly.  We obviously have a major
disagreement over what constitutes "sincerity".  Since your definition
seems to flip-flop between reading sarcastic things literally and taking
them as they were intended, it's very hard to tell which statements you
make are sincere, and which are not.  Perhaps you could do me a small
favor and mark different passages that you write and respond to as
[literal] or [figurative].  Then we would be on the same page.

I mean, you might have had far more experience in that arena than all of
Tango put together, and could thus be in a position to offer lots of
solid advice on technical concerns too.

I see...and you would accept my criticisms with the same level of
respect you afford Janice?  I'm not sure I know of any library author
willing to take you up on your "offer".

I asked only because you seemed  to be hinting in that direction.. However,
I'll take your reply to be an  affirmation in the negative sense.

Oh, interesting...here you seem to be able to read between the lines
after all!  Amazing!!!  Mr. Literal was able to properly detect sarcasm!
It's a miracle!  Notice how selectively you do it, though.  When you
read one sarcastic passage literally and another figuratively, it casts

Unlike you, Kris, I feel no need to trumpet my credentials or declare
how magnificent my work is.  It's easy enough for someone to find
different things that I've worked on, if for some reason that interests
them.  But you won't ever see me spell it out here, as a matter of
principle.  I've always felt that if you need to say how great your work
is, it's because there aren't enough other people saying it for you.

Thank you for clarifying my original two questions regarding your posts over
Tango.

Oh, you're most welcome, Mr. Literal-When-It's-Convenient.  You think
you are so clever what with your faux innocence and crocodile tears, and
yet you freely admit that you are a prickly person that does not always
play well with others.  Why pretend some of the time and not others?  I
would respect you a lot more if you didn't play these "I'm going to be
naive and innocent and literal now because it suits me" games and just
stuck to your "I don't care what people think" line.

Dave

Nov 25 2007
"Kris" <foo bar.com> writes:
"David B. Held" <dheld codelogicconsulting.com> wrote in message
news:fick79$u53$1 digitalmars.com...
Kris wrote:
"David B. Held" <dheld codelogicconsulting.com> wrote
Let me ask you: Did you make that post, David? Be honest about it.

Ok, ok, I admit it!  I did all of it!!!  I just wanted to stir the pot,
so first, I wrote an anonymous post that I knew would bait people like
you into responding in exactly the way I predicted.  Then, to avert
suspicion, I tried it again, but this time, did it in a clumsy way that
was easily traceable!  You figured it all out!  You are so brilliant!  A
sincere question deserves a sincere answer.

I asked a simply question, and there's really no need to take this
attitude.

You asked a simple question, but I didn't see one ounce of sincerity in
it.  I just got done writing several long posts about the evils of
anonymous posting, and now you want to accuse *me* of being the poster??

Huh? Perhaps you should remind yourself that you are the one who's been
playing sock-puppet games? As an anonymous poster?

Obviously, the original poster was far more sophisticated in the ways of
evading detection than I was, so let me ask you this...what would be my
reward for then making a clumsy *not-so-anonymous* post??  There are only
two conclusions to be made here:

Oh, it was perfectly sincere. You made all the implications that you knew
exactly who the poster was, and it seemed the only way you could know for
sure is if it had been you. I noted that and thus asked the question, to
which you appeared to answer honestly. Have you been digging a hole for
yourself?

1) you didn't take 5 seconds to think this through and realize that only
an utter moron would perform the sequence of events:

a) post as phango
b) post as dheld , "anonymously"
c) admit that b) was a ruse

There's little point in trying to second-guess you. Instead, I've merely
been accepting what you admit to, or otherwise claim, as being the truth.
You can't fault anyone for that.

2) you were not being sincere

Now, you are saying that 2) is not the case, so you are basically calling
me a complete idiot for trying to pull off 1).  Your faux "sincerity" is
extremely annoying and does you no credit, and I take the insult quite
personally.

I asked a simple question and you answered it, noting it as being sincere. I
retrospect, perhaps your honesty there was due to being 'outed' ?).  The
rest has been entirely in your hands.

I will admit to being saddened by the levels that you claim to stoop to,
though I guess I should not be surprised given what you've previously
claimed:

You're "saddened"?  Oh, poor, poor crocodile...look at those big tears...

Again, I chose to assume you were being honest. You specifically said you
were being sincere.

1) that you deliberately subverted the integrity of the ng via your
sock-puppet spoof
2) that you'd be more than willing to do so again

At least I'm honest.  You've never disclaimed being phango .  Since you
seem to want a straight declaration, here it is: I AM NOT THE PERSON
POSTING AS phango .  Let me ask you: Did you make that post, Kris? Be
honest about it (because if I didn't add this clause, you wouldn't be).

You claimed earler that it was actually you, and there was no reason to
assume you meant otherwise. No, it wasn't me who posted that, either. It
would be great if Walter would check the logs and find out who it was.

now you claim:

3) trolling against Tango is fair game for you (phangowant)

Ok, since you seem to lack the basic comprehension of literary devices,
I'll spell this one out for you in excruciating detail: my "admission"
above is something called "sarcasm".  Here's a good reference:
http://en.wikipedia.org/wiki/Sarcasm.  I think it's ok for me to quote an
excerpt:

Then you should drop the sarcasm?

I felt that was all that your "sincere" query deserved as a response. So
to be perfectly explicit (since that seems to be what you need, in your
I'm-playing-literal-and-naive mode), this is a false conclusion because I
am not phango , I do not endorse anything phango  says, I am opposed to
trolling, and I have nothing against Tango the library, nor do I endorse
attacking the library.  On the other hand, I think every piece of work is
open for criticism (certainly including anything I've written), but that
is different from an attack in that a criticism has technical merit and an
attack does not.

We completely agree on the criticism aspect.

4) doing so with the intent to generate a flame fest was your goal
("baiting people ... exactly the way I predicted")

Kris, if this is really a sincere interpretation of my words, I have to
wonder if you simply have a hard time communicating with other people via
idioms and expressions and forms of speech which are not literal?  I
understand that there are specific cognitive defects which can lead to
this situation, but usually the are the result of some developmental
disability that is more systemic in nature.  You don't seem to merely be a
high-functioning autistic or Aspberger's patient, but I don't get to see
you in your normal milieu, so I can't make any kind of guess as to your
condition.

Again, there was no reason to believe you were not being sincere. After all,
you don't find sock-puppetry to be distasteful. Trolling is the lesser evil
in my book.

[...]
Thanks. Well, given the claims you've made so far, I'd say the NG is an
inappropriate place to conduct any kind of rational discourse. I mean,
what's the point if people like you are more than willing to (as you've
described) subvert and/or pervert the environment? I (perhaps ignorantly)
thought it was a place for D enthusiasts to discuss related topics,
rather than for those with some kind of twisted agenda. That's too bad.

Yes, it is too bad.  Apparently, all the "rational" discourse goes on in
IRC, which is clearly where the D newsgroup should migrate (not the least
of all because *you* are there).  If only the perverts and the subverts
would go away, the D newsgroup would become a playground of rational
discourse by D enthusiasts.  My "twisted agenda" has rained down hellfire
and brimstone on the face of D, and everything has come grinding to a
halt.  Oh, woe is we!  Woe is we!  Let us put on sackcloth and ashes and
mourn for the death of our beloved newsgroup...

You had claimed to be both a puppeteer and a troll. I would say that
represents a twisted agenda. The drama you're making out of this just makes
you look a bit silly, imo

Kris, let me remind you that the instigator of this thread was that
anonymous coward posting as phango .  And what fanned the flames was

To which you had claimed was you.

when you and Jeff accused Janice of being that coward (though you yourself
still have not disclaimed being phango ).  At that point, the thread left
the realm of "rational discourse" and ceased being about D at all.  Trying
to impute the nature of the subsequent posts to the rest of the newsgroup
is about as irrational as one can get (and you have shown me just how
irrational one can get).  For instance, I invite you to show how I have
"subverted" or "perverted" the environment outside of this thread.  Go
ahead and try.  I'm calling you out.

Did I say you did?

Instead, I've simply noted what you claimed to have done. You deliberately
manipulated the ng with your sock-puppetry - that's subversion. You were
quite explicit that you'd happily do so again (perhaps /threatened/ is more
appropriate?). You then claimed to be the "phangowant" troll, and explicitly
noted how you were trying to manipulate other posters. Did you expect a pat
on the back for this?

[...]
Yes, I'm aware how the business environment operates. And yes, Tango will
always be a free product as far as I'm concerned. Why would it not be?
Tango exists because we are D enthusiasts.

Oh, that's interesting.  Do all the other Tango contributors agree with
you, or are you the official spokesman for the library?

Did I say I was? You asked my opinon, and I replied "as far as I am
concerned". End of story.

What if someone else tried to sell Tango with a license?  What would you
do?

No idea. How is this relevant to your sock-puppetry?

[...]
There's really no need to utterly wig-out, is there? I asked a perfectly
innocent, and what I thought to be reasonable, question.

I'm sorry, Kris.  I thought your question was as "sincere" as the others
in your last post and I reacted accordingly.  We obviously have a major
disagreement over what constitutes "sincerity".

I've tried to be clear and sincere toward you. If you find you cannot
respond in kind, that is your choice.

I asked only because you seemed  to be hinting in that direction..
However,
I'll take your reply to be an  affirmation in the negative sense.

Oh, interesting...here you seem to be able to read between the lines after
all!  Amazing!!!  Mr. Literal was able to properly detect sarcasm! It's a
miracle!  Notice how selectively you do it, though.  When you read one
sarcastic passage literally and another figuratively, it casts serious

What I saw resembled a meltdown. I doubt anyone needed to read between any
lines there?

Unlike you, Kris, I feel no need to trumpet my credentials or declare how
magnificent my work is.  It's easy enough for someone to find different
things that I've worked on, if for some reason that interests them.  But
you won't ever see me spell it out here, as a matter of principle.  I've
always felt that if you need to say how great your work is, it's because
there aren't enough other people saying it for you.

Strawman. I don't actually trumpet my own work. If you're talking about
Tango, my contribution is just that: a contribution. As you know, there are
lots of people involved, and it is that collection of skills and ideas that
make Tango the great peice of work that it is. Even Tango detractors have
nice things to say about it.

Thank you for clarifying my original two questions regarding your posts
over Tango.

Oh, you're most welcome, Mr. Literal-When-It's-Convenient.  You think you
are so clever what with your faux innocence and crocodile tears, and yet
you freely admit that you are a prickly person that does not always play
well with others.  Why pretend some of the time and not others?  I would
respect you a lot more if you didn't play these "I'm going to be naive and
innocent and literal now because it suits me" games and just stuck to your
"I don't care what people think" line.


Nov 25 2007
Regan Heath <regan netmail.co.nz> writes:
Kris wrote:
1) that you deliberately subverted the integrity of the ng via your
sock-puppet spoof
2) that you'd be more than willing to do so again

At least I'm honest.  You've never disclaimed being phango .  Since you
seem to want a straight declaration, here it is: I AM NOT THE PERSON
POSTING AS phango .  Let me ask you: Did you make that post, Kris? Be
honest about it (because if I didn't add this clause, you wouldn't be).

You claimed earler that it was actually you, and there was no reason to
assume you meant otherwise. No, it wasn't me who posted that, either. It
would be great if Walter would check the logs and find out who it was.

I think you must have missunderstood something here Kris, or perhaps I
did.  David didn't claim the original phango posting was him, he claimed
this one was:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=61861

I don't know about you but when I read that it was pretty obvious that
it wasn't Jeff but someone playing a prank.  At least, that was my
interpretation.

I don't want to fan the flames which seem to have died down, just to
point out there may be some areas where one or the other of you have
missunderstood the situation somewhat.

Regan

Nov 26 2007
Daniel Keep <daniel.keep.lists gmail.com> writes:
It's a month until Christmas, and I think this thread isn't doing anyone
any good.  In the spirit of the season (forgiveness, good-will, etc.)

-- Daniel

Nov 25 2007
"Kris" <foo bar.com> writes:
"Daniel Keep" <daniel.keep.lists gmail.com> wrote in message
news:fidjbn$2ah2$1 digitalmars.com...
It's a month until Christmas, and I think this thread isn't doing anyone
any good.  In the spirit of the season (forgiveness, good-will, etc.)

-- Daniel


Nov 25 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Daniel Keep wrote:
It's a month until Christmas, and I think this thread isn't doing anyone
any good.  In the spirit of the season (forgiveness, good-will, etc.)

-- Daniel

Here here!  /Raises glass of eggnog/

--bb

Nov 25 2007
Clay Smith <clayasaurus gmail.com> writes:
Daniel Keep wrote:
It's a month until Christmas, and I think this thread isn't doing anyone
any good.  In the spirit of the season (forgiveness, good-will, etc.)

-- Daniel

Please, just let it rest in peace.

Nov 25 2007
Jeff Nowakowski <jeff dilacero.org> writes:
David B. Held wrote:
In case you haven't noticed, I haven't been working especially hard to
win friends or standing in the D community.

Your posts are almost always thoughtful and refraining from animosity.
Numerous times you have implored others to do the same.  Your personal
attack/forgery was totally out of character.  No matter how wrong you
think I was, you have no excuse for acting worse.

Well, your backpedaling and equivocation is pretty transparent, in my
book.  First you say:

"By the way, the charge that one of the posts following yours
was a sock puppet was legitimate."

Here, there is no "misconstruing" going on.  You clearly said: "Somebody
accused you of creating a sock puppet, and that accusation was valid,
not baseless."  I don't think it takes a lawyer to read it that way. You

Your interpretation is wrong.  When I said the charge was "legitimate",
I meant as in http://dictionary.reference.com/browse/legitimate:

4. in accordance with the laws of reasoning; logically inferable;
logical: a legitimate conclusion.

Then, you followed up with:

"It was the first thing that crossed my mind."

Here, you say: "And I tend to agree with the accuser."  How do I draw
that conclusion?  Well, it's simple.  The first thing that crossed *my*
mind was: "Someone is playing a dirty trick on Janice, and then
exploiting it."  Which means that if you had a different first
Janice was guilty until proven innocent.

Your analysis is wrong.  It "crossed my mind".  That's all.  It looked
fishy, and an obvious possibility was a sock puppet.  There are other
possibilities, and I reached no firm conclusions.  I filed it away in
the back of my mind and continued reading the newsgroup.

But you realized you had gone
too far, so you decided to try to smooth things over with a CYA clause:

"Doesn't mean you did it, but it's a valid suspicion."

Wrong again, Mr. Holmes.  I'm trying to make it clear that there is no
confirmed guilt, only suspicion. I think I'll stop here.  Believe what
you want to believe.

-Jeff

Nov 21 2007
"David B. Held" <dheld codelogicconsulting.com> writes:
Jeff Nowakowski wrote:
David B. Held wrote:
In case you haven't noticed, I haven't been working especially hard to
win friends or standing in the D community.

Your posts are almost always thoughtful and refraining from animosity.
Numerous times you have implored others to do the same.  Your personal
attack/forgery was totally out of character.  No matter how wrong you
think I was, you have no excuse for acting worse.

No matter how wrong you think I was, you have no excuse for claiming my
actions were worse.  If you feel strongly offended (and yes, that was
the intent), then imagine how Janice felt 1) when some coward posted as
"phango phangowant.com", and 2) when two other people then had the gall
to accuse her of being the trickster.  I didn't even get the luxury of
calling you the perpetrator to complete the recreation, or justice would
have truly been served.  It's all about you, you, you, isn't it?  My
whole point here was about Janice, and that fact that *she* is the only
true victim here.  And yet you continue to insist that *you* are the
only victim, even after personally experiencing a bit of the situation
that Janice was placed in.  I'm glad you got to sit in the victim-chair
for a few minutes.  It's too bad it didn't increase your empathy one iota.

Well, your backpedaling and equivocation is pretty transparent, in my
book.  First you say:

"By the way, the charge that one of the posts following yours
was a sock puppet was legitimate."

Here, there is no "misconstruing" going on.  You clearly said:
"Somebody accused you of creating a sock puppet, and that accusation
was valid, not baseless."  I don't think it takes a lawyer to read it

Your interpretation is wrong.  When I said the charge was "legitimate",
I meant as in http://dictionary.reference.com/browse/legitimate:

4. in accordance with the laws of reasoning; logically inferable;
logical: a legitimate conclusion.

I already deconstructed this bit of hogwash.  The only way for you to
make this defense is to claim stupidity: "Yes, I really was swayed by
the phango phangowant.com endorsement...until I realized it could only
have been Janice in disguise!!!"  Either that, or you are gravely
insulting Janice's intelligence, which would be your third offence:
"Yes, I really think Janice is stupid enough to post a sock puppet as
phango phangowant.com...in fact, I think she's a blazing idiot!!!"
Neither of those positions is particularly flattering.

[...]
But you realized you had gone too far, so you decided to try to smooth
things over with a CYA clause:

"Doesn't mean you did it, but it's a valid suspicion."

Wrong again, Mr. Holmes.  I'm trying to make it clear that there is no
confirmed guilt, only suspicion. I think I'll stop here.  Believe what
you want to believe.

You know what's wrong with defence?  If you had really stopped for two
seconds to think about the implications of Janice writing those
anonymous posts, you would have come to the same conclusion that I did:
Completely bogus hypothesis.  When *you* were the victim, all of the
sudden is was worth your time to not only consider the implications of
person X being the author, you made a concerted effort to find out who X
was!  And still, you lack the ability to put yourself in Janice's shoes
and imagine that *perhaps she felt the same way you did when you accused
her of being her own attacker*.  This isn't about what I believe...it's
about the behavior I observed.  Actions speak louder than words.

Dave

Nov 23 2007
Jeff Nowakowski <jeff dilacero.org> writes:
David B. Held wrote:
No matter how wrong you think I was, you have no excuse for claiming my
actions were worse.

You crossed the line from debate to taking an underhanded action.  You
made a fraudulent post and used the opportunity to make a personal
attack of a nature that I've never seen you do under your own name.  The
end does not justify the means.

I wasn't going to continue this thread, but I have additional context to
offer, and a response to the nature of the original anonymous poster.
You seem to be coming at this from a Tango vs Phobos angle, to the point
that you think I'm attacking Janice from the Tango side.  That's not the
case, and I hope you read the following with an open mind.

First, what were my motives for entering this thread?  Here's what
happened.  I saw the personal animosity between Kris and Janice go up a
notch when Kris accused Janice of being a sock puppet ("There's a fair
chance the poster below is actually Janice").  Kris later retracted his
statement ("Honest mistake, Janice. Really."), but still felt upset
about an "amateurish" charge that Janice made earlier ("I recall not so
long ago you accused people involved with Tango as being "amateurs", or
something like that. I'm not sure how that meshes with your sudden rash
of indignation?")

To which Janice replied "Consider the possibility that you may have
misunderstood? Alas, I don't recall the quote you mention, but I'm sure
that if you drag up exactly what I said word for word, I can either
clarify the quote or change my mind or whatever."

It seems better to argue about what was actually said if possible (as an
aside, this is why I hate the idea of forums where you can edit your
posts). After it was clear that neither Kris nor Janice would supply the
quote and Janice didn't see any injustice, I found the quote and posted
it. I even made sure to quote the part that softened Janice's statement
in an effort to be fair, for which Janice thanked me.

It was only after Janice still felt that nothing was wrong with the
original "amateurish/petty" statement that I tried to convey that Kris
was upset for the same underlying reason that upset Janice.  It was not
my intention at all to further the accusation against Janice, and that I
did so I completely apologize for.  I only meant to show it was a
reasonable suspicion (not probable), and that it should not have been
publically aired, and neither should have the "amateur/petty" charge.

So, in light of all that, I never claimed that *I* was the only victim,
nor do I agree that Janice is the only "true victim".  As is usual in
these kinds of disagreements, everybody involved is damaged in some
respects.

I already deconstructed this bit of hogwash.  The only way for you to
make this defense is to claim stupidity: "Yes, I really was swayed by
the phango phangowant.com endorsement...until I realized it could only
have been Janice in disguise!!!"

You're exaggerating my position by saying "it could only have been".
Personally, my Occam's razor point of view is that the post was made
earnestly by somebody who chose to be anonymous.  I don't see it as an
attack against Janice at all -- if the very same post was made by a
regular, you would have no problem with it.  The "phango phangowant.com"
identity is no worse than an "I <heart> New York" t-shirt. My "hmm" view
is that *maybe* it was Janice.

Now you claim that this is stupid.  Your view, that this was an attack
against Janice, I find just as unreasonable as you find mine.  Asking
for a fork of Tango that many might find appealing would be a really bad
idea from Tango's perspective, one that nobody pro-Tango would ask for
even as a false flag attack.

Are you willing to admit to being wrong?  Ask Walter to check the logs
of the web forum.  The date of the post was Sat, 17 Nov 2007 17:23:45
-0500.  Find the IP address associated with that post and I bet you'll
find the same IP belongs to a regular poster, either via the news server
or via the web interface.

Either that, or you are gravely insulting Janice's intelligence,
which would be your third offence: "Yes, I really think Janice is
stupid enough to post a sock puppet as phango phangowant.com...in
fact, I think she's a blazing idiot!!!"

As already stated, I don't see the email address as incriminating.  It's
only the fact that the poster is anonymous and not a regular that raised
a flag for me.

By the way, smart people do stupid things all the time.  For reference,
see the story of the CEO of Whole Foods, who posted under a pseudonym
based on an anagram of his wife's name.  He said things of himself like
"I like Mackey's haircut. I think he looks cute!":

http://valleywag.com/tech/john-mackey/whole-foods-ceo-proud-to-be-an-internet-blowhard-277793.php

When *you* were the victim, all of the sudden is was worth your time
to not only consider the implications of person X being the author,
you made a concerted effort to find out who X was!

For the record, your outing is the 4th time I have uncovered an
anonymous attacker.  I find the practice despicable, to the point that
the previous three times all involved an anonymous person attacking
people I personally disliked.  I'll provide archive references if you
wish.  I checked the original phango ... post and only saw that it came
from the web, so I was blocked.

So it wasn't that it was about me that got me upset.  It was the action
itself.  It's totally out of bounds for newsgroup ethics, even given all
the usual flamewars that go on.

And still, you lack the ability to put yourself in Janice's shoes and
imagine that *perhaps she felt the same way you did when you accused
her of being her own attacker*.

I completely understand and empathize with Janice's perspective, and
your actions had nothing to do with it.  I also understand Kris's
perspective, and that's why I tried to relate the two to Janice.  By the
way, I've also been publically accused of making an anonymous attack
before, and I responded calmly.  I can provide an archival reference for
that too.

I'm not trying to toot my own horn, but to show that your portrayal of
my motives and character is completely wrong.

-Jeff

Nov 24 2007
"David B. Held" <dheld codelogicconsulting.com> writes:
Jeff Nowakowski wrote:
David B. Held wrote:
No matter how wrong you think I was, you have no excuse for claiming
my actions were worse.

You crossed the line from debate to taking an underhanded action.

From my perspective, the thread had left the realm of "debate" long
before I joined it.  And as far as I'm concerned, taking something as
dirty as an anonymous post and accusing the victim of being the
perpetrator is as underhanded as it gets (in a way analogous to blaming
rape victims, though I don't want to trivialize the issue of rape).  So
I didn't think I was muddying the waters any more than they already were.

[...]
You seem to be coming at this from a Tango vs Phobos angle, to the point
that you think I'm attacking Janice from the Tango side.

This isn't about Tango or Phobos at all, except to the extent that
comments about those libraries happened to be at the beginning of the
thread.  This is about playing dirty tricks with anonymity (which is the
double-edged sword of the internet).

[...]
You're exaggerating my position by saying "it could only have been".
Personally, my Occam's razor point of view is that the post was made
earnestly by somebody who chose to be anonymous.  I don't see it as an
attack against Janice at all -- if the very same post was made by a
regular, you would have no problem with it.

Right, because the poster would obviously not be afraid of putting their
name on the idea.  The fact that it was *anonymous* is what tips me off
that it isn't sincere...and if we look at folks who are not always
sincere...

The "phango phangowant.com" identity is no worse than an "I <heart>
New York" t-shirt. My "hmm" view is that *maybe* it was Janice.

I think it's ridiculous, because if that were an honest sentiment, you
wouldn't be afraid to put your name on it.  You generally don't wear
shirts with your name on them, but you regularly put your name on NG
posts, so I don't buy the analogy.

Now you claim that this is stupid.  Your view, that this was an attack
against Janice, I find just as unreasonable as you find mine.  Asking
for a fork of Tango that many might find appealing would be a really bad
idea from Tango's perspective, one that nobody pro-Tango would ask for
even as a false flag attack.

It would make the perfect setup for an accusation of sock puppetry to
discredit someone you disagree with and don't like.

Are you willing to admit to being wrong?  Ask Walter to check the logs
of the web forum.  The date of the post was Sat, 17 Nov 2007 17:23:45
-0500.  Find the IP address associated with that post and I bet you'll
find the same IP belongs to a regular poster, either via the news server
or via the web interface.

Oh, it seems almost certain that phango  is a regular poster.  I think
it would be great if we knew who it was, and I wish we tried to do that
before this thread went anywhere.  I wish Walter had a policy of outing
any anonymous posters, but he's a busy man and doesn't have the time for
such petty things.

[...]
For the record, your outing is the 4th time I have uncovered an
anonymous attacker.  I find the practice despicable, to the point that
the previous three times all involved an anonymous person attacking
people I personally disliked.  I'll provide archive references if you
wish.  I checked the original phango ... post and only saw that it came
from the web, so I was blocked.

So it wasn't that it was about me that got me upset.  It was the action
itself.  It's totally out of bounds for newsgroup ethics, even given all
the usual flamewars that go on.

If you find it so despicable, why did you think it was ok to point fingers?

[...]
I'm not trying to toot my own horn, but to show that your portrayal of
my motives and character is completely wrong.

I'm willing to agree with that, and I think the context you provide is
very helpful.  I'm sorry I resorted to posting anonymously against you,
and I won't do it again (for the obvious reason that I think one
demonstration is well more than enough).  I do find it incongruent that
you seem to be so opposed to anonymous posting, but were willing to
point fingers anyway; but I think we can agree that it's an ugly
practice that ought not to be tolerated.

Dave

Nov 25 2007
Regan Heath <regan netmail.co.nz> writes:
Jeff Nowakowski wrote:
By the way, the charge that one of the posts following yours was a sock
puppet was legitimate.  It was the first thing that crossed my mind.
Doesn't mean you did it, but it's a valid suspicion.

I prefer to assume the best of people, it generally turns out to be true
and it helps avoid things like this from happening.

I would like to point out that there is a difference between thinking
something might be the case and posting your suspician where it can be
taken the wrong way (as an accusation) as I'm about to show...

I've read Kris's explanation of what happened and I have formed my own
thoughts/opinions as to his motives but I'm certainly not going to post
them here.

Regan

Nov 19 2007
Jeff Nowakowski <jeff dilacero.org> writes:
Regan Heath wrote:

I would like to point out that there is a difference between thinking
something might be the case and posting your suspician where it can be
taken the wrong way (as an accusation)

I agree, and that was my point.  Calling somebody a sock puppet in
public, while a legitimate *suspicion*, is wrong if it's only based on
superficial evidence.  Same goes for calling somebody's design decisions

-Jeff

Nov 19 2007
Tom S <h3r3tic remove.mat.uni.torun.pl> writes:
Janice Caron wrote:
(...) the /decision/ to ignore the
style guide was petty. Note that the criticism was of the decision,
not the people making it. And actually, I do that to deliberately go
against the style guide was somewhat petty. (...)

And you realize that by stating that the decision was amateurish, you
put yourself above the ones who made it? Thus, being a newbie, accused
the Tango team of being amateurish.

Tango is seen by most of its users as a replacement for Phobos, so it
doesn't have to be compatible with it, or use its naming conventions.
What Walter states in the 'official style guide' has to be taken with a
grain of salt. With all due respect, Walter is a single programmer as
well, not an oracle or a religious guru whose words have to be followed
exactly. Someone creates another lib for D - they may use whatever they
like. I recommend a shock therapy - looking at this code:
http://dsource.org/projects/scrapple/browser/trunk/tools/tools ;)

Anyway, as far as I remember, there was a deeper reason for having
distinct casing conventions for module and package names. /* This might
have been even before Tango (possibly in Mango) */ If lowercase was used
for both module and package names, you could not have a module with the
same (logical) name as a package.
About two or three years ago, I still used alllowercase for modules and
packages and ran into this problem a few times. I took the idea of using
MixedCase for module names from Kris. And it works very well. For
instance, I have a module 'OpenGL' in my code and a package 'opengl',
which exist in the same directory. opengl/*.d are implementations of
specific components of the OpenGL module. Had I used lowercase for
everything, both would be just 'opengl' and 'opengl.foo' would be a
conflict between a module in the 'opengl' package and a symbol in the
'opengl' module. See? A practical reason. Not to mention that
MixedCaseNames are easier to read than mixedcasenames.

On the other hand, there is no practical reason not to use MixedCase,
except the dubious case sensitivity issue of certain file systems ( I
use Windows and Linux / Solaris with D interchangeably and don't
experience said problems with MixedCase ).

If all it boils down to is personal preference and this is the main
reason of this flamewar... Excuse me, but nothing is more amateurish or
petty than that.

But since we're all enjoying the party of expressing our preferences...
I think that Tango's style is much better than the official guide, plus
I consider the guide flawed for ever suggesting UPPER_CASE_NAMES for
consts and enum values.

I also know for a fact, that many Tango users simply agree with its
design conventions, but find this entire discussion too silly and
irrelevant to participate in.

--
Tomasz Stachowiak
http://h3.team0xf.com/
h3/h3r3tic on #D freenode

Nov 18 2007
Tom S schrieb:
I also know for a fact, that many Tango users simply agree with its
design conventions, but find this entire discussion too silly and
irrelevant to participate in.

very well said tom

Frank

Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Kris wrote:
On 11/18/07, Kris <foo bar.com> wrote:
Dash it all. This is what I meant to write:

Phew! OK, I'm happy now. :-)
Thanks for clearing things up.

previously? I'll list them here for your convenience:

Seriously - Tango's stylistic issues are a big turn-off. Tango
fix them.

Please suggest an alternate formatting style and explain why it is better.

So Tango should really follow convention used by Walter in Phobos.

What if that convention proves insufficient for a library that is much
larger than Phobos?

It seems to me the burden should be on the Tango developers here, as the
newcomers, to explain to the world why the Tango convention is better,
rather than asking everyone else to justify why the pre-existing and

The Tango convention may be better for all I know, but I don't recall
hearing any compelling arguments in favor of why a change was needed.
If they were given and I just forgot them, then sorry.  I do recall
hearing unsubstantiated claims like "we found it was better" or "we
found the phobos convention to be insufficient" etc, but I don't recall
any actual good arguments that made me go "hmm ah, yes indeed".  Anyway
given that this topic continues to come up, it seems it would be a good
idea to collect all these reasons on a page over at tango.dsource.org.

--bb

Nov 18 2007
"Kris" <foo bar.com> writes:
"Bill Baxter" <dnewsgroup billbaxter.com> wrote

It seems to me the burden should be on the Tango developers here, as the
newcomers, to explain to the world why the Tango convention is better,
rather than asking everyone else to justify why the pre-existing and

Newcomers? Tango has been in development for almost 4 years, Bill. As for
conventions, it is my opinion that Tango doesn't have to justify the choices
made to anyone at this point. It's water under the bridge, just as the some
minor stylistic choices in phobos or D are now just water under the bridge.
As Walter already noted: Tango can use whatever style it wants.

moving along, I believe Sean's two questions (posted much earlier, which I
repeated on his behalf) were intended to elicit some positive feedback?

Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Kris wrote:
"Bill Baxter" <dnewsgroup billbaxter.com> wrote

It seems to me the burden should be on the Tango developers here, as the
newcomers, to explain to the world why the Tango convention is better,
rather than asking everyone else to justify why the pre-existing and

Newcomers? Tango has been in development for almost 4 years, Bill.

Yes, newcomers.  4 is less than 10.  That makes you newcomers relative
to phobos and the D style guide Walter has had posted up on
digitalmars.com that I presume is about as old as phobos.  That's all I
meant.

As for
conventions, it is my opinion that Tango doesn't have to justify the choices
made to anyone at this point. It's water under the bridge, just as the some
minor stylistic choices in phobos or D are now just water under the bridge.
As Walter already noted: Tango can use whatever style it wants.

Yes, Tango can use whatever style it wants, but obviously some choices
are better than others.  Nobody here is arguing that RanDoM CaSE for
module names would be a good thing, for instance.

moving along, I believe Sean's two questions (posted much earlier, which I
repeated on his behalf) were intended to elicit some positive feedback?

Yes.  I do wish certain parties would stick to the issues here.
Elsewhere in this thread some constructive points have been mentioned
pro and con lowercase module names.  I'll try to summarize without
injecting any biases:

In favor of lower case module names:
* It's a de-facto standard established by Walter
* OS Case sensitivity (or lack thereof)
* Redundancy in fully qualified names (package.ClassName.ClassName)

In favor of mixed case module names:
* Easier to remember module names when there's a one-to-one
correspondence with the class name.

--bb

Nov 18 2007
"Kris" <foo bar.com> writes:
"Bill Baxter" <dnewsgroup billbaxter.com>
Yes, newcomers.  4 is less than 10.  That makes you newcomers relative to
phobos and the D style guide Walter has had posted up on digitalmars.com
that I presume is about as old as phobos.  That's all I meant.

Oh that's easy to answer: we understood those to be guidelines only, and
felt that some minor details would need adjustment for our purposes. I
recall there was some technical difficulty regarding module names at the
time, but don't recall the specifics right now.

As for conventions, it is my opinion that Tango doesn't have to justify
the choices made to anyone at this point. It's water under the bridge,
just as the some minor stylistic choices in phobos or D are now just
water under the bridge. As Walter already noted: Tango can use whatever
style it wants.

Yes, Tango can use whatever style it wants, but obviously some choices are
better than others.  Nobody here is arguing that RanDoM CaSE for module
names would be a good thing, for instance.

Are you sure about that? :p

moving along, I believe Sean's two questions (posted much earlier, which
I repeated on his behalf) were intended to elicit some positive feedback?

Yes.  I do wish certain parties would stick to the issues here.
Elsewhere in this thread some constructive points have been mentioned pro
and con lowercase module names.  I'll try to summarize without injecting
any biases:

The effort is appreciated Bill, but realistically, Tango is not going to
change in this manner. As has been noted several times prior, one persons
stylistic meat is another's stylistic poison. There's no resolving that, and
we have no wish to attempt to. It's a dilemma, and the kind of religious
distinction that people would kill each other for in the past (and still do,
actually).

Certain individuals cannot see past that, and find bitter resentment in the
use of the shift-key here and there. Yet, the same folks are staying quiet
about toString() and so on. Let's face it, function/method names are used
more often than import names for example. So, I feel (a) this issue is daft
and/or myopic to begin with (b) there's nothing that could be done without
upsetting the stylistic preferences of others (c) there's little value in
paying heed to the opinion of those who "refuse" to use a library simply
because it doesn't adhere to one tiny stylistic notion, which couldn't in
practice be changed anyway. Better for us to listen to people who are
willing to be a little flexible.

Cheers;

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Kris wrote:
"Bill Baxter" <dnewsgroup billbaxter.com>
Yes, newcomers.  4 is less than 10.  That makes you newcomers relative to
phobos and the D style guide Walter has had posted up on digitalmars.com
that I presume is about as old as phobos.  That's all I meant.

Oh that's easy to answer: we understood those to be guidelines only, and
felt that some minor details would need adjustment for our purposes. I
recall there was some technical difficulty regarding module names at the
time, but don't recall the specifics right now.

As for conventions, it is my opinion that Tango doesn't have to justify
the choices made to anyone at this point. It's water under the bridge,
just as the some minor stylistic choices in phobos or D are now just
water under the bridge. As Walter already noted: Tango can use whatever
style it wants.

Yes, Tango can use whatever style it wants, but obviously some choices are
better than others.  Nobody here is arguing that RanDoM CaSE for module
names would be a good thing, for instance.

Are you sure about that? :p

moving along, I believe Sean's two questions (posted much earlier, which
I repeated on his behalf) were intended to elicit some positive feedback?

Yes.  I do wish certain parties would stick to the issues here.
Elsewhere in this thread some constructive points have been mentioned pro
and con lowercase module names.  I'll try to summarize without injecting
any biases:

The effort is appreciated Bill, but realistically, Tango is not going to
change in this manner. As has been noted several times prior, one persons
stylistic meat is another's stylistic poison. There's no resolving that, and
we have no wish to attempt to. It's a dilemma, and the kind of religious
distinction that people would kill each other for in the past (and still do,
actually).

Certain individuals cannot see past that, and find bitter resentment in the
use of the shift-key here and there. Yet, the same folks are staying quiet
about toString() and so on. Let's face it, function/method names are used
more often than import names for example. So, I feel (a) this issue is daft
and/or myopic to begin with (b) there's nothing that could be done without
upsetting the stylistic preferences of others (c) there's little value in
paying heed to the opinion of those who "refuse" to use a library simply
because it doesn't adhere to one tiny stylistic notion, which couldn't in
practice be changed anyway. Better for us to listen to people who are
willing to be a little flexible.

Cheers;

Why aren't you listening? it's not "simply stylistic"!

A...

Nov 18 2007
"Kris" <foo bar.com> writes:
"Alix Pexton"  wrote in message
Why aren't you listening? it's not "simply stylistic"!

Then I suggest you hop onto IRC and explain it better, please Alix, because
I'm honestly not getting your point ,and neither are others :(

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Kris wrote:
"Alix Pexton"  wrote in message
Why aren't you listening? it's not "simply stylistic"!

Then I suggest you hop onto IRC and explain it better, please Alix, because
I'm honestly not getting your point ,and neither are others :(

I think it would be better if you just answered your critics concerns openly
here where it is on record.

Time and again you have been invited to explain exactly why you chose to adopt
a new convention, what you believe the benefits are and enter a mature debate
of its merits and flaws, but we hear again and again "sorry, don't get it",
"try irc/our forum" and "well, you have a choice", and regretfully perhaps,
personal attacks on the motives of other users.

A...

Nov 18 2007
"Kris" <foo bar.com> writes:
Er, why don't you give us some examples, Alix? That's what we'd be asking
you for on IRC.

"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote in message
news:fhqs6k$bi2$1 digitalmars.com...
Kris wrote:
"Alix Pexton"  wrote in message
Why aren't you listening? it's not "simply stylistic"!

Then I suggest you hop onto IRC and explain it better, please Alix,
because I'm honestly not getting your point ,and neither are others :(

I think it would be better if you just answered your critics concerns
openly here where it is on record.

Time and again you have been invited to explain exactly why you chose to
adopt a new convention, what you believe the benefits are and enter a
mature debate of its merits and flaws, but we hear again and again "sorry,
don't get it", "try irc/our forum" and "well, you have a choice", and
regretfully perhaps, personal attacks on the motives of other users.

A...


Nov 18 2007
Christopher Wright <dhasenan gmail.com> writes:
Kris wrote:
Er, why don't you give us some examples, Alix? That's what we'd be asking
you for on IRC.

I'll bite. Why do you use mixedCamelCase for both member variables and
methods, and the same style for both private and public fields? This is
a stylistic topic that almost no one touches, probably because Tango
conventions seem to be lifted wholesale from Java and that's how Java
does it, but I find it a bit confusing and annoying when I'm reading
someone else's code.

Just curious.

I would at least prefix private variables with an underscore, if I were
setting the style. But if I want to muck about with Tango's internals, I
can suck it up.

"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote in message
news:fhqs6k$bi2$1 digitalmars.com...
Kris wrote:
"Alix Pexton"  wrote in message
Why aren't you listening? it's not "simply stylistic"!

Then I suggest you hop onto IRC and explain it better, please Alix,
because I'm honestly not getting your point ,and neither are others :(

I think it would be better if you just answered your critics concerns
openly here where it is on record.

Time and again you have been invited to explain exactly why you chose to
adopt a new convention, what you believe the benefits are and enter a
mature debate of its merits and flaws, but we hear again and again "sorry,
don't get it", "try irc/our forum" and "well, you have a choice", and
regretfully perhaps, personal attacks on the motives of other users.

A...


Nov 19 2007
Sean Kelly <sean f4.ca> writes:
Christopher Wright wrote:
Kris wrote:
Er, why don't you give us some examples, Alix? That's what we'd be

I'll bite. Why do you use mixedCamelCase for both member variables and
methods, and the same style for both private and public fields?

This is what the D style guide suggests.

This is
a stylistic topic that almost no one touches, probably because Tango
conventions seem to be lifted wholesale from Java and that's how Java
does it, but I find it a bit confusing and annoying when I'm reading
someone else's code.

For member variables, I personally prefix the non-public variables with
"m_" and non-public static member variables with "sm_".

I would at least prefix private variables with an underscore, if I were
setting the style. But if I want to muck about with Tango's internals, I
can suck it up.

I avoid leading underscore prefixes because they are reserved for C/C++
standard library use.  It's easiest to just avoid this format entirely
than risk the rare chance of a collision.

Sean

Nov 19 2007
Christopher Wright <dhasenan gmail.com> writes:
Sean Kelly wrote:
Christopher Wright wrote:
Kris wrote:
Er, why don't you give us some examples, Alix? That's what we'd be

I'll bite. Why do you use mixedCamelCase for both member variables and
methods, and the same style for both private and public fields?

This is what the D style guide suggests.

> This is
a stylistic topic that almost no one touches, probably because Tango
conventions seem to be lifted wholesale from Java and that's how Java
does it, but I find it a bit confusing and annoying when I'm reading
someone else's code.

For member variables, I personally prefix the non-public variables with
"m_" and non-public static member variables with "sm_".

I would at least prefix private variables with an underscore, if I
were setting the style. But if I want to muck about with Tango's
internals, I can suck it up.

I avoid leading underscore prefixes because they are reserved for C/C++
standard library use.  It's easiest to just avoid this format entirely
than risk the rare chance of a collision.

Sean

Groovy, thanks.

Nov 19 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Sean Kelly wrote:
Christopher Wright wrote:
> This is
a stylistic topic that almost no one touches, probably because Tango
conventions seem to be lifted wholesale from Java and that's how Java
does it, but I find it a bit confusing and annoying when I'm reading
someone else's code.

For member variables, I personally prefix the non-public variables with
"m_" and non-public static member variables with "sm_".

I would at least prefix private variables with an underscore, if I
were setting the style. But if I want to muck about with Tango's
internals, I can suck it up.

I avoid leading underscore prefixes because they are reserved for C/C++
standard library use.  It's easiest to just avoid this format entirely
than risk the rare chance of a collision.

I used to be a big 'm_' guy, but I recently started using trailing
underscores for private members.  Started doing that after porting
OpenMesh from C++, which uses that convention.  I was amazed at how much
more readable all the code looked with the garbage characters appended
as a suffix rather than a prefix.  Apparently this style is used some by
Boost as well as the ACE library.  Trying to find out where it came from
I ran across a quote from someone saying (in 2004) that it's "the de
facto cool kids' C++ style".  :-)
http://discuss.joelonsoftware.com/default.asp?joel.3.49438.14

I asked the original OpenMesh devs about it and one responded that he
used to be in typography before computer science, and from what he
learned doing that about how humans read he could say the suffix version
is definitely going to be more readable.

Just some food for thought.

--bb

Nov 19 2007
Robert Fraser <fraserofthenight gmail.com> writes:
Bill Baxter Wrote:

Sean Kelly wrote:
Christopher Wright wrote:
> This is
a stylistic topic that almost no one touches, probably because Tango
conventions seem to be lifted wholesale from Java and that's how Java
does it, but I find it a bit confusing and annoying when I'm reading
someone else's code.

For member variables, I personally prefix the non-public variables with
"m_" and non-public static member variables with "sm_".

I would at least prefix private variables with an underscore, if I
were setting the style. But if I want to muck about with Tango's
internals, I can suck it up.

I avoid leading underscore prefixes because they are reserved for C/C++
standard library use.  It's easiest to just avoid this format entirely
than risk the rare chance of a collision.

I used to be a big 'm_' guy, but I recently started using trailing
underscores for private members.  Started doing that after porting
OpenMesh from C++, which uses that convention.  I was amazed at how much
more readable all the code looked with the garbage characters appended
as a suffix rather than a prefix.  Apparently this style is used some by
Boost as well as the ACE library.  Trying to find out where it came from
I ran across a quote from someone saying (in 2004) that it's "the de
facto cool kids' C++ style".  :-)
http://discuss.joelonsoftware.com/default.asp?joel.3.49438.14

I asked the original OpenMesh devs about it and one responded that he
used to be in typography before computer science, and from what he
learned doing that about how humans read he could say the suffix version
is definitely going to be more readable.

Just some food for thought.

--bb

Why do private members need to be differentiated typographically?

Nov 19 2007
Christopher Wright <dhasenan gmail.com> writes:
Robert Fraser wrote:
Bill Baxter Wrote:

Sean Kelly wrote:
Christopher Wright wrote:
> This is
a stylistic topic that almost no one touches, probably because Tango
conventions seem to be lifted wholesale from Java and that's how Java
does it, but I find it a bit confusing and annoying when I'm reading
someone else's code.

For member variables, I personally prefix the non-public variables with
"m_" and non-public static member variables with "sm_".

I would at least prefix private variables with an underscore, if I
were setting the style. But if I want to muck about with Tango's
internals, I can suck it up.

I avoid leading underscore prefixes because they are reserved for C/C++
standard library use.  It's easiest to just avoid this format entirely
than risk the rare chance of a collision.

I used to be a big 'm_' guy, but I recently started using trailing
underscores for private members.  Started doing that after porting
OpenMesh from C++, which uses that convention.  I was amazed at how much
more readable all the code looked with the garbage characters appended
as a suffix rather than a prefix.  Apparently this style is used some by
Boost as well as the ACE library.  Trying to find out where it came from
I ran across a quote from someone saying (in 2004) that it's "the de
facto cool kids' C++ style".  :-)
http://discuss.joelonsoftware.com/default.asp?joel.3.49438.14

I asked the original OpenMesh devs about it and one responded that he
used to be in typography before computer science, and from what he
learned doing that about how humans read he could say the suffix version
is definitely going to be more readable.

Just some food for thought.

--bb

Why do private members need to be differentiated typographically?

More that they should be differentiated from locals. It's a reminder
that you should be careful to modify the variable, and it means you
don't have to read as much or search as much to find the scope of a
variable.

The extremes are Java and Hungarian notation. Hungarian, from the few
examples I've seen, tends to be complex and opaque. Java style only
takes a couple extra seconds to parse, but that's multiplied by the
number of times you have to read the code. Using a prefix and
associating it with a simple property is relatively clear and marks out
those variables.

The question is, does it actually improve readability to any appreciable
degree?

Nov 19 2007
Sean Kelly <sean f4.ca> writes:
Robert Fraser wrote:

Why do private members need to be differentiated typographically?

It can increase the clarity of member functions, as a variable prefix
avoids the need to place constraints on function parameter names.  Also,
I find it useful for operations on member data vs. local data to be
obvious by inspection.  I feel that doing so reduces the chance of bugs

Sean

Nov 19 2007
Walter Bright <newshound1 digitalmars.com> writes:
Robert Fraser wrote:
Why do private members need to be differentiated typographically?

I kinda wonder the same thing. Private members are limited in scope,
and the more limited in scope a name is, the less important it is to

Nov 20 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Walter Bright wrote:
Robert Fraser wrote:
Why do private members need to be differentiated typographically?

I kinda wonder the same thing. Private members are limited in scope, and
the more limited in scope a name is, the less important it is to follow
a special naming convention.

Yes they're limited in scope, but that scope can be pretty much an
entire file.  If the scope of a class is bigger than one or two
screenfuls, then flagging members can be helpful.  If it's a tiny class
where you can see the whole thing on one page, then I agree,
differentiating members from parameters and locals is less useful.

--bb

Nov 20 2007
Sean Kelly <sean f4.ca> writes:
Walter Bright wrote:
Robert Fraser wrote:
Why do private members need to be differentiated typographically?

I kinda wonder the same thing. Private members are limited in scope, and
the more limited in scope a name is, the less important it is to follow
a special naming convention.

Class implementations occupy more than one screen's worth of text, while
functions (typically) do not.  Labeling member data indicates at a
glance that the data is at class scope and not module or global scope.
I find that doing so serves as a useful indicator for determining
function side-effects and indicating whether mutexes and such are
required.  I label static members separately for the same reason.

Sean

Nov 20 2007
=?ISO-8859-1?Q?Julio_C=E9sar_Carrascal_Urquijo?= writes:
Walter Bright wrote:
Robert Fraser wrote:
Why do private members need to be differentiated typographically?

I kinda wonder the same thing. Private members are limited in scope, and
the more limited in scope a name is, the less important it is to follow
a special naming convention.

I'm in the m_ camp but I use it to flag the intent not the scope. I want
a visual clue when I'm modifying the state of the object because I'm
terrible at following state changes in my head (Specially with events

For static members I use g_ because they're simply global variables.

Stating the scope is (IMHO) a pretty lame reason to add a prefix. The
compiler is better at that than I am. It's the same difference between
Apps Hungarian and Systems Hungarian: One it's quite useful the other is
just silly.

--
Julio César Carrascal Urquijo
http://jcesar.artelogico.com/

Nov 20 2007
Sean Kelly <sean f4.ca> writes:
Bill Baxter wrote:

I used to be a big 'm_' guy, but I recently started using trailing
underscores for private members.  Started doing that after porting
OpenMesh from C++, which uses that convention.  I was amazed at how much
more readable all the code looked with the garbage characters appended
as a suffix rather than a prefix.  Apparently this style is used some by
Boost as well as the ACE library.  Trying to find out where it came from
I ran across a quote from someone saying (in 2004) that it's "the de
facto cool kids' C++ style".  :-)
http://discuss.joelonsoftware.com/default.asp?joel.3.49438.14

I asked the original OpenMesh devs about it and one responded that he
used to be in typography before computer science, and from what he
learned doing that about how humans read he could say the suffix version
is definitely going to be more readable.

I prefer the "m_" prefix specifically because it is more visible than a
suffix.  Perhaps I simply haven't spent enough time with the suffix
form, but I feel that it's easier to miss a trailing underscore.  I am
also not sure of how I would indicate static member data with a
suffix... perhaps myVar_M and myVar_SM?

Sean

Nov 19 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Sean Kelly wrote:
Bill Baxter wrote:
I used to be a big 'm_' guy, but I recently started using trailing
underscores for private members.  Started doing that after porting
OpenMesh from C++, which uses that convention.  I was amazed at how
much more readable all the code looked with the garbage characters
appended as a suffix rather than a prefix.  Apparently this style is
used some by Boost as well as the ACE library.  Trying to find out
where it came from I ran across a quote from someone saying (in 2004)
that it's "the de facto cool kids' C++ style".  :-)
http://discuss.joelonsoftware.com/default.asp?joel.3.49438.14

I asked the original OpenMesh devs about it and one responded that he
used to be in typography before computer science, and from what he
learned doing that about how humans read he could say the suffix
version is definitely going to be more readable.

I prefer the "m_" prefix specifically because it is more visible than a
suffix.  Perhaps I simply haven't spent enough time with the suffix
form, but I feel that it's easier to miss a trailing underscore.

That's exactly why it's so great.  It feels like you're using regular
variables instead of ugly hungarian notation, but you still get the
benefit of the notation when you're confused or trying to figure out
what's what in a function.

I am also not sure of how I would indicate static member data with a
suffix... perhaps myVar_M and myVar_SM?

I guess.  I used to do the ms_ for static variables but never found
myself confused over whether a variable was static or not.  So I dropped
it.  I guess I just don't use static variables enough or do enough
multithreaded programming for it to be an important distinction.
If I wasn't clear the convention I was talking about is to use "foo_"
for private member vars.  So if I wanted to annotate statics, I'd
probably try "_s".

--bb

Nov 19 2007
Brian Hay <bhay construct3d.com> writes:
Bill Baxter wrote:
I used to be a big 'm_' guy, but I recently started using trailing
underscores for private members.  Started doing that after porting
OpenMesh from C++, which uses that convention.  I was amazed at how much
more readable all the code looked with the garbage characters appended
as a suffix rather than a prefix.

FWIW I've grown to appreciate the "my" prefix for member variables.
There's simply nothing more readable and by that I mean that the
ultimate test of code readability is being able to read it ALOUD and
have it make perfect sense. Reading "m" or "underscore" or "member" in
place of the former two just doesn't cut it for me.

:-)

Nov 19 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Kris wrote:
"Bill Baxter" <dnewsgroup billbaxter.com>
Yes, newcomers.  4 is less than 10.  That makes you newcomers relative to
phobos and the D style guide Walter has had posted up on digitalmars.com
that I presume is about as old as phobos.  That's all I meant.

Oh that's easy to answer: we understood those to be guidelines only,

Yes, I agree.  But if the established guidelines work, you might as well
use them...

and
felt that some minor details would need adjustment for our purposes. I
recall there was some technical difficulty regarding module names at the
time, but don't recall the specifics right now.

.. and if they don't work out then you should have some good reasons
why.  I just want to know what those reasons are so I can decide if I
agree or not.  And I think that's what others are really after too, even
if they prefix their requests with "You silly tango developers! your
keyboard was a hamster and your library smells of elderberries!".

As for conventions, it is my opinion that Tango doesn't have to justify
the choices made to anyone at this point. It's water under the bridge,
just as the some minor stylistic choices in phobos or D are now just
water under the bridge. As Walter already noted: Tango can use whatever
style it wants.

Yes, Tango can use whatever style it wants, but obviously some choices are
better than others.  Nobody here is arguing that RanDoM CaSE for module
names would be a good thing, for instance.

Are you sure about that? :p

Well maybe downs would be if he were participating. :-)

Personally, I'd really like to see Tango catch on in a big way.  The
more of a standard it becomes the more pressure there is on Walter to
make sure DMD integrates with it well, and the less library writers have
to worry about depending on it in their code.

That being the case, I think every nay-sayer needs to have their
but I don't recall right now -- and besides your concern is trivial"
doesn't convince anyone.

Here's another reason to spend some time convincing people to use Tango.
My dad is in a much more sales-oriented field than I am and he told me
one time about how there are different kinds of customers.  Some
customers walk in and will take anything you try to sell them.  But
they'll also just as happily go down the street next week to the other
and require a lot of hand holding -- they're harder to get an initial
sale out of, but once you've convinced them, often they're yours for
life.  They'll even go out of their way to convince *other* people to go
to your shop, and ignore things like price differences, just because
you've earned their trust.

So, I think Sean's doing a good job building up that kind of trust for
Tango.  When I read his posts I think, "ok these guys have thought
through these things, I see the reasoning, and I kind of agree with it.
Hmm, maybe I can trust the other decisions Sean has been a part of as
well."

moving along, I believe Sean's two questions (posted much earlier, which
I repeated on his behalf) were intended to elicit some positive feedback?

Yes.  I do wish certain parties would stick to the issues here.
Elsewhere in this thread some constructive points have been mentioned pro
and con lowercase module names.  I'll try to summarize without injecting
any biases:

The effort is appreciated Bill, but realistically, Tango is not going to
change in this manner.

why to change, then when you get an answer you say "actually we don't
care what you answer, Tango's not changing".

Well, I'd still like to suss out what the best practices are for D
coding so that we can all use them and recommend them unequivocally and
with solid reasons to all D coders.  Those practices may precisely be
the ones used in Tango already.  I hope so.

As has been noted several times prior, one persons
stylistic meat is another's stylistic poison.

The point here that you keep ignoring is that there's more involved than
just style or personal preference.  The tidbit about module/package name
conflicts that Tom S brings up is another good objective reason for
using Tango's convention.

--bb

Nov 18 2007
"Kris" <foo bar.com> writes:
"Bill Baxter" <dnewsgroup billbaxter.com> wrote ...
felt that some minor details would need adjustment for our purposes. I
recall there was some technical difficulty regarding module names at the
time, but don't recall the specifics right now.

See the post from h3 ...

.. and if they don't work out then you should have some good reasons why.
I just want to know what those reasons are so I can decide if I agree or
not.  And I think that's what others are really after too, even if they
prefix their requests with "You silly tango developers! your keyboard was
a hamster and your library smells of elderberries!".

Tired of it, Bill. Some people will always latch onto something because
that's just the way they are.

Here's another reason to spend some time convincing people to use Tango.
My dad is in a much more sales-oriented field than I am and he told me one
time about how there are different kinds of customers.  Some customers
walk in and will take anything you try to sell them.  But they'll also
just as happily go down the street next week to the other guy and buy from
him instead.  Other customers ask a lot of questions and require a lot of
hand holding -- they're harder to get an initial sale out of, but once
you've convinced them, often they're yours for life.  They'll even go out
of their way to convince *other* people to go to your shop, and ignore
things like price differences, just because you've earned their trust.

There's perhaps also a case where some people are just not worth the
trouble? Strangely enough, some people would prefer to have no choice, and
for Tango to die a horrible death. There's little point in trying to reason
with such people. I'm sure you'd agree?

So, I think Sean's doing a good job building up that kind of trust for
Tango.  When I read his posts I think, "ok these guys have thought through
these things, I see the reasoning, and I kind of agree with it. Hmm, maybe
I can trust the other decisions Sean has been a part of as well."

Good.

The effort is appreciated Bill, but realistically, Tango is not going to
change in this manner.

to change, then when you get an answer you say "actually we don't care
what you answer, Tango's not changing".

For what is being asked and the reasons given, no. I explained why also (for
the fourth time), but you chopped that part off :)

Well, I'd still like to suss out what the best practices are for D coding
so that we can all use them and recommend them unequivocally and with
solid reasons to all D coders.  Those practices may precisely be the ones
used in Tango already.  I hope so.

That's great! I certainly wish you well and would be mor than happy to
participate. I'm not interested in using Tango as some kind of whipping-boy
for this exercise though :)

As has been noted several times prior, one persons
stylistic meat is another's stylistic poison.

The point here that you keep ignoring is that there's more involved than
just style or personal preference.

Please spell them out so that it's clear?

The tidbit about module/package name conflicts that Tom S brings up is
another good objective reason for using Tango's convention.

That's one of the reasons I noted at the beginning, but didn't recall the
specifics of.

Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Kris wrote:

Here's another reason to spend some time convincing people to use Tango.
My dad is in a much more sales-oriented field than I am and he told me one
time about how there are different kinds of customers.  Some customers
walk in and will take anything you try to sell them.  But they'll also
just as happily go down the street next week to the other guy and buy from
him instead.  Other customers ask a lot of questions and require a lot of
hand holding -- they're harder to get an initial sale out of, but once
you've convinced them, often they're yours for life.  They'll even go out
of their way to convince *other* people to go to your shop, and ignore
things like price differences, just because you've earned their trust.

There's perhaps also a case where some people are just not worth the
trouble? Strangely enough, some people would prefer to have no choice, and
for Tango to die a horrible death. There's little point in trying to reason
with such people. I'm sure you'd agree?

Yep.  There are those.  But every cogent, well-reasoned argument you
make in the face of blustering just makes you and Tango look better to
everyone watching from the sidelines.

--bb

Nov 18 2007
"Kris" <foo bar.com> writes:
Reply to Bill:

"Bill Baxter" <dnewsgroup billbaxter.com>

Bill, you may not have seen this response to one of your questions? I'd like
to hear what it is that I'm supposed to be ignoring, so am copying it here
again:

The point here that you keep ignoring is that there's more involved than
just style or personal preference.

Please spell them out so that it's clear?

Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Kris wrote:

"Bill Baxter" <dnewsgroup billbaxter.com>

Bill, you may not have seen this response to one of your questions? I'd like
to hear what it is that I'm supposed to be ignoring, so am copying it here
again:

The point here that you keep ignoring is that there's more involved than
just style or personal preference.

Please spell them out so that it's clear?

Look for a thread called "Module naming conventions".
There I tried to list the arguments for and against the two conventions
that have nothing to do with style or personal preference.

I listed all the arguments that I was able to pick out from the Phango
thread and solicited for any further arguments if there were any.

--bb

Nov 18 2007
"Kris" <foo bar.com> writes:
Hrm ... I did look and, apart from some very recent ones from Sean, they
seem to be style related?

"Bill Baxter" <dnewsgroup billbaxter.com> wrote in message
news:fhra2o$rbf$1 digitalmars.com...
Kris wrote:

"Bill Baxter" <dnewsgroup billbaxter.com>

Bill, you may not have seen this response to one of your questions? I'd
like to hear what it is that I'm supposed to be ignoring, so am copying
it here again:

The point here that you keep ignoring is that there's more involved than
just style or personal preference.

Please spell them out so that it's clear?

Look for a thread called "Module naming conventions".
There I tried to list the arguments for and against the two conventions
that have nothing to do with style or personal preference.

I listed all the arguments that I was able to pick out from the Phango
thread and solicited for any further arguments if there were any.

--bb


Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Kris wrote:
Hrm ... I did look and, apart from some very recent ones from Sean, they
seem to be style related?

So would you like for me to spell it out for you line by line, then?

--bb

"Bill Baxter" <dnewsgroup billbaxter.com> wrote in message
news:fhra2o$rbf$1 digitalmars.com...
Kris wrote:

"Bill Baxter" <dnewsgroup billbaxter.com>

Bill, you may not have seen this response to one of your questions? I'd
like to hear what it is that I'm supposed to be ignoring, so am copying
it here again:

The point here that you keep ignoring is that there's more involved than
just style or personal preference.

Please spell them out so that it's clear?

Look for a thread called "Module naming conventions".
There I tried to list the arguments for and against the two conventions
that have nothing to do with style or personal preference.

I listed all the arguments that I was able to pick out from the Phango
thread and solicited for any further arguments if there were any.

--bb


Nov 18 2007
"Kris" <foo bar.com> writes:
Please do, Bill. Frankly, I'm tired and weary, and it's entirely possible
that I've missed something really important. You'd be doing me a favour by
spelling it out:

- Kris

"Bill Baxter" <dnewsgroup billbaxter.com> wrote in message
news:fhrbsb$td7$1 digitalmars.com...
Kris wrote:
Hrm ... I did look and, apart from some very recent ones from Sean, they
seem to be style related?

So would you like for me to spell it out for you line by line, then?

--bb

"Bill Baxter" <dnewsgroup billbaxter.com> wrote in message
news:fhra2o$rbf$1 digitalmars.com...
Kris wrote:

"Bill Baxter" <dnewsgroup billbaxter.com>

Bill, you may not have seen this response to one of your questions? I'd
like to hear what it is that I'm supposed to be ignoring, so am copying
it here again:

The point here that you keep ignoring is that there's more involved
than just style or personal preference.

Please spell them out so that it's clear?

Look for a thread called "Module naming conventions".
There I tried to list the arguments for and against the two conventions
that have nothing to do with style or personal preference.

I listed all the arguments that I was able to pick out from the Phango
thread and solicited for any further arguments if there were any.

--bb


Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Kris wrote:
Please do, Bill. Frankly, I'm tired and weary, and it's entirely possible
that I've missed something really important. You'd be doing me a favour by
spelling it out:

- Kris

Ok.  Will do.  Maybe part of what you're not getting is that I'm trying
to be impartial here.  I want the lowercase defenders to spell out their
arguments just as much as I want Tango folks to.  I made the list, so
that everyone could see the actual arguments side by side, stripped of
rhetoric and judge for themselves which convention makes the most sense
for D.  I tried to characterize both sides best I could.

--bb

"Bill Baxter" <dnewsgroup billbaxter.com> wrote in message
news:fhrbsb$td7$1 digitalmars.com...
Kris wrote:
Hrm ... I did look and, apart from some very recent ones from Sean, they
seem to be style related?

So would you like for me to spell it out for you line by line, then?

--bb

"Bill Baxter" <dnewsgroup billbaxter.com> wrote in message
news:fhra2o$rbf$1 digitalmars.com...
Kris wrote:

"Bill Baxter" <dnewsgroup billbaxter.com>

Bill, you may not have seen this response to one of your questions? I'd
like to hear what it is that I'm supposed to be ignoring, so am copying
it here again:

The point here that you keep ignoring is that there's more involved
than just style or personal preference.

Please spell them out so that it's clear?

Look for a thread called "Module naming conventions".
There I tried to list the arguments for and against the two conventions
that have nothing to do with style or personal preference.

I listed all the arguments that I was able to pick out from the Phango
thread and solicited for any further arguments if there were any.

--bb


Nov 18 2007
"Kris" <foo bar.com> writes:
Thanks! I see your list, Bill, and I'll just keep my opinion to myself.
After all, you're just trying to figure out the right style for you, as you

- Kris

"Bill Baxter" <dnewsgroup billbaxter.com> wrote in message
news:fhrdfv$vfh$1 digitalmars.com...
Kris wrote:
Please do, Bill. Frankly, I'm tired and weary, and it's entirely possible
that I've missed something really important. You'd be doing me a favour
by spelling it out:

- Kris

Ok.  Will do.


Nov 18 2007
Don Clugston <dac nospam.com.au> writes:
Kris wrote:
"Bill Baxter" <dnewsgroup billbaxter.com>
Yes, newcomers.  4 is less than 10.  That makes you newcomers relative to
phobos and the D style guide Walter has had posted up on digitalmars.com
that I presume is about as old as phobos.  That's all I meant.

Oh that's easy to answer: we understood those to be guidelines only, and
felt that some minor details would need adjustment for our purposes. I
recall there was some technical difficulty regarding module names at the
time, but don't recall the specifics right now.

As for conventions, it is my opinion that Tango doesn't have to justify
the choices made to anyone at this point. It's water under the bridge,
just as the some minor stylistic choices in phobos or D are now just
water under the bridge. As Walter already noted: Tango can use whatever
style it wants.

Yes, Tango can use whatever style it wants, but obviously some choices are
better than others.  Nobody here is arguing that RanDoM CaSE for module
names would be a good thing, for instance.

Are you sure about that? :p

moving along, I believe Sean's two questions (posted much earlier, which
I repeated on his behalf) were intended to elicit some positive feedback?

Yes.  I do wish certain parties would stick to the issues here.
Elsewhere in this thread some constructive points have been mentioned pro
and con lowercase module names.  I'll try to summarize without injecting
any biases:

The effort is appreciated Bill, but realistically, Tango is not going to
change in this manner. As has been noted several times prior, one persons
stylistic meat is another's stylistic poison. There's no resolving that, and
we have no wish to attempt to. It's a dilemma, and the kind of religious
distinction that people would kill each other for in the past (and still do,
actually).

Certain individuals cannot see past that, and find bitter resentment in the
use of the shift-key here and there. Yet, the same folks are staying quiet
about toString() and so on. Let's face it, function/method names are used
more often than import names for example. So, I feel (a) this issue is daft
and/or myopic to begin with (b) there's nothing that could be done without
upsetting the stylistic preferences of others (c) there's little value in
paying heed to the opinion of those who "refuse" to use a library simply
because it doesn't adhere to one tiny stylistic notion, which couldn't in
practice be changed anyway. Better for us to listen to people who are
willing to be a little flexible.

Cheers;

Kris -
I think there's a legitimate concern here which you've been ignoring. It would
be helpful to give some background as to why Tango uses the conventions it
does.
And my guess is that the primary reason Tango uses the conventions it does, is
that you have a Java background!

Ultimately, I suspect that the underlying conflict arises because Tango has
heavy Java influence, whereas Phobos is mostly modelled on the C standard
library.

Incidentally, one stylistic change between Phobos and Tango which hasn't been
mentioned, is that Phobos uses a flat structure (except for a couple of things
like std.c.windows.windows!). IMHO, the flat structure is decidedly inferior.

As Andrei said before, D can expect a flood of refugees from C++ over the next
couple of years. To be hospitable to them, we need to recognize that they'll be
suffering from culture shock. This doesn't necessarily mean that Tango needs to
change anything, but a more sympathetic attitude is really important. The major
stumbling blocks deserve a little explanation.

-Don.

Nov 19 2007
"Kris" <foo bar.com> writes:
"Don Clugston" <dac nospam.com.au> wrote in message

Kris -
I think there's a legitimate concern here which you've been ignoring. It
would be helpful to give some background as to why Tango uses the
conventions it does. And my guess is that the primary reason Tango uses
the conventions it does, is that you have a Java background!

Sure I'm familiar with Java, Don. But I'm also familiar with Simula, Pascal,
Modula, Ada, C#, etc. To claim that Tango is driven by a Java background is
being more than a tad superficial :)

Now I'm interested: where did you get that notion from, Don? Perhaps because
I used it as an example at the conference?

Nov 19 2007
Regan Heath <regan netmail.co.nz> writes:
Kris wrote:
"Don Clugston" <dac nospam.com.au> wrote in message

Kris -
I think there's a legitimate concern here which you've been ignoring. It
would be helpful to give some background as to why Tango uses the
conventions it does. And my guess is that the primary reason Tango uses
the conventions it does, is that you have a Java background!

Sure I'm familiar with Java, Don. But I'm also familiar with Simula, Pascal,
Modula, Ada, C#, etc. To claim that Tango is driven by a Java background is
being more than a tad superficial :)

Now I'm interested: where did you get that notion from, Don? Perhaps because
I used it as an example at the conference?

You may recall I made the same assumption a few years back until you put
me right :)

I think it's the (what I would call) heavy use of classes and
interfaces, a very OO style if you will, which to my mind (and I may be
strange) says "Java" to me.  In actual fact C++ code can be written in
the same fashion but it can also be written in what I would call a "C
with classes" style.

It's hard to put ones finger on the reasons but that is the impression I
got and it seems Don had the same impression so there must be something
to it... even if that something is that both of us had the same weird
and random thought.

Regan

Nov 19 2007
Don Clugston <dac nospam.com.au> writes:
Kris wrote:
"Don Clugston" <dac nospam.com.au> wrote in message

Kris -
I think there's a legitimate concern here which you've been ignoring. It
would be helpful to give some background as to why Tango uses the
conventions it does. And my guess is that the primary reason Tango uses
the conventions it does, is that you have a Java background!

Sure I'm familiar with Java, Don. But I'm also familiar with Simula, Pascal,
Modula, Ada, C#, etc. To claim that Tango is driven by a Java background is
being more than a tad superficial :)

Perhaps it's not Java at all, but rather "curly brace languages other than
C/C++". For a C++ programmer, the Tango style looks very foreign, and (to me, a
non-Java programmer) feels like Java. And the Phobos style feels much more
familiar.
But I also think (as a non-C# programmer) that C# also looks similar to Java
(and similarly foreign).

This isn't a criticism in any way (as an expat, I spend most of my life feeling
Tango style seem to be coming from C++ programmers, and I think it's related to
what they (we) are used to.

Now I'm interested: where did you get that notion from, Don? Perhaps because
I used it as an example at the conference?

Long before that. You've mentioned Java a fair bit over the years. I remember
that you didn't come from C++, anyway.

Nov 19 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Don Clugston wrote:

Kris wrote:
"Don Clugston" <dac nospam.com.au> wrote in message

Kris -
I think there's a legitimate concern here which you've been ignoring. It
would be helpful to give some background as to why Tango uses the
conventions it does. And my guess is that the primary reason Tango uses
the conventions it does, is that you have a Java background!

Sure I'm familiar with Java, Don. But I'm also familiar with Simula,
Pascal, Modula, Ada, C#, etc. To claim that Tango is driven by a Java
background is being more than a tad superficial :)

Perhaps it's not Java at all, but rather "curly brace languages other than
C/C++". For a C++ programmer, the Tango style looks very foreign, and (to
me, a non-Java programmer) feels like Java. And the Phobos style feels
much more familiar. But I also think (as a non-C# programmer) that C# also
looks similar to Java (and similarly foreign).

This isn't a criticism in any way (as an expat, I spend most of my life
feeling foreign!), just an observation. Most of the unfavourable comments
about the Tango style seem to be coming from C++ programmers, and I think
it's related to what they (we) are used to.

I used to be a C++ programmer, and based on the styles I used then (not
invented by me, btw), would end up very close to what Tango has now.

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 19 2007
"Kris" <foo bar.com> writes:
"Don Clugston" <dac nospam.com.au> wrote ...
Kris wrote:
"Don Clugston" <dac nospam.com.au> wrote in message

Kris -
I think there's a legitimate concern here which you've been ignoring. It
would be helpful to give some background as to why Tango uses the
conventions it does. And my guess is that the primary reason Tango uses
the conventions it does, is that you have a Java background!

Sure I'm familiar with Java, Don. But I'm also familiar with Simula,
Pascal, Modula, Ada, C#, etc. To claim that Tango is driven by a Java
background is being more than a tad superficial :)

Perhaps it's not Java at all, but rather "curly brace languages other than
C/C++". For a C++ programmer, the Tango style looks very foreign, and (to
me, a non-Java programmer) feels like Java. And the Phobos style feels
much more familiar.
But I also think (as a non-C# programmer) that C# also looks similar to
Java (and similarly foreign).

FWIW, I have written mountains of C, so it's not at all unfamiliar to me. At
the time I'd encourage people to write structs of pointers to encapsulate
library functionality, and place those structs within other in order to gain
some better degree of maintainability in very large systems (for 15 years.
Actually more than that, but who's counting). It worked for us.

Anyway, here's the thing: we decided that the style of Tango would have a
somewhat OO flavour, rather than like a C library. This seems to be a common
approach with 'modern' libraries so, as I recall, we were quite comfortable
making that choice. Perhaps that's the aspect that you're seeing? I don't
think it's a Java style per se, although the containers do originate there.
Is it perhaps an OO style distinction?

This isn't a criticism in any way (as an expat, I spend most of my life
feeling foreign!), just an observation. Most of the unfavourable comments
about the Tango style seem to be coming from C++ programmers, and I think
it's related to what they (we) are used to.

(I'm an expat also, so may be used to "feeling foreign" also)

You may well have a point there. Yet, this thread is not about the fact that
Tango uses some decorator patterns here or there, or that the I/O system is
different to C++ (phobos does that also, I expect?). Or that it has a Text
class, or FilePath, or whatever. It's not about OO at all. Instead, it is
about module names, of all things. I'd really like to say this is wholly
relevant to being sympathetic to C++ developers, but it's hard to see the
connection. Maybe you can help out there?

Let me ask: how does the matter of module names significantly help a C or
C++ programmer get used to all the differences in D and any D library? I
would have though any significance would be in the language and library
design, rather than whether the module names are lowercase, uppercase or
camelcase? Isn't this a minor stylistic point instead?

Now I'm interested: where did you get that notion from, Don? Perhaps
because I used it as an example at the conference?

Long before that. You've mentioned Java a fair bit over the years. I
remember that you didn't come from C++, anyway.

Ah, well the C++ part is true. It's related to why I've been such a D

Nov 19 2007
"Kris" <foo bar.com> writes:
"Don Clugston" <dac nospam.com.au> wrote in message ...

Long before that. You've mentioned Java a fair bit over the years. I
remember that you didn't come from C++, anyway.

Pardon, Don ... I switched subject lines on you. Replied under "Tango

Nov 19 2007
Sean Kelly <sean f4.ca> writes:
Don Clugston wrote:

This isn't a criticism in any way (as an expat, I spend most of my life
feeling foreign!), just an observation. Most of the unfavourable
comments about the Tango style seem to be coming from C++ programmers,
and I think it's related to what they (we) are used to.

I think this is probably true.  I am a C++ person myself, and required
some convincing before I accepted the Tango style being discussed.

Now I'm interested: where did you get that notion from, Don? Perhaps
because I used it as an example at the conference?

Long before that. You've mentioned Java a fair bit over the years. I
remember that you didn't come from C++, anyway.

In all honesty, I've always felt Kris has a Java approach as well, and
have said as much before.  But that may simply be because I have little

Sean

Nov 19 2007
Walter Bright <newshound1 digitalmars.com> writes:
Don Clugston wrote:
This isn't a criticism in any way (as an expat, I spend most of my life
feeling foreign!), just an observation. Most of the unfavourable
comments about the Tango style seem to be coming from C++ programmers,
and I think it's related to what they (we) are used to.

I think you've touched on a larger issue. Languages tend to have a look
and feel, and if a programmer doesn't like a particular language,
they'll tend to associate those bad feelings with that look and feel.

For example, in the 80's, the big divide was the C camp and the Pascal
camp. The two groups were distinct, and they argued with each other a
lot about which was better. Each had a distinct look and feel to their
language (and their respective derivative languages).

I don't like Pascal. I've deliberately resisted imbuing D with elements
that resemble Pascal's look and feel, not only because of my own
preference, but because I know that the C camp does not like Pascal and
if D adopts a Pascal look, they will be turned off from D. D is
deliberately designed so that C/C++ users will quickly feel at home with it.

Nov 19 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Walter Bright wrote:

Don Clugston wrote:
This isn't a criticism in any way (as an expat, I spend most of my life
feeling foreign!), just an observation. Most of the unfavourable
comments about the Tango style seem to be coming from C++ programmers,
and I think it's related to what they (we) are used to.

I think you've touched on a larger issue. Languages tend to have a look
and feel, and if a programmer doesn't like a particular language,
they'll tend to associate those bad feelings with that look and feel.

For example, in the 80's, the big divide was the C camp and the Pascal
camp. The two groups were distinct, and they argued with each other a
lot about which was better. Each had a distinct look and feel to their
language (and their respective derivative languages).

I don't like Pascal. I've deliberately resisted imbuing D with elements
that resemble Pascal's look and feel, not only because of my own
preference, but because I know that the C camp does not like Pascal and
if D adopts a Pascal look, they will be turned off from D. D is
deliberately designed so that C/C++ users will quickly feel at home with
it.

And I have to say again - the C++ libraries I have used all make me more
comfortable with Tango's style than Phobos' style. And they are darn
popular C++ libraries too.

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 19 2007
Christopher Wright <dhasenan gmail.com> writes:
Don Clugston wrote:
Kris wrote:
"Bill Baxter" <dnewsgroup billbaxter.com>
Yes, newcomers.  4 is less than 10.  That makes you newcomers
relative to phobos and the D style guide Walter has had posted up on
digitalmars.com that I presume is about as old as phobos.  That's all
I meant.

Oh that's easy to answer: we understood those to be guidelines only,
and felt that some minor details would need adjustment for our
purposes. I recall there was some technical difficulty regarding
module names at the time, but don't recall the specifics right now.

As for conventions, it is my opinion that Tango doesn't have to
justify the choices made to anyone at this point. It's water under
the bridge, just as the some minor stylistic choices in phobos or D
are now just water under the bridge. As Walter already noted: Tango
can use whatever style it wants.

Yes, Tango can use whatever style it wants, but obviously some
choices are better than others.  Nobody here is arguing that RanDoM
CaSE for module names would be a good thing, for instance.

Are you sure about that? :p

moving along, I believe Sean's two questions (posted much earlier,
which I repeated on his behalf) were intended to elicit some
positive feedback?

Yes.  I do wish certain parties would stick to the issues here.
Elsewhere in this thread some constructive points have been mentioned
pro and con lowercase module names.  I'll try to summarize without
injecting any biases:

The effort is appreciated Bill, but realistically, Tango is not going
to change in this manner. As has been noted several times prior, one
persons stylistic meat is another's stylistic poison. There's no
resolving that, and we have no wish to attempt to. It's a dilemma, and
the kind of religious distinction that people would kill each other
for in the past (and still do, actually).

Certain individuals cannot see past that, and find bitter resentment
in the use of the shift-key here and there. Yet, the same folks are
staying quiet about toString() and so on. Let's face it,
function/method names are used more often than import names for
example. So, I feel (a) this issue is daft and/or myopic to begin with
(b) there's nothing that could be done without upsetting the stylistic
preferences of others (c) there's little value in paying heed to the
opinion of those who "refuse" to use a library simply because it
doesn't adhere to one tiny stylistic notion, which couldn't in
practice be changed anyway. Better for us to listen to people who are
willing to be a little flexible.

Cheers;

Kris -
I think there's a legitimate concern here which you've been ignoring. It
would be helpful to give some background as to why Tango uses the
conventions it does. And my guess is that the primary reason Tango uses
the conventions it does, is that you have a Java background!

Ultimately, I suspect that the underlying conflict arises because Tango
has heavy Java influence, whereas Phobos is mostly modelled on the C
standard library.

Incidentally, one stylistic change between Phobos and Tango which hasn't
been mentioned, is that Phobos uses a flat structure (except for a
couple of things like std.c.windows.windows!). IMHO, the flat structure
is decidedly inferior.

Why is that?

I work on a decently sized (40k lines) project in C#, and we're moving
from a deep hierarchy to a shallow one -- it's less typing, and we don't
see any advantages in the deeper structure.

If you point out a reasonable advantage, then I can probably work quicker.

The documentation should be hierarchical or task-oriented, of course, so
you can find what you're looking for easily. I'm not so certain that
encountering three nested packages before a module is an advantage in
itself, even if those packages are well organized (for instance, NOT
lumping collections in with a whole bunch of random date/time and
logging stuff -- I think Tango might benefit from dumping all the
packages under util into the tango package).

You might be able to find the file you're working on more easily with
deeper structure. It might be a frequent issue when you're working with
a GUI that doesn't allow you to type a file name to select and open that
file. That's the best argument I see at the moment.

You've more experience than I, I'm sure, so you probably have good
arguments in favor of a deeper hierarchy for your code. I'd like to hear
them. And please, if I go on to argue with you about it, point me to
this paragraph saying that I'm only looking for information, not a flamewar.

As Andrei said before, D can expect a flood of refugees from C++ over
the next couple of years. To be hospitable to them, we need to recognize
that they'll be suffering from culture shock. This doesn't necessarily
mean that Tango needs to change anything, but a more sympathetic
attitude is really important. The major stumbling blocks deserve a
little explanation.

-Don.


Nov 19 2007
Sean Kelly <sean f4.ca> writes:
Christopher Wright wrote:
Don Clugston wrote:
Incidentally, one stylistic change between Phobos and Tango which
hasn't been mentioned, is that Phobos uses a flat structure (except
for a couple of things like std.c.windows.windows!). IMHO, the flat
structure is decidedly inferior.

Why is that?

I work on a decently sized (40k lines) project in C#, and we're moving
from a deep hierarchy to a shallow one -- it's less typing, and we don't
see any advantages in the deeper structure.

If you point out a reasonable advantage, then I can probably work quicker.

The documentation should be hierarchical or task-oriented, of course, so
you can find what you're looking for easily.

This is why I like deeper hierarchies.  I tend to look at the code
itself for reference more often than the documentation itself, so it's
nice to have the code grouped in a manner that matches the documentation.

Sean

Nov 19 2007
Walter Bright <newshound1 digitalmars.com> writes:
Sean Kelly wrote:
This is why I like deeper hierarchies.  I tend to look at the code
itself for reference more often than the documentation itself, so it's
nice to have the code grouped in a manner that matches the documentation.

I like flatter ones, probably because I'm too lazy to type out the long
names.

Nov 20 2007
Christopher Wright <dhasenan gmail.com> writes:
Sean Kelly wrote:
Christopher Wright wrote:
Don Clugston wrote:
Incidentally, one stylistic change between Phobos and Tango which
hasn't been mentioned, is that Phobos uses a flat structure (except
for a couple of things like std.c.windows.windows!). IMHO, the flat
structure is decidedly inferior.

Why is that?

I work on a decently sized (40k lines) project in C#, and we're moving
from a deep hierarchy to a shallow one -- it's less typing, and we
don't see any advantages in the deeper structure.

If you point out a reasonable advantage, then I can probably work
quicker.

The documentation should be hierarchical or task-oriented, of course,
so you can find what you're looking for easily.

This is why I like deeper hierarchies.  I tend to look at the code
itself for reference more often than the documentation itself, so it's
nice to have the code grouped in a manner that matches the documentation.

One could argue that you just need better documentation.

Also, this hierarchical documentation could be as simple as "if you want
to accomplish this task, you should look at this module", and then it's
O(1) to get to the file in the flat structure, not O(log n) as with the
hierarchical one.

And again, you only have to write a module once, but you read it many
times. When you're reading it, you know exactly which modules it
references, so a flat structure is faster.

Also, a documentation hierarchy can be entirely independent of the code
hierarchy, so you would put your collection documentation in the
collections folder, not util/collections, so it's more easily
discovered. Or other things like that, where the structure of your
packages is not desirable but you can't change it immediately due to
legacy code.

I don't recall ever having browsed through the source of a library in
search of some functionality; it's always been a particular module. The
documentation is where I search first.

I guess I'll be using Tango more when it has a stable D2 release and I
have a good IDE that can auto-import for me.

Nov 20 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Christopher Wright wrote:

Sean Kelly wrote:
Christopher Wright wrote:
Don Clugston wrote:
Incidentally, one stylistic change between Phobos and Tango which
hasn't been mentioned, is that Phobos uses a flat structure (except
for a couple of things like std.c.windows.windows!). IMHO, the flat
structure is decidedly inferior.

Why is that?

I work on a decently sized (40k lines) project in C#, and we're moving
from a deep hierarchy to a shallow one -- it's less typing, and we
don't see any advantages in the deeper structure.

If you point out a reasonable advantage, then I can probably work
quicker.

The documentation should be hierarchical or task-oriented, of course,
so you can find what you're looking for easily.

This is why I like deeper hierarchies.  I tend to look at the code
itself for reference more often than the documentation itself, so it's
nice to have the code grouped in a manner that matches the documentation.

And again, you only have to write a module once, but you read it many
times. When you're reading it, you know exactly which modules it
references, so a flat structure is faster.

I think an open source project have it's code browsed very often, and even
modified/mantained regularly - so I do think Sean has a point. As with
everything else, there are many opinions though. I tend to like deep more
than flat, even if I see pros for the flat hierarchy.

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 20 2007
Christopher Wright wrote:
Also, this hierarchical documentation could be as simple as "if you want
to accomplish this task, you should look at this module", and then it's
O(1) to get to the file in the flat structure, not O(log n) as with the
hierarchical one.

Ah, but consider the task of finding the right part of the module. :-)

For the flat structure, it's O(l) where l is the length of the file.

For the hierarchical structure, it's O(L + d) where L is the length of the right
file in the hierarchy and d is the depth of the hierarchy.

Taking L as the average length of a file in the hierarchical structure, it's l/n
where n is the total number of modules into which the l-length module has been
split. Thus the hierarchical one is O(l/n + d) where d is O(n), so it comes down
to O(l) versus O(l/n + n), of which the former grows faster.

And of course, you still need to find the documentation first, too... ;-)

--
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi

Nov 20 2007
Sean Kelly <sean f4.ca> writes:
Matti Niemenmaa wrote:
Christopher Wright wrote:
Also, this hierarchical documentation could be as simple as "if you want
to accomplish this task, you should look at this module", and then it's
O(1) to get to the file in the flat structure, not O(log n) as with the
hierarchical one.

Ah, but consider the task of finding the right part of the module. :-)

For the flat structure, it's O(l) where l is the length of the file.

For the hierarchical structure, it's O(L + d) where L is the length of the
right
file in the hierarchy and d is the depth of the hierarchy.

I just woke up and your math is confusing me :-)  I like two things
about hierarchical structures: first, logically grouped things are
typically grouped in a directory, and second, if I have a rough idea
where to look then I get fewer false hits with grep.  In large code
bases, this can be a real time-saver.

Sean

Nov 20 2007
Christopher Wright <dhasenan gmail.com> writes:
Matti Niemenmaa wrote:
Christopher Wright wrote:
Also, this hierarchical documentation could be as simple as "if you want
to accomplish this task, you should look at this module", and then it's
O(1) to get to the file in the flat structure, not O(log n) as with the
hierarchical one.

Ah, but consider the task of finding the right part of the module. :-)

For the flat structure, it's O(l) where l is the length of the file.

For the hierarchical structure, it's O(L + d) where L is the length of the
right
file in the hierarchy and d is the depth of the hierarchy.

Taking L as the average length of a file in the hierarchical structure, it's
l/n
where n is the total number of modules into which the l-length module has been
split. Thus the hierarchical one is O(l/n + d) where d is O(n), so it comes
down
to O(l) versus O(l/n + n), of which the former grows faster.

You're saying that having fewer large modules is a direct consequence of
having a flat structure and having many modules is a direct consequence
of having a hierarchical structure. I disagree with that.

And of course, you still need to find the documentation first, too... ;-)


Nov 20 2007
Christopher Wright wrote:
You're saying that having fewer large modules is a direct consequence of
having a flat structure and having many modules is a direct consequence
of having a hierarchical structure. I disagree with that.

You're right, of course. Sorry, don't know where I got that from.

However, I still think the speed of finding a file given that you know where it
is is at least approximately the same. Informally, I find it quicker to browse
through 4 directories and then pick the right file out of 8, than to find the
right file out of 32, for instance. YMMV.

--
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi

Nov 20 2007
Sean Kelly <sean f4.ca> writes:
Christopher Wright wrote:
Sean Kelly wrote:
Christopher Wright wrote:
Don Clugston wrote:
Incidentally, one stylistic change between Phobos and Tango which
hasn't been mentioned, is that Phobos uses a flat structure (except
for a couple of things like std.c.windows.windows!). IMHO, the flat
structure is decidedly inferior.

Why is that?

I work on a decently sized (40k lines) project in C#, and we're
moving from a deep hierarchy to a shallow one -- it's less typing,
and we don't see any advantages in the deeper structure.

If you point out a reasonable advantage, then I can probably work
quicker.

The documentation should be hierarchical or task-oriented, of course,
so you can find what you're looking for easily.

This is why I like deeper hierarchies.  I tend to look at the code
itself for reference more often than the documentation itself, so it's
nice to have the code grouped in a manner that matches the documentation.

One could argue that you just need better documentation.

Certainly.  But I've come to accept that the existence of any
documentation at all is a rare thing, and its accuracy is equally rare.
Documentation also assumes the documented code is bug-free.

Sean

Nov 20 2007
Don Clugston <dac nospam.com.au> writes:
Christopher Wright wrote:
Don Clugston wrote:
Incidentally, one stylistic change between Phobos and Tango which
hasn't been mentioned, is that Phobos uses a flat structure (except
for a couple of things like std.c.windows.windows!). IMHO, the flat
structure is decidedly inferior.

Why is that?

I work on a decently sized (40k lines) project in C#, and we're moving
from a deep hierarchy to a shallow one -- it's less typing, and we don't
see any advantages in the deeper structure.

If you point out a reasonable advantage, then I can probably work quicker.

Actually, I agree. I advocate shallow heirachies, not deep ones. But a
completely flat heirarchy is not the same as a shallow one.

I think it's perfectly reasonable to have a fairly large number (say twenty,
maybe many more) entries on each level.
That gives 20*20*20 = 8000 modules with just a three-level structure.
But 8000 modules in one directory would be insane. Pretty soon, all the good
names are taken. For the more obscure things, you find yourself wanting to
include the root name inside the module name. Two examples in Phobos are
'socketstream' and 'metastrings'. As Phobos expands, it will get worse.

Personally, parts of Tango's structure are a bit too deep for my liking. (I
don't think frequently used stuff should be more that a couple of levels deep;
I hope I never have to use tango.net.cluster.tina.util.model.IServer; I think
tango.util.collection.HashMap is way too much to type for something so
fundamental). But it has room to expand.

Nov 26 2007
Aarti_pl <aarti interia.pl> writes:
Don Clugston pisze:
Personally, parts of Tango's structure are a bit too deep for my liking.
(I don't think frequently used stuff should be more that a couple of
levels deep;
I hope I never have to use tango.net.cluster.tina.util.model.IServer; I
think tango.util.collection.HashMap is way too much to type for
something so fundamental). But it has room to expand.

Yup. First one is definitely too deep.

In case of second one I really don't like Java approach of putting
collections into util package. IMHO collections are too fundamental in
language for being threated just as part of util. It would be much nicer
to have:

tango.collection

BR
Marcin Kuszczak
(aarti_pl)

Nov 26 2007
Aarti_pl <aarti interia.pl> writes:
Aarti_pl pisze:
Don Clugston pisze:
Personally, parts of Tango's structure are a bit too deep for my
liking. (I don't think frequently used stuff should be more that a
couple of levels deep;
I hope I never have to use tango.net.cluster.tina.util.model.IServer;
I think tango.util.collection.HashMap is way too much to type for
something so fundamental). But it has room to expand.

Yup. First one is definitely too deep.

In case of second one I really don't like Java approach of putting
collections into util package. IMHO collections are too fundamental in
language for being threated just as part of util. It would be much nicer
to have:

tango.collection

And:

tango.util.time --> tango.time
tango.util.Convert --> tango.convert.Convert

(after quick look into tango.util).

Above are too fundamental to exist in util. These are basic concepts in
every programming language.

BR
Marcin Kuszczak
(aarti_pl)

Nov 26 2007
darrylb <noemail example.com> writes:
Don Clugston Wrote:

Christopher Wright wrote:
Don Clugston wrote:
Incidentally, one stylistic change between Phobos and Tango which
hasn't been mentioned, is that Phobos uses a flat structure (except
for a couple of things like std.c.windows.windows!). IMHO, the flat
structure is decidedly inferior.

Why is that?

I work on a decently sized (40k lines) project in C#, and we're moving
from a deep hierarchy to a shallow one -- it's less typing, and we don't
see any advantages in the deeper structure.

If you point out a reasonable advantage, then I can probably work quicker.

Actually, I agree. I advocate shallow heirachies, not deep ones. But a
completely flat heirarchy is not the same as a shallow one.

Personally, parts of Tango's structure are a bit too deep for my liking. (I
don't think frequently used stuff should be more that a couple of levels deep;

Ok, I usually just lurk and sit back and eat popcorn while reading the flames
her e but I just had to comment...

Are you serious? You're worried about typing out a few extra characters in your
import? Seriously, how much extra time is typing out maybe 10-20 characters
going to cost you, as compared to say, writing the actual code for the module?

I'm not meaning to pick here but.. this just seems so inconsequential as to not
even be worthy of mentioning.

If a slightly deeper structure leads to all sorts of benefits (logical
separation, better segmentation of generated documentation, future-proofing
expansion, etc) I really don't mind the extra 5 seconds to type out a bit more
at the top of a module that I'll probably be working on for _much_ longer. Less
typing? Sure, but the act of physically pressing keys and getting characters on
the screen is _not_ the 'work' of the programmer... and 'tango.HashMap' versus
'tango.util.stuff.otherthings.collections.HashMap' .. who cares, as long as it
works. After you're finished the 'pain' of typing that out once, you can always
cut & paste it into other modules if it's that big of a deal :P

Nov 26 2007
"David Wilson" <dw botanicus.net> writes:
On 11/26/07, darrylb <noemail example.com> wrote:

Actually, I agree. I advocate shallow heirachies, not deep ones. But a
completely flat heirarchy is not the same as a shallow one.

Personally, parts of Tango's structure are a bit too deep for my liking. (I
don't think frequently used stuff should be more that a couple of levels deep;

Are you serious? You're worried about typing out a few extra characters in
your import? Seriously, how much extra time is typing out maybe 10-20
characters going to cost you, as compared to say, writing the actual code for
the module?

I'm not meaning to pick here but.. this just seems so inconsequential as to
not even be worthy of mentioning.

I doubt this has anything to do with number of characters typed, at
least not in my case. My problem with deep nestings is that I simply
do not remember them. When you have on average a single word per
module ala. Python or Phobos, remembering where a class lives involves
recalling a single english-sounding word, which my brain is
excellently geared for.

There are variations of this theme, but that is basically it. I know
that any filesystem functions in Phobos lives in std.path, std.file,
std.stream, std.stdio. If I had to guess the same about Tango, I might
go searching the docs for words like "conduit" which bare no
resemblance to what I'm actually trying to achieve.

Just suggesting that for some people, this issue has more substance to
it than merely a matter of style.

David.

If a slightly deeper structure leads to all sorts of benefits (logical
separation, better segmentation of generated documentation, future-proofing
expansion, etc) I really don't mind the extra 5 seconds to type out a bit more
at the top of a module that I'll probably be working on for _much_ longer. Less
typing? Sure, but the act of physically pressing keys and getting characters on
the screen is _not_ the 'work' of the programmer... and 'tango.HashMap' versus
'tango.util.stuff.otherthings.collections.HashMap' .. who cares, as long as it
works. After you're finished the 'pain' of typing that out once, you can always
cut & paste it into other modules if it's that big of a deal :P


Nov 26 2007
darrylb <noemail example.com> writes:
David Wilson Wrote:
I doubt this has anything to do with number of characters typed, at
least not in my case. My problem with deep nestings is that I simply
do not remember them. When you have on average a single word per
module ala. Python or Phobos, remembering where a class lives involves
recalling a single english-sounding word, which my brain is
excellently geared for.

There are variations of this theme, but that is basically it. I know
that any filesystem functions in Phobos lives in std.path, std.file,
std.stream, std.stdio. If I had to guess the same about Tango, I might
go searching the docs for words like "conduit" which bare no
resemblance to what I'm actually trying to achieve.

Just suggesting that for some people, this issue has more substance to
it than merely a matter of style.

Ok, I hear what you're saying, but I think it becomes much less relevant as the
library grows. Memorizing a list of 10 items isn't so bad, but when that grows
to 100, or 1000, there needs to be some sort of mechanism in place to make
coherant sense of said items. That's mostly what the module pathing is for. So
that, when you aren't sure exactly what you want, but you know that you need
some sort of X that is itself some sort of Y, that you are likely to find it in
library.Y.X, which you can look in (and look for the documentation in) rather
than some libraryYX module that's mixed in with 900 others.

For smaller libs that you are mostly going to keep in your head, then maybe a
flatter structure would work. But I think it's forward-thinking of a lib that
will become larger to be slighly extended. And the cluster example is very
extreme, for the most part, we're talking about adding one layer, in rare
cases, possibly two. I think that's a very acceptable trade off for being able
to keep some semblance of sanity via logical separations.

I suppose perhaps on another level, this discussion is more akin to, the more
complex things get, the more complex they are. :). The (mildly) extended
structure is in place simply to manage complexity, If it helps there, and the
adversion to typing a few extra characters is only a psychological block to a
solution for a real problem, while I agree that the imaginary issue can
entirely be present (for some more than others), I don't think it should trump
an otherwise fine solution to a very real problem (managing present and future
complexity).

I mean, I don't like dialing area codes for long distance either, but hey, it
sure helps to manage the complexity of phone numbers, and my complaints about
hitting a few extra buttons to call someplace are far outweighed by other
benefits. :). Ok, it's a questionable analogy, but I just thought I'd throw it
in anyway :). I still think 'tango.collection' versus 'tango.util.collection'
is quite nitpicky.

Nov 26 2007
Oskar Linde <oskar.lindeREM OVEgmail.com> writes:
darrylb wrote:
Don Clugston Wrote:

Christopher Wright wrote:
Don Clugston wrote:
Incidentally, one stylistic change between Phobos and Tango which
hasn't been mentioned, is that Phobos uses a flat structure (except
for a couple of things like std.c.windows.windows!). IMHO, the flat
structure is decidedly inferior.

Why is that?

I work on a decently sized (40k lines) project in C#, and we're moving
from a deep hierarchy to a shallow one -- it's less typing, and we don't
see any advantages in the deeper structure.

If you point out a reasonable advantage, then I can probably work quicker.

Actually, I agree. I advocate shallow heirachies, not deep ones. But a
completely flat heirarchy is not the same as a shallow one.

Personally, parts of Tango's structure are a bit too deep for my liking. (I
don't think frequently used stuff should be more that a couple of levels deep;

Ok, I usually just lurk and sit back and eat popcorn while reading the flames
her e but I just had to comment...

Are you serious? You're worried about typing out a few extra characters in
your import? Seriously, how much extra time is typing out maybe 10-20
characters going to cost you, as compared to say, writing the actual code for
the module?

I'm not meaning to pick here but.. this just seems so inconsequential as to
not even be worthy of mentioning.

If a slightly deeper structure leads to all sorts of benefits (logical
separation, better segmentation of generated documentation, future-proofing
expansion, etc) I really don't mind the extra 5 seconds to type out a bit more
at the top of a module that I'll probably be working on for _much_ longer. Less
typing? Sure, but the act of physically pressing keys and getting characters on
the screen is _not_ the 'work' of the programmer... and 'tango.HashMap' versus
'tango.util.stuff.otherthings.collections.HashMap' .. who cares, as long as it
works. After you're finished the 'pain' of typing that out once, you can always
cut & paste it into other modules if it's that big of a deal :P

You are probably 100 % right that for a fully rational person those few
extra seconds you spend typing a longer module name won't make any
difference at all in the long run when it comes to productivity, but we
humans are irrational. I'd say there are at least three more or less
rational reasons why excessively long names are bad:

First, there is probably a psychological drive to minimize the effort we
spend on doing things. We seem to have a bias towards overestimating the
effort required for non-stimulating tasks while often underestimating
the stimulating ones. Typing out a longer module name will feel like it
would require much more effort than it actually would. For example, I'm
betting that the number of uses for delegate literals in D increased
quite tremendously when the short form (purely syntactical sugar) was
introduced a while ago -- and that for very irrational reasons.

Secondly, thinking about a longer and more complex name requires greater
cognitive effort, wasting resources better spent elsewhere. There are
actually very few things we (or at least I :) ) can keep in mind at the
same time. Lowering the apparent complexity of something makes it more
likely to be used.

Thirdly, recalling a deeply nested name is much harder. Short names can
be recalled as a single unit, while a name such as
tango.net.cluster.tina.util.model.IServer probably requires several
recursive memory fetch calls, flushing valuable caches in the process.

:)

--
Oskar

Nov 26 2007
Sean Kelly <sean f4.ca> writes:
Bill Baxter wrote:

The Tango convention may be better for all I know, but I don't recall
hearing any compelling arguments in favor of why a change was needed. If
they were given and I just forgot them, then sorry.  I do recall hearing
unsubstantiated claims like "we found it was better" or "we found the
phobos convention to be insufficient" etc, but I don't recall any actual
good arguments that made me go "hmm ah, yes indeed".  Anyway given that
this topic continues to come up, it seems it would be a good idea to
collect all these reasons on a page over at tango.dsource.org.

I think some of the reasons may be there already, but the page is broken
(for me anyway) so I can't tell you where to look.  I'm not sure if it
helps, but I resisted the idea of CamelCase module names when we began
working on Tango, possibly because I come from a C/C++ background.  But
as Tango has grown I've come to appreciate the readability that the
scheme provides.  For example, many of the module names in Tango are
multi-word combinations: DeviceConduit, MemoryConduit, EndianProtocol,
VirtualFolder, etc.  I feel that eliminating the caps in these names
would render them largely unreadable: deviceconduit, memoryconduit,
endianprotocol, virtualfolder...  The C/C++ way would be to find some
abbreviated form instead, but I hesitate to think that such names would
be more clear.

I suppose one could argue that following the Java approach in Tango
results in unneeded redundancies, such as the DeviceConduit module
containing a DeviceConduit class, but again, I would argue that choosing
an arbitrary name to avoid these redundancies would reduce clarity.  As
it is, I know that if I want to use a DeviceConduit in my app, I just
have to import tango.io.DeviceConduit.  There is no need to remember
that the class actually lives in tango.io.blah instead.

As for capitalization being confusing for people using case-sensitive
vs. case-insensitive filesystems, I suppose this is a problem I have
simply never been exposed to.  D is a case-sensitive language, so I
would expect people using D to not make mistakes regarding
capitalization, particularly when the capitalization in this case
follows a simple and established convention (even if that convention
doesn't match what is in the D style guide).  Has this truly been a problem?

Finally, I'll admit to being a bit baffled about what the big deal is
anyway.  The C/C++ standard library uses lowercase for /everything/,
type names included, and I've yet to see someone complain to the various
language follow a different convention.  And things are even worse in
C++ because the library relies on specifically named typedefs to
operate, so the convention there is viral by necessity.

Regarding D, Phobos, and Tango, I think the differences between the
Phobos and the Tango convention are small potatoes.  Import lines may
look a bit different, but /that's it/.  The only other difference in
style concerns global objects, of which Tango has perhaps 3-4, all of
which could be aliased to something else or wrapped in about ten
seconds.  How can such an issue possibly be enough to discuss so much,
let alone to use as grounds to reject a library entirely?  Frankly, if
this is the worst thing that people have to say about Tango then I think
the project has succeeded beyond my wildest expectations.

Sean

Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Sean Kelly wrote:
Bill Baxter wrote:

Excellent flame-free technical post addressing the issues Sean.  Thanks.

The Tango convention may be better for all I know, but I don't recall
hearing any compelling arguments in favor of why a change was needed.
If they were given and I just forgot them, then sorry.  I do recall
hearing unsubstantiated claims like "we found it was better" or "we
found the phobos convention to be insufficient" etc, but I don't
recall any actual good arguments that made me go "hmm ah, yes
indeed".  Anyway given that this topic continues to come up, it seems
it would be a good idea to collect all these reasons on a page over at
tango.dsource.org.

I think some of the reasons may be there already, but the page is broken
(for me anyway) so I can't tell you where to look.  I'm not sure if it
helps, but I resisted the idea of CamelCase module names when we began
working on Tango, possibly because I come from a C/C++ background.  But
as Tango has grown I've come to appreciate the readability that the
scheme provides.  For example, many of the module names in Tango are
multi-word combinations: DeviceConduit, MemoryConduit, EndianProtocol,
VirtualFolder, etc.  I feel that eliminating the caps in these names
would render them largely unreadable: deviceconduit, memoryconduit,
endianprotocol, virtualfolder...  The C/C++ way would be to find some
abbreviated form instead, but I hesitate to think that such names would
be more clear.

I agree that deviceconduit is atrocious.
But the official C++/STL/Boost way is to use underscores:
#include <hash_map>
#include <boost/shared_ptr.hpp>
etc..

So it could be device_conduit.

But then again as you mention below, in C++/STL/Boost the naming
convention for files *and* classes *and* methods is lowercase w/
underscores.  So you could say the file names are just being consistent
with the class names.

I suppose one could argue that following the Java approach in Tango
results in unneeded redundancies, such as the DeviceConduit module
containing a DeviceConduit class, but again, I would argue that choosing
an arbitrary name to avoid these redundancies would reduce clarity.  As
it is, I know that if I want to use a DeviceConduit in my app, I just
have to import tango.io.DeviceConduit.  There is no need to remember
that the class actually lives in tango.io.blah instead.

That does seem useful.  But is that true for every public class?  It may
be working in Tango, but generally D doesn't really lend itself to
Java's one-file==one-class.  (because D's only way to achieve 'friends'
is to put two classes in the same file).  Also in Tango I see you have
tango.math.Math which doesn't contain any class called "Math".

As for capitalization being confusing for people using case-sensitive
vs. case-insensitive filesystems, I suppose this is a problem I have
simply never been exposed to.  D is a case-sensitive language, so I
would expect people using D to not make mistakes regarding
capitalization, particularly when the capitalization in this case
follows a simple and established convention (even if that convention
doesn't match what is in the D style guide).  Has this truly been a
problem?

Yeh, I don't really understand the fuss either.  I use C++ libraries
that have mixed case headers all the time on Windows, and the exact same
issues apply as far as I know.  A lot of big, well-respected libraries
use this, such as Qt and OpenSceneGraph.  On the other hand wxWidgets
doesn't.  They use the randomized compression algorithm you speak of to
make a short name out of a long name.  Oooh I hate that.

Finally, I'll admit to being a bit baffled about what the big deal is
anyway.  The C/C++ standard library uses lowercase for /everything/,
type names included, and I've yet to see someone complain to the various
language follow a different convention.  And things are even worse in
C++ because the library relies on specifically named typedefs to
operate, so the convention there is viral by necessity.

I've heard complaining.  I've even been a complainer (before I started
liking lower_case names :-P).  But I never felt there was any hope in my
complaints leading to a change.  That's where D and Tango are different.
:-)

Regarding D, Phobos, and Tango, I think the differences between the
Phobos and the Tango convention are small potatoes.  Import lines may
look a bit different, but /that's it/.  The only other difference in
style concerns global objects, of which Tango has perhaps 3-4, all of
which could be aliased to something else or wrapped in about ten
seconds.  How can such an issue possibly be enough to discuss so much,
let alone to use as grounds to reject a library entirely?  Frankly, if
this is the worst thing that people have to say about Tango then I think
the project has succeeded beyond my wildest expectations.

I agree with you there.  I find that as long as something is consistent,
you can get used to it, and maybe even like it after you get past your
initial revulsion.  But I don't actually find Tangos module naming
disagreeable.  I'd prefer coarser granularity than one-file-one-class,
but that can be fixed easily with a few public import modules.

I'm more interested in figuring what convention really makes the most
sense for D overall.  Since what ever it is I'd like to follow it in my
own libraries too.  I'm not sure what it is yet.  But it doesn't seem to
me that just using what language X uses turns out so well.  C++ has a
more flexible mapping of files to namespaces than D, so C++ conventions
don't work so well.   Java with one-file-per-class and every file named
after the class doesn't work so well with D where there are legitimate
reasons to put two major classes in one file (or maybe no classes at
all).  And there's also the redundancy issue with using the Java naming
convention.

Here's an example from my porting of OpenMesh from C++ to D.  OpenMesh
has a class OpenMesh::IO::Options defined in the file
OpenMesh/Core/IO/Options.hh.  Trying to make as few changes as possible,
I named the module OpenMesh.Core.IO.Options.  But it's been annoying me
to no end because "Options" is such a generic name I never want to
import that into my main namespace.  But I think that as an FQN it's a
great name, except that the actual class is called ...IO.Options.Options.

--bb

Nov 18 2007
Sean Kelly <sean f4.ca> writes:
Bill Baxter wrote:
Sean Kelly wrote:

I suppose one could argue that following the Java approach in Tango
results in unneeded redundancies, such as the DeviceConduit module
containing a DeviceConduit class, but again, I would argue that
choosing an arbitrary name to avoid these redundancies would reduce
clarity.  As it is, I know that if I want to use a DeviceConduit in my
app, I just have to import tango.io.DeviceConduit.  There is no need
to remember that the class actually lives in tango.io.blah instead.

That does seem useful.  But is that true for every public class?  It may
be working in Tango, but generally D doesn't really lend itself to
Java's one-file==one-class.  (because D's only way to achieve 'friends'
is to put two classes in the same file).  Also in Tango I see you have
tango.math.Math which doesn't contain any class called "Math".

It's not true of every module, because as you say, not every module
contains any classes at all.  But for the classes that do exist in
Tango, in the vast majority of cases they live in a module of the same
name.  The most obvious exception being modules with one 'primary' class
and a number of related classes.  tango.core.Thread, for example,

I'll admit that I find this correspondence most useful when dealing with
Tango's IO package however, because it is so heavily modular.  In fact,
this modularity is the reason there are few aggregate modules.  Tango is
designed in a manner that largely avoids unused code being linked into
an application by spreading it across multiple modules.  One may argue
that block-level linking would mostly solve this problem as well, but it
currently does not work with D, and things like static data, module
ctors, etc, would not be omitted even with this feature.

Finally, I'll admit to being a bit baffled about what the big deal is
anyway.  The C/C++ standard library uses lowercase for /everything/,
type names included, and I've yet to see someone complain to the
same language follow a different convention.  And things are even
worse in C++ because the library relies on specifically named typedefs
to operate, so the convention there is viral by necessity.

I've heard complaining.  I've even been a complainer (before I started
liking lower_case names :-P).  But I never felt there was any hope in my
complaints leading to a change.  That's where D and Tango are different.
:-)

Touche. :-)

Regarding D, Phobos, and Tango, I think the differences between the
Phobos and the Tango convention are small potatoes.  Import lines may
look a bit different, but /that's it/.  The only other difference in
style concerns global objects, of which Tango has perhaps 3-4, all of
which could be aliased to something else or wrapped in about ten
seconds.  How can such an issue possibly be enough to discuss so much,
let alone to use as grounds to reject a library entirely?  Frankly, if
this is the worst thing that people have to say about Tango then I
think the project has succeeded beyond my wildest expectations.

I agree with you there.  I find that as long as something is consistent,
you can get used to it, and maybe even like it after you get past your
initial revulsion.  But I don't actually find Tangos module naming
disagreeable.  I'd prefer coarser granularity than one-file-one-class,
but that can be fixed easily with a few public import modules.

In my experience, nearly every project has slightly different demands
and it is impossible for a single library to exactly meet all of those
demands.  However, I feel that it is the mark of a good library if it
can be adapted to every project with little effort, little undesired
overhead, and by not imposing design restrictions on the application by
virtue of the library's own design.

Tango is intended to provide a framework and style guide for application
programming more than to include a tool for every job.  This is the true
reason for all the interface modules--they allow the user to build upon
the library in a way which will most likely be portable to other
applications.  At the same time, Tango avoids hidden costs wherever
possible.  Almost no memory allocations are performed behind the scenes,
exceptions are not used as a means of flow control, and so on.  And
finally, the library is divided into a very granular set of modules to
allow the user to link only the code she actually intends to use.

However, this aim towards customizability does increase the learning
curve associated with Tango.  Often it is not obvious just what to
import to perform simple operations, and it is often necessary to import
quite a few modules for an average task.  Also, some users find the lack
of convenience functions somewhat daunting.  These are all areas where
we are trying to improve Tango, but I personally feel that such an
effort can only ever be moderately successful.  This is because, as I
said earlier, every application has slightly different requirements, and
such convenience functions must necessarily assume a specific set of
requirements.  So I would expect such functions to be most useful to a
novice programmer and for one-off projects rather than for

Sorry for being so long winded, but this is the basic rationale behind
Tango's current design.  Given this, I think our greatest challenge is
probably making the library more accessible to new users.  If you or
anyone else has suggestions for this or anything else, then please let
us know either here or in the Tango forums.  I deal almost exclusively
with rather obscure parts of the library, so I tend to forget about the
high-level issues people face with Tango.

Here's an example from my porting of OpenMesh from C++ to D.  OpenMesh
has a class OpenMesh::IO::Options defined in the file
OpenMesh/Core/IO/Options.hh.  Trying to make as few changes as possible,
I named the module OpenMesh.Core.IO.Options.  But it's been annoying me
to no end because "Options" is such a generic name I never want to
import that into my main namespace.  But I think that as an FQN it's a
great name, except that the actual class is called ...IO.Options.Options.

I'll admit that the double name "Options.Options" thing drives me crazy
sometimes.  But I haven't come up with any language feature to improve
on that.  So far, I just use selective imports, aliasing, etc, to make
my code more compact.

Sean

Nov 18 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Sean Kelly wrote:

However, this aim towards customizability does increase the learning
curve associated with Tango.  Often it is not obvious just what to
import to perform simple operations, and it is often necessary to import
quite a few modules for an average task.  Also, some users find the lack
of convenience functions somewhat daunting.  These are all areas where
we are trying to improve Tango, but I personally feel that such an
effort can only ever be moderately successful.  This is because, as I
said earlier, every application has slightly different requirements, and
such convenience functions must necessarily assume a specific set of
requirements.  So I would expect such functions to be most useful to a
novice programmer and for one-off projects rather than for

Sorry for being so long winded, but this is the basic rationale behind
Tango's current design.  Given this, I think our greatest challenge is
probably making the library more accessible to new users.  If you or
anyone else has suggestions for this or anything else, then please let
us know either here or in the Tango forums.  I deal almost exclusively
with rather obscure parts of the library, so I tend to forget about the
high-level issues people face with Tango.

I'll admit that the double name "Options.Options" thing drives me crazy
sometimes.  But I haven't come up with any language feature to improve
on that.  So far, I just use selective imports, aliasing, etc, to make
my code more compact.

Asking for a feature where class package.Options.Options can be accessed
as just package.Options seems a decent idea at first -- the same trick
works for templates after all -- but I don't think it would pan out.
Other than that I don't see any other obvious language-level changes
that would fix it.  So maybe we're stuck with Options.Options.

One thing that might help make long package names seem less annoying
generally would be aliases for packages, or a package "with".

alias tango.util.collection TUC;
import TUC.ArrayBag;

Or

with (tango.util.collection) {
import ArrayBag;
}

Or

Given that you _can_ have "Net.d" and "net/" in the same directory,
thanks to Tango's naming convention, maybe tango could provide some
coarser granularity imports via up-cased directory names.  So "import
tango.Net" would give you all the commonly needed net stuff.   "import
tango.net.Cluster" would give you the important stuff from cluster/*.d

I guess it's not so different from the "all.d"  But I think it has more
legs than all.d.  With all.d you're pretty much promising that it's
going to have everything, and it better be everything or people will be
confused why "import tango.net.all" doesn't really import *everything*
from tango.net.  If you need variations, you're stuck.  And making a
convention of other "all"-like modules gets you into a wierd area of
violating your own style conventions whereby modules should be
uppercase.   Whereas you could easily have variations with what I'm
suggesting: "import tango.Net" -- all major tango.net stuff, "import
tango.NetBase" just the fundamental net stuff without all the subdirs.

Just an idea.  Not sure how much I like it not having used Tango much.

--bb

Nov 18 2007
Walter Bright <newshound1 digitalmars.com> writes:
Bill Baxter wrote:
Asking for a feature where class package.Options.Options can be accessed
as just package.Options seems a decent idea at first -- the same trick
works for templates after all -- but I don't think it would pan out.

You're right, templates do that, but it's a risky feature because it's
essentially a special case hack. Anytime you do something like that, it
can have subtle, unintended consequences.

My dislike of it has been one of the motivators for changing the syntax:

template Foo(T)
{
class Foo
{
...
}
}

has become:

class Foo(T)
{
...
}

where the hack is not necessary.

Nov 19 2007
Jari-Matti =?ISO-8859-1?Q?M=E4kel=E4?= <jmjmak utu.fi.invalid> writes:
Walter Bright wrote:

Bill Baxter wrote:
Asking for a feature where class package.Options.Options can be accessed
as just package.Options seems a decent idea at first -- the same trick
works for templates after all -- but I don't think it would pan out.

You're right, templates do that, but it's a risky feature because it's
essentially a special case hack. Anytime you do something like that, it
can have subtle, unintended consequences.

My dislike of it has been one of the motivators for changing the syntax:

template Foo(T)
{
class Foo
{
...
}
}

has become:

class Foo(T)
{
...
}

where the hack is not necessary.

You could have made class Foo(T) {} a synonym for anonym template + class
declaration. Still there's the problem that you may sometimes want to
change the nested symbol type based on template parameters so the special
case trick is still needed:

template Sacrifice(int i) {
static if (i == 666)
class Virgin {}
else
class Goat {}
}

The c++ way would avoid the special case, but I guess the reason for static
if was that it's "easier". What can you do, templates are damn verbose a
language for doing functional stuff.. I personally don't like the static if
since it tends to add redundancy - you need to write the same alias/const
foo = blahblah several times. You could loan syntax from functional
languages, but it might be hard to accommodate to a C-like language.

Nov 19 2007
Don Clugston <dac nospam.com.au> writes:
Bill Baxter wrote:
Sean Kelly wrote:
Bill Baxter wrote:

Excellent flame-free technical post addressing the issues Sean.  Thanks.

I suppose one could argue that following the Java approach in Tango
results in unneeded redundancies, such as the DeviceConduit module
containing a DeviceConduit class, but again, I would argue that
choosing an arbitrary name to avoid these redundancies would reduce
clarity.  As it is, I know that if I want to use a DeviceConduit in my
app, I just have to import tango.io.DeviceConduit.  There is no need
to remember that the class actually lives in tango.io.blah instead.

That does seem useful.  But is that true for every public class?  It may
be working in Tango, but generally D doesn't really lend itself to
Java's one-file==one-class.  (because D's only way to achieve 'friends'
is to put two classes in the same file).  Also in Tango I see you have
tango.math.Math which doesn't contain any class called "Math".

Quite true -- the fact that D allows free functions means that Java styles are
not sufficient.
BTW - it used to be called tango.math.Core, the idea being that any library
could have its basic functions in a file called 'Core.d', but unfortunately
there were linker issues (can't have two obj files both called core.obj).

Nov 19 2007
Bill Baxter <dnewsgroup billbaxter.com> writes:
Don Clugston wrote:
Bill Baxter wrote:
Sean Kelly wrote:
Bill Baxter wrote:

Excellent flame-free technical post addressing the issues Sean.  Thanks.

I suppose one could argue that following the Java approach in Tango
results in unneeded redundancies, such as the DeviceConduit module
containing a DeviceConduit class, but again, I would argue that
choosing an arbitrary name to avoid these redundancies would reduce
clarity.  As it is, I know that if I want to use a DeviceConduit in
my app, I just have to import tango.io.DeviceConduit.  There is no
need to remember that the class actually lives in tango.io.blah instead.

That does seem useful.  But is that true for every public class?  It
may be working in Tango, but generally D doesn't really lend itself to
Java's one-file==one-class.  (because D's only way to achieve
'friends' is to put two classes in the same file).  Also in Tango I
see you have tango.math.Math which doesn't contain any class called
"Math".

Quite true -- the fact that D allows free functions means that Java
styles are not sufficient.
BTW - it used to be called tango.math.Core, the idea being that any
library could have its basic functions in a file called 'Core.d', but
unfortunately there were linker issues (can't have two obj files both
called core.obj).

Oh dang, I've been using dsss for so long now that I had blissfully
forgotten about that particular D issue.  :-)

--bb

Nov 19 2007
Sean Kelly <sean f4.ca> writes:
Don Clugston wrote:

Quite true -- the fact that D allows free functions means that Java
styles are not sufficient.
BTW - it used to be called tango.math.Core, the idea being that any
library could have its basic functions in a file called 'Core.d', but
unfortunately there were linker issues (can't have two obj files both
called core.obj).

Technically, you can, so long as the files are not in the same
directory.  But I'll grant that the errors can be confusing.  It
certainly complicated the Ares build process.

Sean

Nov 19 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Janice Caron wrote:
On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

I'll say this here, for want of a better place.

If there were 2 versions of Tango, the current "Offical" version and one like
Janice's that comes closer to my own stylistic preferences, and that all the
fuctionality was the same, only the identifiers changed, I'd use Janice's
version, even if it was a few steps behind in development.

I don't know how many people find the case issue a sticking point, but I do,
and I am reluctant to use a library with such a different style not because it
is ugly in its self, but because it clashes with my own style, making my code

Keep up the good work Janice!

A...

Nov 18 2007
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote:
If there were 2 versions of Tango, the current "Offical" version and one like
Janice's

To be honest, I never actually intended to make this version public -
I just wanted it for myself, so that I could use Tango's streams and
collection classes and cryptographic hash functions, without having to
ditch D2.007 or Phobos. So far I've got it working with about half of
the examples that interest me, and it took three or four days, so give
it another week and I'll be done.

But that said, I guess I could let other people see it if they want.
All the original copyright notices are still in there intact so the
original programmers get their due credit. But my version isn't really
"professional". I mean, it's not been tested on Mac or Linux, for a
start. I also don't promise to maintain it, except to make it work
with D2.008+ with the new const syntax.

Nov 18 2007
On 11/18/07, Janice Caron <caron800 googlemail.com> wrote:
To be honest, I never actually intended to make this version public -
I just wanted it for myself, so that I could use Tango's streams and
collection classes and cryptographic hash functions, without having to
ditch D2.007 or Phobos. So far I've got it working with about half of
the examples that interest me, and it took three or four days, so give
it another week and I'll be done.

In fact, to be absolutely clear, I didn't start doing this because I
didn't like the style stuff - I started this because I wanted to use
it. Or at least, bits of it. (without having to give up D2.007 or
Phobos).

I changed the module names /because/ it was just for me. I figured, if
no one else is ever going to see it, who was going to care? Might as
well use a style I like. That's all.

I posted about it here in the spirit of "Ooh this is cool. Look what
you can do".

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Janice Caron wrote:
On 11/18/07, Janice Caron <caron800 googlemail.com> wrote:
To be honest, I never actually intended to make this version public -
I just wanted it for myself, so that I could use Tango's streams and
collection classes and cryptographic hash functions, without having to
ditch D2.007 or Phobos. So far I've got it working with about half of
the examples that interest me, and it took three or four days, so give
it another week and I'll be done.

In fact, to be absolutely clear, I didn't start doing this because I
didn't like the style stuff - I started this because I wanted to use
it. Or at least, bits of it. (without having to give up D2.007 or
Phobos).

I changed the module names /because/ it was just for me. I figured, if
no one else is ever going to see it, who was going to care? Might as
well use a style I like. That's all.

I posted about it here in the spirit of "Ooh this is cool. Look what
you can do".

Regardless of your motivations, I'm sill interested in the results.

A...

Nov 18 2007
Phango <Phango Phango.com> writes:
yup - i'd do that too

Alix Pexton Wrote:

Janice Caron wrote:
On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

I'll say this here, for want of a better place.

If there were 2 versions of Tango, the current "Offical" version and one like
Janice's that comes closer to my own stylistic preferences, and that all the
fuctionality was the same, only the identifiers changed, I'd use Janice's
version, even if it was a few steps behind in development.

I don't know how many people find the case issue a sticking point, but I do,
and I am reluctant to use a library with such a different style not because it
is ugly in its self, but because it clashes with my own style, making my code

Keep up the good work Janice!

A...


Nov 18 2007
Christopher Wright <dhasenan gmail.com> writes:
Alix Pexton wrote:
Janice Caron wrote:
On 11/17/07, Kris <foo bar.com> wrote:
There's a fair chance the poster below is actually Janice,

Who? What?

Don't insult me.

My opinions - sure - you can insult those. Not a problem there. But
don't insult /me/. Ad hominem is just downright offensive.

I'll say this here, for want of a better place.

If there were 2 versions of Tango, the current "Offical" version and one
like Janice's that comes closer to my own stylistic preferences, and
that all the fuctionality was the same, only the identifiers changed,
I'd use Janice's version, even if it was a few steps behind in development.

I think it shouldn't be too difficult to arrange an automated system for
doing that. It could support any number of coding styles. The issue is
fragmentation: you're using Tango-(phobos style), and I'm using
Tango-(C# style), and Fredchook's using Tango-(Java style), and we can't
compile each others' code.

The solution would be using lots of aliases. To some extent, this can be
accomplished via some CTFE/mixin-based plating, something like:

string phobosAliases(T)() {
string ret = "";
foreach (methodName; __traits(allMembers, T)) {
ret ~= "alias " ~ methodName ~ " " ~ toPhobosCase(methodName) ~ ";\n"
}
return ret;
}

class HashMap {
...
mixin phobosAliases!(HashMap);
}

Well, that would be if phobos didn't use the java style for class
members. Given that the matter is just module-level variables, the
aliasing will have to be manual. (And case-insensitive imports would be
nice.) But to support C# style, for instance, such a template would work.

I don't know how many people find the case issue a sticking point, but I
do, and I am reluctant to use a library with such a different style not
because it is ugly in its self, but because it clashes with my own
style, making my code ugly and unreadable.

Keep up the good work Janice!

A...


Nov 18 2007
renoX <renosky free.fr> writes:
Kris a écrit :
There's a fair chance the poster below is actually Janice, but just in case
there really is someone voicing an honest opinion there, read on ...

Uh? That's my honest opinion: 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)

Linux kernel developers have even made a Perl script to ensure that new
developers respect their "style"..

The exception is some rare case where the style is truly stupid, in
which case you should first convince the authors to change their style,
but here for the module naming, this isn't the case: this change was a
gratuitous one.

renoX

What many people fail to realize is that software doesn't survive without
nurture. In fact, when you forcibly freeze software, it tends to die quite
quickly (this is what happened to Simula, for those who follow language
history, and it's somewhat relevant here since Simula is perhaps the closest
relative to D).

The take-home message is that Tango will continue to develop, grow, improve,
mature, in a non-static fashion. If anyone wants to chase that with a
redundant copy, that's their folly. Making a copy of Tango functionality is
only inviting more work for yourselves, and generating out-of-date
functionality for others to operate with. Isn't that obvious?

The recommendation is this: if you'd like something changed within Tango,
then request it. We can't always please everyone, but we do manage to make a
lot of people happy with the (often real-time) changes we do make. Having
said that, requesting sweeping stylistic changes, based purely upon personal
preference, is likely to conflict with the personal preference of others.
It's very hard to resolve such a dilemma, as I'm sure everyone can
understand.

- Kris

"phango" <phango phangowant.com> wrote in message
news:fhnplh$1cs3$1 digitalmars.com...
i love that - please release it to us all!
can't wait to get it for all the reasons you put forth.


Nov 18 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
renoX wrote:

There's a fair chance the poster below is actually Janice, but just in
case there really is someone voicing an honest opinion there, read on ...

Uh? That's my honest opinion: 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)

Indeed, and Tango is quite a different project from Phobos (not counting the
runtime).

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 18 2007
renoX <renosky free.fr> writes:
Lars Ivar Igesund a Ã©crit :
renoX wrote:

There's a fair chance the poster below is actually Janice, but just in
case there really is someone voicing an honest opinion there, read on ...

Uh? That's my honest opinion: 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)

Indeed, and Tango is quite a different project from Phobos (not counting the
runtime).

*Sigh*, would you have a look at the big picture please?

People wants to use both Tango and Phobos, that's why there have been
complaints of incompatibility between both.

Tango will be made compatible with Phobos in D2.0, that's very nice but
one step even better than compatibility is coherence.

Phobos is the default standard library, so the true question is not "why
project XXX should use the same way as Phobos?" but "why project XXX
didn't use the 'Phobos way'?".

A valid answer could be "this part of Phobos sucks because YYY", that
would be okay: nobody claimed that Phobos is perfect, just that it is
the default.

So in this case, why Phobos convention of module naming isn't good enough?
For me, it is.

Regards,
renoX

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
renoX wrote:
Lars Ivar Igesund a Ã©crit :
renoX wrote:

There's a fair chance the poster below is actually Janice, but just in
case there really is someone voicing an honest opinion there, read
on ...

Uh? That's my honest opinion: 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)

Indeed, and Tango is quite a different project from Phobos (not
counting the
runtime).

*Sigh*, would you have a look at the big picture please?

People wants to use both Tango and Phobos, that's why there have been
complaints of incompatibility between both.

Tango will be made compatible with Phobos in D2.0, that's very nice but
one step even better than compatibility is coherence.

Phobos is the default standard library, so the true question is not "why
project XXX should use the same way as Phobos?" but "why project XXX
didn't use the 'Phobos way'?".

A valid answer could be "this part of Phobos sucks because YYY", that
would be okay: nobody claimed that Phobos is perfect, just that it is
the default.

So in this case, why Phobos convention of module naming isn't good enough?
For me, it is.

Regards,
renoX

I've not used every part of Phobos, and some parts of it do grate a little, but
I do not find it confusing the way that I sometimes do with Tango. I have
notthing at all against the use of CamelCase, but I think that it should be
used in different ways in different places. I just feel that it is bad practice
to have the same naming scheme for modules and classes.

A...

Nov 18 2007
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote:
I have notthing at all against the use of CamelCase

I thought camel case was when every word /except/ the first was
capitalised (because it's got humps in the middle, no?). likeThis.
Examples are "opCall" and "toString".

If the first word is also capitalised, I believe that's called
titlecase (because that's what book titles do, more or less). Examples
are "BufferedStream" and "DirIterator".

I'm not sure what "Stdout" is. By my reckoning, stdout is two words -
std (short for standard) and out (short for output). So I figure,
camelcase would be "stdOut" and titlecase would be "StdOut". I guess
some folk must just count it as one word.

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Janice Caron wrote:
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote:
I have notthing at all against the use of CamelCase

I thought camel case was when every word /except/ the first was
capitalised (because it's got humps in the middle, no?). likeThis.
Examples are "opCall" and "toString".

If the first word is also capitalised, I believe that's called
titlecase (because that's what book titles do, more or less). Examples
are "BufferedStream" and "DirIterator".

I'm not sure what "Stdout" is. By my reckoning, stdout is two words -
std (short for standard) and out (short for output). So I figure,
camelcase would be "stdOut" and titlecase would be "StdOut". I guess
some folk must just count it as one word.

It was my understanding that CamelCase was the catch all term for all
space-eliminating mechanisms that use capitals to denote the beginning of a new
word, whether or not the first word is capitalised.

A...

Nov 18 2007
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote:
It was my understanding that CamelCase was the catch all term for all
space-eliminating mechanisms that use capitals to denote the beginning of a new
word, whether or not the first word is capitalised.

Hey, according to Wikipedia, you're right! Well, you live and learn. I
stand corrected.

Nov 18 2007
Don Clugston <dac nospam.com.au> writes:
Janice Caron wrote:
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote:
It was my understanding that CamelCase was the catch all term for all
space-eliminating mechanisms that use capitals to denote the beginning of a new
word, whether or not the first word is capitalised.

Hey, according to Wikipedia, you're right! Well, you live and learn. I
stand corrected.

Yes. It's really unfortunate, because it means that CamelCase = union{
PascalCase,
theConventionThatShouldBeCalledCamelCaseButDoesntHaveANameBecauseCamelCa
eIncludesPascalCase
}.

Nov 19 2007
Robert DaSilva <sp.unit.262+digitalmars gmail.com> writes:
Don Clugston wrote:
Janice Caron wrote:
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_>
wrote:
It was my understanding that CamelCase was the catch all term for all
space-eliminating mechanisms that use capitals to denote the
beginning of a new word, whether or not the first word is capitalised.

Hey, according to Wikipedia, you're right! Well, you live and learn. I
stand corrected.

Yes. It's really unfortunate, because it means that CamelCase = union{
PascalCase,
theConventionThatShouldBeCalledCamelCaseButDoesntHaveANameBecauseCamelCaseIncludesPascalCase
}.


Nov 19 2007
Robert DaSilva wrote:
Don Clugston wrote:
Janice Caron wrote:
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_>
wrote:
It was my understanding that CamelCase was the catch all term for all
space-eliminating mechanisms that use capitals to denote the
beginning of a new word, whether or not the first word is capitalised.

Hey, according to Wikipedia, you're right! Well, you live and learn. I
stand corrected.

Yes. It's really unfortunate, because it means that CamelCase = union{
PascalCase,
theConventionThatShouldBeCalledCamelCaseButDoesntHaveANameBecauseCamelCaseIncludesPascalCase
}.

The terms I've heard and use are lowerCamelCase and UpperCamelCase.

--
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi

Nov 20 2007
Oskar Linde <oskar.lindeREM OVEgmail.com> writes:
Matti Niemenmaa wrote:
Robert DaSilva wrote:
Don Clugston wrote:
Janice Caron wrote:
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_>
wrote:
It was my understanding that CamelCase was the catch all term for all
space-eliminating mechanisms that use capitals to denote the
beginning of a new word, whether or not the first word is capitalised.

Hey, according to Wikipedia, you're right! Well, you live and learn. I
stand corrected.

Yes. It's really unfortunate, because it means that CamelCase = union{
PascalCase,
theConventionThatShouldBeCalledCamelCaseButDoesntHaveANameBecauseCamelCaseIncludesPascalCase
}.

The terms I've heard and use are lowerCamelCase and UpperCamelCase.

Or CamelCase and dromedarCase :)

--
Oskar

Nov 20 2007
Oskar Linde wrote:
Matti Niemenmaa wrote:
Robert DaSilva wrote:
Don Clugston wrote:
Janice Caron wrote:
On 11/18/07, Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_>
wrote:
It was my understanding that CamelCase was the catch all term for all
space-eliminating mechanisms that use capitals to denote the
beginning of a new word, whether or not the first word is
capitalised.

Hey, according to Wikipedia, you're right! Well, you live and learn. I
stand corrected.

Yes. It's really unfortunate, because it means that CamelCase = union{
PascalCase,
theConventionThatShouldBeCalledCamelCaseButDoesntHaveANameBecauseCamelCaseIncludesPascalCase

}.

The terms I've heard and use are lowerCamelCase and UpperCamelCase.

Or CamelCase and dromedarCase :)

Yes, that's another (although isn't it dromedaryCase?). But I don't like the
term dromedaryCase since if it's gotMoreThanOneHump it's not a dromedary. :-)

--
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi

Nov 20 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
renoX wrote:

Lars Ivar Igesund a Ã©crit :
renoX wrote:

There's a fair chance the poster below is actually Janice, but just in
case there really is someone voicing an honest opinion there, read on
...

Uh? That's my honest opinion: 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)

Indeed, and Tango is quite a different project from Phobos (not counting
the runtime).

*Sigh*, would you have a look at the big picture please?

People wants to use both Tango and Phobos, that's why there have been
complaints of incompatibility between both.

Tango will be made compatible with Phobos in D2.0, that's very nice but
one step even better than compatibility is coherence.

Phobos is the default standard library, so the true question is not "why
project XXX should use the same way as Phobos?" but "why project XXX
didn't use the 'Phobos way'?".

A valid answer could be "this part of Phobos sucks because YYY", that
would be okay: nobody claimed that Phobos is perfect, just that it is
the default.

So in this case, why Phobos convention of module naming isn't good enough?
For me, it is.

I think it was already said, but we think that for any larger project
CamelCase is more readable, something that also apply to module names. I
also think it is a perfectly valid reason to distinguish a module name from
the package it is in.

Also note that (partially in reply to Pexton too) although someone wants to
use both Tango and Phobos in the same project, there isn't any technical
reason to do so beyond possibly some functionality not being present in
both places. This tends to be fixed in Tango if there is a compelling
reason to do so, though.

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Lars Ivar Igesund wrote:
renoX wrote:

Lars Ivar Igesund a Ã©crit :
renoX wrote:

There's a fair chance the poster below is actually Janice, but just in
case there really is someone voicing an honest opinion there, read on
...

Uh? That's my honest opinion: 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)

Indeed, and Tango is quite a different project from Phobos (not counting
the runtime).

*Sigh*, would you have a look at the big picture please?

People wants to use both Tango and Phobos, that's why there have been
complaints of incompatibility between both.

Tango will be made compatible with Phobos in D2.0, that's very nice but
one step even better than compatibility is coherence.

Phobos is the default standard library, so the true question is not "why
project XXX should use the same way as Phobos?" but "why project XXX
didn't use the 'Phobos way'?".

A valid answer could be "this part of Phobos sucks because YYY", that
would be okay: nobody claimed that Phobos is perfect, just that it is
the default.

So in this case, why Phobos convention of module naming isn't good enough?
For me, it is.

I think it was already said, but we think that for any larger project
CamelCase is more readable, something that also apply to module names. I
also think it is a perfectly valid reason to distinguish a module name from
the package it is in.

Also note that (partially in reply to Pexton too) although someone wants to
use both Tango and Phobos in the same project, there isn't any technical
reason to do so beyond possibly some functionality not being present in
both places. This tends to be fixed in Tango if there is a compelling
reason to do so, though.

Firstly, I think it quite rude to refer to me by my surname alone, even if you
are unsure if you are making the correct assumption it would be polite to
prefix Mr.

Secondly, my gripe has nothing to do with using Tango and Phobos together and I
don't know where in what I have written I might have given that impression.

I will give you credit, Tango is very consistent in its style and much of the
code is very elegant, but I believe very strongly that the decision to use
mixed case identifiers for BOTH module names AND classes was a mistake.

All the other issues I have with the layout of the library stem from this, but
it seems that you are an immovable object, and alas I am not an unstoppable
force.

I wish you all the best with your library...

A...

Nov 18 2007
Lars Ivar Igesund <larsivar igesund.net> writes:
Alix Pexton wrote:

Lars Ivar Igesund wrote:
renoX wrote:

Lars Ivar Igesund a Ã©crit :
renoX wrote:

There's a fair chance the poster below is actually Janice, but just
in case there really is someone voicing an honest opinion there, read
on ...

Uh? That's my honest opinion: 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)

Indeed, and Tango is quite a different project from Phobos (not
counting the runtime).

*Sigh*, would you have a look at the big picture please?

People wants to use both Tango and Phobos, that's why there have been
complaints of incompatibility between both.

Tango will be made compatible with Phobos in D2.0, that's very nice but
one step even better than compatibility is coherence.

Phobos is the default standard library, so the true question is not "why
project XXX should use the same way as Phobos?" but "why project XXX
didn't use the 'Phobos way'?".

A valid answer could be "this part of Phobos sucks because YYY", that
would be okay: nobody claimed that Phobos is perfect, just that it is
the default.

So in this case, why Phobos convention of module naming isn't good
enough? For me, it is.

I think it was already said, but we think that for any larger project
CamelCase is more readable, something that also apply to module names. I
also think it is a perfectly valid reason to distinguish a module name
from the package it is in.

Also note that (partially in reply to Pexton too) although someone wants
to use both Tango and Phobos in the same project, there isn't any
technical reason to do so beyond possibly some functionality not being
present in both places. This tends to be fixed in Tango if there is a
compelling reason to do so, though.

Firstly, I think it quite rude to refer to me by my surname alone, even if
you are unsure if you are making the correct assumption it would be polite
to prefix Mr.

Deeply sorry for this Alix, I usually get such things right, and I don't
tend to use mother language as an excuse for such errors. So, sorry again.

Secondly, my gripe has nothing to do with using Tango and Phobos together
and I don't know where in what I have written I might have given that
impression.

Right, misinterpreted the section where you said it conflicted with your
style. I took this to mean that you followed Phobos' style, but apparently
it did not.

I will give you credit, Tango is very consistent in its style and much of
the code is very elegant, but I believe very strongly that the decision to
use mixed case identifiers for BOTH module names AND classes was a
mistake.

All the other issues I have with the layout of the library stem from this,
but it seems that you are an immovable object, and alas I am not an
unstoppable force.

We're not immovable, we just don't understand the issue :)

I wish you all the best with your library...

Thanks!

--
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango

Nov 18 2007
"Kris" <foo bar.com> writes:
"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_>

I will give you credit, Tango is very consistent in its style and much of
the code is very elegant, but I believe very strongly that the decision to
use mixed case identifiers for BOTH module names AND classes was a
mistake.

Thanks, Alix, for offering an honest perspective. It's a shame that it
conflicts so much with your personal preferences. However, fwiw, you'd only
ever see that in the import section at the top of a module, so perhaps it's
not so bad? You can also use import renaming, or you can group Tango package
imports into a single wrapper import (which lots of people have already

# import tango.io.stream.all;

All the other issues I have with the layout of the library stem from this,
but it seems that you are an immovable object, and alas I am not an
unstoppable force.

That's not the case at all. As I've said a couple of times in this thread:
as much as we might like to, we can't go making sweeping changes to the
library based upon a personal preference, because such changes would
inevitably conflict with the personal preference of others. There's no way
to resolve that dillema. Period. So, it's not that we're immovable at all.
In fact, we're perhaps 'extremely' open to change, and often turn things
around in real-time.

Cheers;

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Kris wrote:
"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_>

I will give you credit, Tango is very consistent in its style and much of
the code is very elegant, but I believe very strongly that the decision to
use mixed case identifiers for BOTH module names AND classes was a
mistake.

Thanks, Alix, for offering an honest perspective. It's a shame that it
conflicts so much with your personal preferences. However, fwiw, you'd only
ever see that in the import section at the top of a module, so perhaps it's
not so bad? You can also use import renaming, or you can group Tango package
imports into a single wrapper import (which lots of people have already

# import tango.io.stream.all;

All the other issues I have with the layout of the library stem from this,
but it seems that you are an immovable object, and alas I am not an
unstoppable force.

That's not the case at all. As I've said a couple of times in this thread:
as much as we might like to, we can't go making sweeping changes to the
library based upon a personal preference, because such changes would
inevitably conflict with the personal preference of others. There's no way
to resolve that dillema. Period. So, it's not that we're immovable at all.
In fact, we're perhaps 'extremely' open to change, and often turn things
around in real-time.

Cheers;

Its not as simple as personal preference, my preferences nor anyone elses are
the issue here.

I'm going to spell this out as carefully as I can even though I am quite tired,

As I understand it, your argument for using CamelCase for your module names is
two fold.

1) Importing "tango.Foo" gives one access to the class within "Foo" called "Foo"

2) Using "PenIsland" (where Foo and Bar are real words with real meanings)
instead of "penisland" means the meaning can not be mistaken for "penis land".
(actual website btw)

Now, by far the vast majority of module names that I have encountered outside
of Tango are either abstract or a single word, and DO NOT share the name with
any of the classes inside. This makes it a convention, and one that I believe
has a very good track record for being easy to understand and with good reason.

In D, I know I am importing modules, not individual classes, I expect a module
that I have imported to have in it some related classes and functions, some of
which I might not use and will be pruned by the linker, but that they will all
have names that are unique identifiers.

In Java, I know that I can import whole packages with .* (in which case I must
take care within my own namespace not to shadow in imported class) or I can
import an individual class and get just that class. When I first looked at
Tango I though... "yay, they guys have given me a way of importing individual
classes, albeit via a bit of a messy namespace kludge," but I began to realise
that all was not quite as it seamed.

Sometimes a Tango import brings along a bunch of other classes that I wasn't
expecting, might have been added since I last looked at the library source and
suddenly introduce identifiers that might be in my code. Thanks to D being D,
my code at least does not compile, I hope!

So you see, or I hope you do, that the CamelCase is just the tip of the issue
as I see it, and that mixing up modules that are just modles, modules that are
just classes and modules that are both, can create confusion and introduce
errors.

Maybe its not Tango's fault at all, maybe D is wrong about the correlation
between namespaces, modules and classes and you are just doing the best you can
within the system.

I really don't like having to carefully alias module names and classes so that
free functions and static methods don't look the same or having to be uber
familiar with the source of the library to know which modules contain multiple
classes and which contain none at all.

In another language, your scheme might work fine, and this issue would not crop
up, but this is D. If Walter had, despite his good intentions, implemented D so
that it was more confusing to use than C++, its very unlikely that we'd
discussing this at all. So it alarms me that Tango is promoted as THEE
alternative library when the way it works and the way it is inflexibly
conglomerated is so unlike the language itself.

I know about wrapping and aliasing the imports and all that sort of thing, but
I think you will agree that goes against one of the key principles that sits at
the foundations of "the D mentality". That is, that the easiest way to do
something should be the right way to do it, (or perhaps just conversely, that
the hard way should be the wrong way.) It doesn't matter how politely you ask,
the consumers are not always going to jump through hoops to make their code
readable, and in the end all your suggested solution does is move the problem
to another location, and in some cases actually hide it completely.

On the occasions when I have used Tango, I feel like I am fighting it, where as
Phobos, the Java runtime and maybe 75% of C++ libraries that I have used seem
much more intuitive. Some of the libraries that I have found easiest to use,
actually really sucked once you looked under the hood, but they had got the
packaging right for their respective language.

I'm not a professional developer, or even really more than just a passtime
programmer, but I do know more than my fair share about marketing. I'm not
trying to sell you my opinions, but with current first impression that I get of
Tango, and the attidude that comes across (intended or otherwise) when I and
others offer constructive feed back, I wonder if you actually want people to
use it at all. It's as if you are writing a library simply for the sake of
writing a library, of perhaps out of some sort of selfish passion to be a
creator, expecting the end user to just use it and be thankful. You have given
up all these ours to make the internals reliable and all those other things,
don't you want people to use the damn thing?

I hope that in all my input here I have at least come across as calm and
respectful, but I'm begging to feel that I can only get my point across by
deviating from that demeanor. I don't know what anyone else thinks, but each
the first thought that enters my head is "gah, that arogant committee of
fools," but I know that you are not fools when it comes to the inner workings
of your code, only where the way that you present it is concerned. And no I did
not jst call you fools, for even the wisest of people can occasionally do
foolish things, just as experts can make descisions that later make them appear
to be amateurs. Its for this reason that most of the time I read the posts and
not who has posted them, and when the topic is not Tango, why I am not
surprised if I later find out where the smarter comments and suggestions come
from.

Metaphorically speaking, if Tango were a member of your preffered sex, they
would probably be rather attractive, but I think it would be dressed in a flour
sack, but pouting like it was Versace's finest, Ditch either the sack or the
attitude, a shy smile and/or jeans and a tee will get you a lot further.

I realise that this has been a rather rambling explanation of the issues as I
see them, and that perhaps fatigue has tainted my logic with a little anger,
but I only want to help you to realise that the very fastidiousness of the
consistency that you have applied to your module naming scheme is the very
thing that actually makes it inconsistent. And if you change nothing else,
change the attitude with which you arrogantly dismiss the genuine concerns of
people who want D as a whole to be a success.

A...

Nov 18 2007
"Kris" <foo bar.com> writes:
Thanks for your considerable treatment of the subject Alix, but I can't
agree with you because I haven't yet made /any/ statement about why Tango
has the style that it does. So, your premise is incorrect to begin with?

Also, you're assigning 'fault' or something to Tango, when in fact Tango has
no choice in the matter. As to the whole thing about Tango modules importing
others, that's just how D operates. Tango is actually very careful about
what it imports: in fact, I've had lengthly and hard debates with people who
want to mix functionality -- functionality that would cause more imports to
be needed where they should be discrete instead. I'm /known/ for being
careful about that, so you're kinda' hitting on the wrong guy here :)

Also, I'm sad to hear you've felt like Tango has been fighting you. That may
be a stylistic thing also, but I don't know. However, I would strongly
encourage you to file tickets for such things since that's an important
concern. Have you done so in the past?

As for the lack of response to feedback: you are so completely wrong. I
don't even know where to start, but instead I'll suggest that you spend some
time on IRC, or simply look at the tickets we fix from the userbase. You
know, maybe you get this idea from the ng? I mean, it seems like the only
time anyone has anything to say about Tango on the ng is is topics like
this - none of it particularly constructive, imo. All the action goes on
over IRC and in dsource. Try it and see?

"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> wrote in message
news:fhqnac$60r$1 digitalmars.com...
Kris wrote:
"Alix Pexton" <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_>

I will give you credit, Tango is very consistent in its style and much
of the code is very elegant, but I believe very strongly that the
decision to use mixed case identifiers for BOTH module names AND classes
was a mistake.

Thanks, Alix, for offering an honest perspective. It's a shame that it
conflicts so much with your personal preferences. However, fwiw, you'd
only ever see that in the import section at the top of a module, so
perhaps it's not so bad? You can also use import renaming, or you can
group Tango package imports into a single wrapper import (which lots of

# import tango.io.stream.all;

All the other issues I have with the layout of the library stem from
this, but it seems that you are an immovable object, and alas I am not
an unstoppable force.

That's not the case at all. As I've said a couple of times in this
thread: as much as we might like to, we can't go making sweeping changes
to the library based upon a personal preference, because such changes
would inevitably conflict with the personal preference of others. There's
no way to resolve that dillema. Period. So, it's not that we're immovable
at all. In fact, we're perhaps 'extremely' open to change, and often turn
things around in real-time.

Cheers;

Its not as simple as personal preference, my preferences nor anyone elses
are the issue here.

I'm going to spell this out as carefully as I can even though I am quite

As I understand it, your argument for using CamelCase for your module
names is two fold.

1) Importing "tango.Foo" gives one access to the class within "Foo" called
"Foo"

2) Using "PenIsland" (where Foo and Bar are real words with real meanings)
instead of "penisland" means the meaning can not be mistaken for "penis
land". (actual website btw)

Now, by far the vast majority of module names that I have encountered
outside of Tango are either abstract or a single word, and DO NOT share
the name with any of the classes inside. This makes it a convention, and
one that I believe has a very good track record for being easy to
understand and with good reason.

In D, I know I am importing modules, not individual classes, I expect a
module that I have imported to have in it some related classes and
functions, some of which I might not use and will be pruned by the linker,
but that they will all have names that are unique identifiers.

In Java, I know that I can import whole packages with .* (in which case I
must take care within my own namespace not to shadow in imported class) or
I can import an individual class and get just that class. When I first
looked at Tango I though... "yay, they guys have given me a way of
importing individual classes, albeit via a bit of a messy namespace
kludge," but I began to realise that all was not quite as it seamed.

Sometimes a Tango import brings along a bunch of other classes that I
wasn't expecting, might have been added since I last looked at the library
source and suddenly introduce identifiers that might be in my code. Thanks
to D being D, my code at least does not compile, I hope!

So you see, or I hope you do, that the CamelCase is just the tip of the
issue as I see it, and that mixing up modules that are just modles,
modules that are just classes and modules that are both, can create
confusion and introduce errors.

Maybe its not Tango's fault at all, maybe D is wrong about the correlation
between namespaces, modules and classes and you are just doing the best
you can within the system.

I really don't like having to carefully alias module names and classes so
that free functions and static methods don't look the same or having to be
uber familiar with the source of the library to know which modules contain
multiple classes and which contain none at all.

In another language, your scheme might work fine, and this issue would not
crop up, but this is D. If Walter had, despite his good intentions,
implemented D so that it was more confusing to use than C++, its very
unlikely that we'd discussing this at all. So it alarms me that Tango is
promoted as THEE alternative library when the way it works and the way it
is inflexibly conglomerated is so unlike the language itself.

I know about wrapping and aliasing the imports and all that sort of thing,
but I think you will agree that goes against one of the key principles
that sits at the foundations of "the D mentality". That is, that the
easiest way to do something should be the right way to do it, (or perhaps
just conversely, that the hard way should be the wrong way.) It doesn't
matter how politely you ask, the consumers are not always going to jump
through hoops to make their code readable, and in the end all your
suggested solution does is move the problem to another location, and in
some cases actually hide it completely.

On the occasions when I have used Tango, I feel like I am fighting it,
where as Phobos, the Java runtime and maybe 75% of C++ libraries that I
have used seem much more intuitive. Some of the libraries that I have
found easiest to use, actually really sucked once you looked under the
hood, but they had got the packaging right for their respective language.

I'm not a professional developer, or even really more than just a passtime
programmer, but I do know more than my fair share about marketing. I'm not
trying to sell you my opinions, but with current first impression that I
get of Tango, and the attidude that comes across (intended or otherwise)
when I and others offer constructive feed back, I wonder if you actually
want people to use it at all. It's as if you are writing a library simply
for the sake of writing a library, of perhaps out of some sort of selfish
passion to be a creator, expecting the end user to just use it and be
thankful. You have given up all these ours to make the internals reliable
and all those other things, don't you want people to use the damn thing?

I hope that in all my input here I have at least come across as calm and
respectful, but I'm begging to feel that I can only get my point across by
deviating from that demeanor. I don't know what anyone else thinks, but
each time I read a new anouncement or a developer's reply to a Tango
related thread, the first thought that enters my head is "gah, that
arogant committee of fools," but I know that you are not fools when it
comes to the inner workings of your code, only where the way that you
present it is concerned. And no I did not jst call you fools, for even the
wisest of people can occasionally do foolish things, just as experts can
make descisions that later make them appear to be amateurs. Its for this
reason that most of the time I read the posts and not who has posted them,
and when the topic is not Tango, why I am not surprised if I later find
out where the smarter comments and suggestions come from.

Metaphorically speaking, if Tango were a member of your preffered sex,
they would probably be rather attractive, but I think it would be dressed
in a flour sack, but pouting like it was Versace's finest, Ditch either
the sack or the attitude, a shy smile and/or jeans and a tee will get you
a lot further.

I realise that this has been a rather rambling explanation of the issues
as I see them, and that perhaps fatigue has tainted my logic with a little
anger, but I only want to help you to realise that the very fastidiousness
of the consistency that you have applied to your module naming scheme is
the very thing that actually makes it inconsistent. And if you change
nothing else, change the attitude with which you arrogantly dismiss the
genuine concerns of people who want D as a whole to be a success.

A...


Nov 18 2007
"Kris" <foo bar.com> writes:
"renoX" <renosky free.fr> wrote in message
news:fhpacc$jg3$1 digitalmars.com...

So in this case, why Phobos convention of module naming isn't good enough?
For me, it is.

I suggest you try to answer sean's questions early on in this thread? That

Nov 18 2007
"Kris" <foo bar.com> writes:
"renoX" <renosky 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.

So what is Tango? Why does it exist? This is my perspective only, so take it
for what it is:

Tango is designed to be a complete, robust, cohesive, mature and rational
library of quality comparable to C# or Java. Better in a number of cases,
perhaps currently weaker in others. The goal of Tango has always been to
help D get in the door of the commercial sector and, as such, it is surely a
blessing for D? I mean, there's a /lot/ of work in there. And, regardless of
your stylistic preferences over module names, it is a damn fine example of
both solid D code and what this community is capable of when focused. It is
a community effort after all. If you consider yourself to be a D enthusiast,
then you perhaps ought to be thanking all those Tango folks for all their
hard work instead of pissing on the communal kitchen floor :p

I mean, there's no kickback for the Tango folks on this. It's not like the
Tango folks will somehow retire off it (lol). Instead, there's a lot of
altruism involved (you'd perhaps be shocked at the number of man-hours
involved in Tango - I think it was calculated as ten man-years recently).
Think about it. Yet, here we are bitching about minor stylistic issues
instead. It's refreshing to hear an honest opinion from Alix (apparently a
Tango detractor), about the coherency, clarity and quality of the code in
Tango, because that is actually what /should/ be important. The library
stands as much as an example of how to use D as anything else. It's free,
it's innovative, and it includes some exemplary code from many of the best
minds involved in this community. Look at the list of folks in the Tango
contributor page, and you'll see what I mean.

Basically, if you don't like Tango because it doesn't jive with your notion
of style, that's fine.You really don't have to use it. If you don't like
Tango because of some reason that we can remedy, then please hook up on IRC,
or write a ticket or whatever. You'll find that the Tango folks are usually
incredibly responsive ... even when their spouses would much rather  the
damn computer was switched off.  If you're one of the many, many people who
use already Tango, thanks for all the tickets you've been writing :)

- Kris

Nov 18 2007
"David B. Held" <dheld codelogicconsulting.com> writes:
Kris wrote:
"renoX" <renosky 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
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.

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

Dave

Nov 18 2007
"Kris" <foo bar.com> writes:
"David B. Held" <dheld codelogicconsulting.com> wrote in message
news:fhr0at$g5a$1 digitalmars.com...
Kris wrote:
"renoX" <renosky 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
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!"

Appreciate the insights, Dave, and respect your opinion.  However, you're
assuming Tango was designed to be included in phobos, and that is not the
case. You're also ignoring a number of important factors. For example, Tango
will likely change toUtf8 -> toString in order to satisfy certain
compatability desires. That wouldn't happen with the "put up or shuttup"
notion you discuss. Thus, your premise appears based on something
non-factual and perhaps does not apply here?

Nov 18 2007
Alix Pexton <_a_l_i_x_._p_e_x_t_o_n_ _g_m_a_i_l_._c_o_m_> writes:
Kris wrote:
"David B. Held" <dheld codelogicconsulting.com> wrote in message
news:fhr0at$g5a$1 digitalmars.com...
Kris wrote:
"renoX" <renosky 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
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!"

Appreciate the insights, Dave, and respect your opinion.  However, you're
assuming Tango was designed to be included in phobos, and that is not the
case. You're also ignoring a number of important factors. For example, Tango
will likely change toUtf8 -> toString in order to satisfy certain
compatability desires. That wouldn't happen with the "put up or shuttup"
notion you discuss. Thus, your premise appears based on something
non-factual and perhaps does not apply here?

Well, I went on IRC, through a sleepy haze I think I managed to get my concers
somewhere closer to understood. I still think IRC is an appaling medium for
debate, things can so get lost in the interrruption of another user joining the
channel and too many people talking at once can cause more confussion than
CamelCase module names, but for the time being my inner devil's advocate is
sated.

However...

Tango definately still needs to go on a marketing course...

A...

Nov 18 2007
Lutger <lutger.blijdestijn gmail.com> writes:
David B. Held wrote:
...

The Boost libraries are obviously an example of high quality design and
development process. To be fair, I want to make some remarks about your
analogy:

The C++ standard library is more than conventions and functionality, it
is a highly coherent suite of concepts. This is very different from
Phobos. Boost is compatible with the C++ standard library in a way that
Tango could never be, even if it was a goal from the beginning which it
isn't.

About the development process: Kris does have a record - on this
newsgroup - of caring highly about the D language, and so do other Tango
developers. I don't see how Tango is under review here, but I can
confirm that when it is, or when you make tickets, posts, whatever, the
responses are highly welcoming.

Nov 19 2007
Sean Kelly <sean f4.ca> writes:
Jason House wrote:
Sean Kelly Wrote:
D 1.0 is in maintenance mode now, so Phobos 1.0 isn't likely to change
much, if at all.  D 2.0 is obviously still in flux, and Phobos 2.0 has
already incorporated some of Tango's changes.  It is uncertain what the
final result of the merge will be for D 2.0, but from a code perspective
it is more likely that Phobos 2.0 will end up effectively using the
Tango runtime than vice-versa.  This is because everyone seems to agree
that the Tango runtime is a bit more robust.

I translate that to mean that the merge of Tango and Phobos relies on the
Phobos developers to do the work.  Is Phobos being actively matured?  My
previous impression is that Walter was doing both that and compiler
internals... with most time dedicated to the latter.

Andrei and Brad Roberts are working on Phobos 2.0 in various capacities.
Andrei is focusing on user-level changes, while Brad is looking at the
runtime.  So Phobos is still being actively matured, though likely not
as quickly as Tango.

Is there a timeline when 2.0 versions of phobos and tango will be compatible?
How will the pieces be partitioned?  Will tango be released with new dmd
versions?  Will both libraries adopt the same style (naming conventions,
capitalization, etc...)?

All still yet to be decided, I'm afraid.

Sean

Nov 16 2007