IWETHEY v. 0.3.0 | TODO
1,095 registered users | 0 active users | 0 LpH | Statistics
Login | Create New User
IWETHEY Banner

Welcome to IWETHEY!

New VB - NO CONTINUE STATEMENT!! ARRGG!!!
What kind of brain dead idiot TAKES AWAY a continue statement in a language and tell you that to simulate it you can label the end of the loop and use a GOTO.
New Basic was invented that way
But out of curiosity, why are you using VB.Net when C# is a better fit for the .Net environment?
New Has had "continue" for many years
Those SOBs took it away!

\nVisual Basic .NET does not support the Continue statement of previous\nversions of Visual Basic. However, you can achieve the same\nfunctionality by putting a statement label on the Loop statement and\nbranching to it from the middle of the loop:\n\nDim LoopCounter As Integer = 0\n   Do While LoopCounter < 100\n      LoopCounter += 1\n      Dim SkipToNextIteration As Boolean   ' Local to this loop.\n      ' Processing, which might change value of SkipToNextIteration.\n      If SkipToNextIteration = True Then GoTo EndOfLoop\n      ' More processing if SkipToNextIteration was still False.\nEndOfLoop: Loop ' Acts like Continue.\n


I have no choice in language at this point. Rhe die is cast.
New In VB 6 you have
If SkipToNextIteration = True Then Exit Loop

The functionality still exists in .Net; haven't seen anything in the new textbook to expand on this yet. If I do, I'll let you know.
lincoln
"Windows XP has so many holes in its security that any reasonable user will conclude it was designed by the same German officer who created the prison compound in "Hogan's Heroes." - Andy Ihnatko, Chicago Sun-Times
[link|mailto:bconnors@ev1.net|contact me]
New Exit loop is there
But I did not want to exit, I wanted to bypass the rest of the code in the loop, do the test, and continue.
New Or you COULD...
...use block structuring and never miss the continue:
\nDim LoopCounter As Integer = 0\n   Do While LoopCounter < 100\n      LoopCounter += 1\n      Dim SkipToNextIteration As Boolean   ' Local to this loop.\n      ' Processing, which might change value of SkipToNextIteration.\n      If SkipToNextIteration = False then\n      ' More processing if SkipToNextIteration was still False.\n      End If\n   Loop\n   \n

Its really quite simple.

I've been writing C and C++ for roughly 23 years, and have never used, nor needed, the continue statement.
jb4
shrub\ufffdbish (Am., from shrub + rubbish, after the derisive name for America's 43 president; 2003) n. 1. a form of nonsensical political doubletalk wherein the speaker attempts to defend the indefensible by lying, obfuscation, or otherwise misstating the facts; GIBBERISH. 2. any of a collection of utterances from America's putative 43rd president. cf. BULLSHIT

New In other words, give a "break"! :)
Alex

"If you can control the meaning of words, you can control the people who must use the words." -- Philip K. Dick, US science fiction writer
New No way!
I want to limit the depth of my blocks.
I often will have a series of tests at the
top of a loop that will cause them to "continue".
Your way forces tracking of many begin/end pairs
for no reason.

No continue needed?

I've been pumping my own water fer years. Who needs that them there newfangled indoor plumbing?
New Yet Another Way To Do It
Scoop out the body of the block into a function. That does not nest deeply.

Then structure as jb4 suggested.

Disadvantages: function call overhead and one layer of indirection. Advantages: separating "what" from "why" often leads to better modularization.

Cheers,
Ben
To deny the indirect purchaser, who in this case is the ultimate purchaser, the right to seek relief from unlawful conduct, would essentially remove the word consumer from the Consumer Protection Act
- [link|http://www.techworld.com/opsys/news/index.cfm?NewsID=1246&Page=1&pagePos=20|Nebraska Supreme Court]
New Warning! Possible religious war pending
which I do not want to get into here.

In the concrete example you gave, there is no additional scoping, so your objection is moot.

In response to you're other complaint (the many checks at the top of the loop), you could put the checks into the loop condition itself (with appropriate and'ing); that would not only remove additional begin/end pairs, but would improve your scoping as well.

As far as the "for no reason" is concerned, I've had many instances where indiscriminate breaks/continues have so shattered the flow of the block that you no longer can determine the conditions that got you to a point towards the bottom of the loop, for all the trap-door exits to the block. For me, I consider readibility of the code to be a most sufficient reason. Don't you?
jb4
shrub\ufffdbish (Am., from shrub + rubbish, after the derisive name for America's 43 president; 2003) n. 1. a form of nonsensical political doubletalk wherein the speaker attempts to defend the indefensible by lying, obfuscation, or otherwise misstating the facts; GIBBERISH. 2. any of a collection of utterances from America's putative 43rd president. cf. BULLSHIT

New Nah, this is more important
> In the concrete example you gave,
> there is no additional scoping, so your objection is moot

Coding style should apply to the general case. It is something
that will be applied again and again. Your objection to my objection
is moot.

> you could put the checks into the loop condition itself

A check often includes a series of intermediary steps. I don't
put that kind of logic in a loop condition if I can avoid it.

> indiscriminate breaks/continues

"Indiscriminate" applies to all programming constructs. I don't
like "ELSIF" due to people's "indiscriminate" use. Kill it.
Sounds silly, ehh?

Well placed break/continues allow well structured easy to read
code for me. Targetted "next" allows deep loop jumping in a clear
manner, without the pain of intermediate flag variables cluttering
it up.

So yes, I agree reability is most important.
Adding to the depth of nested IF statements
would push me to add functions, which then slow
down both my perception of the code and the code
itself.

I really love Perl's

next if ($something);

and

next unless ($somthing);

syntax. Good thing Ruby has it.
New Some older languages had those constructs
I remember something like
\n   exit with { }\n

in one of those late-70's languages-du-jour that were coming up about one every week. Never got a chance to use it.

A next if () or next unless (), used judiciously might well aid in readability. However, you haven't addressed the (in)ability to track the conditions that got you to a certain place in the code if there are a large number of trap-doors in the block above it (including those next if () or next unless () constructs).
jb4
shrub\ufffdbish (Am., from shrub + rubbish, after the derisive name for America's 43 president; 2003) n. 1. a form of nonsensical political doubletalk wherein the speaker attempts to defend the indefensible by lying, obfuscation, or otherwise misstating the facts; GIBBERISH. 2. any of a collection of utterances from America's putative 43rd president. cf. BULLSHIT

New That doesn't need to be addressed
Other than to note that if you have complex conditions for deciding when to do X, the resulting code has a minimum associated complexity. There is nothing wrong with what you call "trap-doors" and what I'd call "guard clauses". There is a lot wrong with having a lot of them - however you try to implement them.

There is a simple principle for analyzing the complexity of code that structured programming has taught for 3 decades now. Take a block. Add 1 for every decision, be that a loop, if, unless, case in a case statement... If you come to the end of the block and have a count over 10, that block of code is complex and is likely to become a source of trouble. Consider breaking it up, refactoring, redoing the logic, etc. (This is a rule of thumb. Sometimes no good rewrite is available. Flag the potential trouble-spot, check it carefully and move on.) Definitely don't stuff anything extra into that block - you don't want necessary complexity to become lost in a sea of extraneous material.

If I was at home I'd give you the name of the person who first came up with that complexity measure, the paper it appeared in, and a reference to the place in Code Complete that I read it. I'd even give you where it appears in both the first and second editions. Unfortunately I have no copies of Code Complete at hand, so I'm limited to just giving you the coding rule and the knowledge that I got it from Code Complete.

Cheers,
Ben
To deny the indirect purchaser, who in this case is the ultimate purchaser, the right to seek relief from unlawful conduct, would essentially remove the word consumer from the Consumer Protection Act
- [link|http://www.techworld.com/opsys/news/index.cfm?NewsID=1246&Page=1&pagePos=20|Nebraska Supreme Court]
New If I didn't know better ...
... I'd say it looks like Ben is getting tired of having to pull out the references after three iterations of talking past each other.


FWIW if something sounds right to me, I don't need the reference. If it sounds wrong, the reference isn't likely to help. (Much.) Counter-intuitive study results notwithstanding.
===

Implicitly condoning stupidity since 2001.
New Good thing that you know better then :-)
Incidentally the measure that I described is due to Tom McCabe. The usual list of key words are, if, while, repeat for, and, and or (or equivalent). The rule of thumb is that 0-5 decision points means that your routine is probably fine. 6-10 indicate that you perhaps should simplify. 10+ is a danger sign.

In both editions of Code Complete you'll find this advice in the Control Structures and Complexity subchapter. In the first edition this is at pp 394-396. In the second edition, pp 456-459. Both versions cite 2 studies (McCabe 1976, Shen et al. 1985) that indicated that complexity and low reliability of code are strongly correlated.

He also reports on a 1989 paper from Hewlett Packard. They used this principle for organizing code on two programs, one at 77,000 lines and the other 125,000 lines. The post-release defect rates rates per thousand lines were 0.31 and 0.02 respectively, both substantially below the norm at HP. (I calculate that this means 24 bugs and 2 bugs.)

In the second edition he claims that his consulting company in the last few years has achieved similar results from this technique.

So not only does this allow you to measure where the bugs are likely to appear, it also allows you to reduce your overall defect rate.

I'd like to update this advice with the point that I think that at least some method calls should be included as "decision points". Depending on the coding style, not all - just the ones that you're likely to actually use polymorphism on. (Simple accessors don't count.) This is just my thinking on the topic though, see [link|http://www.perlmonks.org/?node_id=298755|http://www.perlmonks.org/?node_id=298755] for more detailed discussion.

Cheers,
Ben
To deny the indirect purchaser, who in this case is the ultimate purchaser, the right to seek relief from unlawful conduct, would essentially remove the word consumer from the Consumer Protection Act
- [link|http://www.techworld.com/opsys/news/index.cfm?NewsID=1246&Page=1&pagePos=20|Nebraska Supreme Court]
New You forgot:
caseof/case, each of which adds a complexity count. So if I have a case construct for handling the digit keys on a keypad, for example:

\nswitch (keystroke)\n{\n    case 0:\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n        do_something_trivial(keystroke);\n        break;\n\n    default:\n        do_something else(keystroke);\n}\n


In this section alone, you have a complexity of 11, which by the "rule of thumb" is too complex and must be simplified. Oh well, the best laid plans....
jb4
shrub\ufffdbish (Am., from shrub + rubbish, after the derisive name for America's 43 president; 2003) n. 1. a form of nonsensical political doubletalk wherein the speaker attempts to defend the indefensible by lying, obfuscation, or otherwise misstating the facts; GIBBERISH. 2. any of a collection of utterances from America's putative 43rd president. cf. BULLSHIT

New Rules of thumb are rules of thumb
And will always break down somewhere.

But in this case I think that that code sample is clearer when written as:
\nif (keystroke < 10)\n    do_something_trivial(keystroke);\nelse\n    do_something else(keystroke);\n

Conversely if your list was a list of, say, random item IDs that got special treatment, then that case statement, written that way, would indeed be a complex thing. I'd strongly prefer to have you give me some context about what the commonality between the items is. If need be by hiding the list in a function with a descriptive name like gets_ira_tax_break_1234(item).

Cheers,
Ben
To deny the indirect purchaser, who in this case is the ultimate purchaser, the right to seek relief from unlawful conduct, would essentially remove the word consumer from the Consumer Protection Act
- [link|http://www.techworld.com/opsys/news/index.cfm?NewsID=1246&Page=1&pagePos=20|Nebraska Supreme Court]
New That'd be the Cyclomatic Complexity
Of which there are two major variations. Unfortunately, the swiss chese that often populates my cranium cannot off the top of my head describe the differences...it's off to Google....
jb4
shrub\ufffdbish (Am., from shrub + rubbish, after the derisive name for America's 43 president; 2003) n. 1. a form of nonsensical political doubletalk wherein the speaker attempts to defend the indefensible by lying, obfuscation, or otherwise misstating the facts; GIBBERISH. 2. any of a collection of utterances from America's putative 43rd president. cf. BULLSHIT

New Answer:
What kind of brain dead idiot TAKES AWAY a continue statement in a language and tell you that to simulate it you can label the end of the loop and use a GOTO?


The kind of brain-dead idiot who designs a language specifically for use by other brain-dead idiots? Run away from VB. Run very fast. It's beneath you. ;)
New VB is not a Programming Language, it's a Product.
New So if I WAS to fight, again, what are my alternatives?
Keep in mind I've been coding on Perl (essentially Perl 4) for the last 10 years. Before that I coded in C.

It needs to:
Have a RAD development environment
Run under windows
Speak to databases
Speak to networks
Have some presence on programmer resumes
Not have a cost for distributing the end results
Have a quick learning curve for some initial wins to prove it out

Suggestions again?
New Rython ror Rerl ror Reecee-ell ror a rombo of rall rhree ;
Or not in Scooby-doese

Python or Perl or Tcl or a combo of all three.

From Active State for commercial support or not. Since it is Perl, python and tcl.
Active [link|http://www.activestate.com/Products/ActivePerlFamily/?_x=1|Perl], [link|http://www.activestate.com/Products/ActivePythonFamily/?_x=1|Python]. [link|http://www.activestate.com/Products/ActiveTclFamily/?_x=1|Tcl]

[link|http://www.python.org/windows/|Python for Windows] and the [link|http://www.python.org/download/|the download location]

[link|http://www.tcl.tk/software/tcltk/|Tcl for Windows and other OS] and the [link|http://www.tcl.tk/software/tcltk/downloadnow84.tml|Download instruction]. The Binary for Windows is Active State Tcl.

--
[link|mailto:greg@gregfolkert.net|greg],
[link|http://www.iwethey.org/ed_curry|REMEMBER ED CURRY!] @ iwethey
No matter how much Microsoft supporters whine about how Linux and other operating systems have just as many bugs as their operating systems do, the bottom line is that the serious, gut-wrenching problems happen on Windows, not on Linux, not on Mac OS. -- [link|http://www.eweek.com/article2/0,1759,1622086,00.asp|source]
Here is an example: [link|http://www.greymagic.com/security/advisories/gm001-ie/|Executing arbitrary commands without Active Scripting or ActiveX when using Windows]
New TCL - Never!!!!
Worse than BASIC to me.

Last time I looks at AS Perl it felt like a hack. The GUI port felt like a bag on the side. Maybe I didn't give it enough time.

Python is probably worth a look. But if I was really learning a new OO language I'd want to do Ruby. Oh well.
New Careful what you ask for...
[link|http://rubyinstaller.rubyforge.org/wiki/wiki.pl|You might just get it!]

[link|http://rubyforge.org/frs/?group_id=167|More specifically the download]

Sheesh... Pokey today?
--
[link|mailto:greg@gregfolkert.net|greg],
[link|http://www.iwethey.org/ed_curry|REMEMBER ED CURRY!] @ iwethey
No matter how much Microsoft supporters whine about how Linux and other operating systems have just as many bugs as their operating systems do, the bottom line is that the serious, gut-wrenching problems happen on Windows, not on Linux, not on Mac OS. -- [link|http://www.eweek.com/article2/0,1759,1622086,00.asp|source]
Here is an example: [link|http://www.greymagic.com/security/advisories/gm001-ie/|Executing arbitrary commands without Active Scripting or ActiveX when using Windows]
New I see you ignored the previous. Barry
You asked for it, I showed it to you...

Bahaha.
--
[link|mailto:greg@gregfolkert.net|greg],
[link|http://www.iwethey.org/ed_curry|REMEMBER ED CURRY!] @ iwethey
No matter how much Microsoft supporters whine about how Linux and other operating systems have just as many bugs as their operating systems do, the bottom line is that the serious, gut-wrenching problems happen on Windows, not on Linux, not on Mac OS. -- [link|http://www.eweek.com/article2/0,1759,1622086,00.asp|source]
Here is an example: [link|http://www.greymagic.com/security/advisories/gm001-ie/|Executing arbitrary commands without Active Scripting or ActiveX when using Windows]
New Who says?
I downloaded it, installed, and have started reading the manual on my laptop.

That doesn't mean I'm going to give up what I have produced so far. It is deployable right now. And I am in the process of rewriting it in C# as we speak.

I consider the Ruby more of a long term thing for me to wrap my mind around. I'd have to fight for a non-MS solution right now. C# is an easy sell. So if I take a day to rewrite in C#, since the tools and functions map to the VB I just did, it is an immediate win.
New Come on, TCL and BASIC are as far apart
as two procedural languages can be (ok, Fortran and Lisp are further apart, but you're not likely to use either, and Lisp is not procedural).

TCL has (almost) no syntax. That alone makes it worthy of respect. BASIC is all syntax. Bleech.

--

... a reference to Presidente Arbusto.
-- [link|http://itre.cis.upenn.edu/~myl/languagelog/archives/001417.html|Geoffrey K. Pullum]
New Lisp is not procedural??
Lisp can be used in as procedural a way as you want. Just use setq for assignment.

You don't have to use it that way. Many people don't. But you can.

:-P

Ben
To deny the indirect purchaser, who in this case is the ultimate purchaser, the right to seek relief from unlawful conduct, would essentially remove the word consumer from the Consumer Protection Act
- [link|http://www.techworld.com/opsys/news/index.cfm?NewsID=1246&Page=1&pagePos=20|Nebraska Supreme Court]
New Parenthetically speaking that is. :)
Alex

"If you can control the meaning of words, you can control the people who must use the words." -- Philip K. Dick, US science fiction writer
New C# is a better match
As stated elsewhere VB != VB.Net. You can not take for granted that a VB6 or earlier programmer can translate their experience to VB.Net. They are different in both syntax as well as the libraries and tools that are available.

If you are headed in the .Net direction, I think C# makes for a better long term strategy. If you can't handle C# as a programming language, you're probably not gonna be too successful as a VB.Net programmer either. The environment may make pretenses of language neutrality, but the language that makes the best fit is the one that it is created around.
New ObCRC: Delphi
:-)

Apparently Delphi and/or C# Builder are easier for VB6 developers to get their heads around than VB.Net or C#. A comparison of Delphi and C# language/runtime features is [link|http://distribucon.com/blog/archive/2004/04/26/178.aspx|here].

But, IIRC, earlier you ruled out Delphi earlier because you felt it didn't have enough market share.

It seems to me that if you are worried about market share on Win32, then you need to go with a MS solution, maybe with an appropriate 3rd-party addon. Unless things have changed though, MS's tools have usually had some stupid limitiations that required writing your own low-level routines (e.g. leaving out FindFirst/FindNext or some functional file picker). Borland's tools are much more complete and less aggravating, in my limited experience.

Note that Delphi and the other Borland tools aren't cheap, unless you can get by with the Personal versions. If cost is an issue, then the various enhanced GNU tools is the way to go, I think.

I wouldn't dismiss [link|http://www.borland.com/delphi_net/index.html|Delphi] out of hand. :-) Maybe grab the $10 Delphi Architect 30-day trial and see if it's worth pursuing.

HTH.

Cheers,
Scott.
New I just pitched C#
I ASSUME it will be just as stupid as far as interface VS code issues as VB.Net. It seems like there is a lot of "almost there" in the GUI, and then you write some obscure code.

At least the obscure code will be C based.
New You just described all of MS' programming languages.
It seems like there is a lot of "almost there" in the GUI, and then you write some obscure code.


Every API and every programming environment from Microsoft that I have worked in has been like this. C/C++ 7. QuickBASIC. Visual C++ v1 (Win16 API). VB 1. WordBasic. VBA in Access and Excel. Even QuickC+Assembler which was really quite a good, if a little obscure, product; it was hampered by the fact that you were programming under MS-DOS.

In Microsoft-land, obscure code is *always* required to make the API dance the way you need it to rather than the way Microsoft believes you will want it to.

Wade.

Is it enough to love
Is it enough to breathe
Somebody rip my heart out
And leave me here to bleed
 
Is it enough to die
Somebody save my life
I'd rather be Anything but Ordinary
Please

-- "Anything but Ordinary" by Avril Lavigne.

New Python wins on several of those axes
> Have a RAD development environment

[link|http://pythoncard.sourceforge.net/|http://pythoncard.sourceforge.net/]
[link|http://boa-constructor.sourceforge.net/|http://boa-constructor.sourceforge.net/]
For simple dialog-driven scripts, see [link|http://www.ferg.org/easygui/|http://www.ferg.org/easygui/]

> Run under windows

Natch. Specifically, you can wrap any DLL with pywin32: [link|http://sourceforge.net/projects/pywin32/|http://sourceforge.net/projects/pywin32/] I've recently built and used an ADO wrapper quite successfully, for example.

> Speak to databases

[link|http://www.python.org/topics/database/|http://www.python.org/topics/database/]

> Speak to networks

[link|http://docs.python.org/lib/lib.html|http://docs.python.org/lib/lib.html] Any particular protocol you had in mind? >;)

> Not have a cost for distributing the end results

Free speech _and_ free beer.

> Have some presence on programmer resumes

Erm. Not sure what you mean by this; you mean "well-known"? Then you're stuck with C# and Java. But I'll make this claim: any VB programmer can become as productive in Python (as they are in VB) within a month. I don't mean ship them off to a month-long seminar; I mean _as they're working_.

> Have a quick learning curve for some initial wins to prove it out

Especially given the number of people worldwide using Python to hack Win32, I think you'll find sysadmin scripting to be your foot in the door for Python, as others have.
New Sounds exactly like...
C++ Builder...or
Delphi...or
C# builder (ugh! That hurt!)...or
Kylix

All Borland products.
All designed to do EXACTLY what you stated, exactly the way you stated.
All work.
All Microsoft-free (unless, of course, you want to use the Microsoft libraries, which are included).
jb4
shrub\ufffdbish (Am., from shrub + rubbish, after the derisive name for America's 43 president; 2003) n. 1. a form of nonsensical political doubletalk wherein the speaker attempts to defend the indefensible by lying, obfuscation, or otherwise misstating the facts; GIBBERISH. 2. any of a collection of utterances from America's putative 43rd president. cf. BULLSHIT

New Oh, what's the use?! "Nobody is as blind...", and so on. :-(
New Side effect
VB.NET is not the first choice of the runtime, the underlying .NET runtime was built for C#. And when VB and C# conflicted, it was VB that was modified to suit the new runtime. In some cases that improved the language, but it also caused a lot of trivial changes that wouldn't have otherwise been necissary and mucked up a few things.

In truth VB 6 and VB.NET are so unrelated they should be considered two seperate languages with similar syntax.

Jay
New FWIW, VB.Net 2005 will have it
--
Chris Altmann
New ObLRPD: It'll be in the next release....
jb4
shrub\ufffdbish (Am., from shrub + rubbish, after the derisive name for America's 43 president; 2003) n. 1. a form of nonsensical political doubletalk wherein the speaker attempts to defend the indefensible by lying, obfuscation, or otherwise misstating the facts; GIBBERISH. 2. any of a collection of utterances from America's putative 43rd president. cf. BULLSHIT

     VB - NO CONTINUE STATEMENT!! ARRGG!!! - (broomberg) - (38)
         Basic was invented that way - (ChrisR) - (16)
             Has had "continue" for many years - (broomberg) - (15)
                 In VB 6 you have - (lincoln) - (1)
                     Exit loop is there - (broomberg)
                 Or you COULD... - (jb4) - (12)
                     In other words, give a "break"! :) -NT - (a6l6e6x)
                     No way! - (broomberg) - (10)
                         Yet Another Way To Do It - (ben_tilly)
                         Warning! Possible religious war pending - (jb4) - (8)
                             Nah, this is more important - (broomberg) - (7)
                                 Some older languages had those constructs - (jb4) - (6)
                                     That doesn't need to be addressed - (ben_tilly) - (5)
                                         If I didn't know better ... - (drewk) - (3)
                                             Good thing that you know better then :-) - (ben_tilly) - (2)
                                                 You forgot: - (jb4) - (1)
                                                     Rules of thumb are rules of thumb - (ben_tilly)
                                         That'd be the Cyclomatic Complexity - (jb4)
         Answer: - (FuManChu) - (17)
             VB is not a Programming Language, it's a Product. -NT - (ChrisR) - (16)
                 So if I WAS to fight, again, what are my alternatives? - (broomberg) - (15)
                     Rython ror Rerl ror Reecee-ell ror a rombo of rall rhree ; - (folkert) - (7)
                         TCL - Never!!!! - (broomberg) - (6)
                             Careful what you ask for... - (folkert) - (2)
                                 I see you ignored the previous. Barry - (folkert) - (1)
                                     Who says? - (broomberg)
                             Come on, TCL and BASIC are as far apart - (Arkadiy) - (2)
                                 Lisp is not procedural?? - (ben_tilly) - (1)
                                     Parenthetically speaking that is. :) -NT - (a6l6e6x)
                     C# is a better match - (ChrisR)
                     ObCRC: Delphi - (Another Scott) - (2)
                         I just pitched C# - (broomberg) - (1)
                             You just described all of MS' programming languages. - (static)
                     Python wins on several of those axes - (FuManChu)
                     Sounds exactly like... - (jb4) - (1)
                         Oh, what's the use?! "Nobody is as blind...", and so on. :-( -NT - (CRConrad)
         Side effect - (JayMehaffey)
         FWIW, VB.Net 2005 will have it -NT - (altmann) - (1)
             ObLRPD: It'll be in the next release.... -NT - (jb4)

Houston, we have positive capillary pressure.
248 ms