[This post is part of a series, "wish-list for future versions of VB"]
"What is this progress? What is the good of all this progress onward and onward? We demand a halt. We demand a rest ... an end to progress! Make an end to progress! Make an end to this progress now! Let this be the last day of the scientific age!" [Things To Come, 1936]
"Progress is folly, and unrestful, and dreary. Scientific inventions are perpetually changing life for us -- you make what we think great, seem small; you make what we think strong, seem feeble." [ibid]
IDEA: Don't add to (or change) the language. There's a good argument to be made that we should just take a rest from changing the Visual Basic and C# languages. As users put it bluntly, "don't add new things; just fix what you already have." The quotes above are from the 1936 film "Things To Come", written by H. G. Wells, and express the same sentiment.
SCENARIO: A new version of the language comes out, and every single user is put through the hassle of upgrading their projects even if they don't WANT to use any of the new language features.
SCENARIO: You switch to the new language, and use new language features, but now you can no longer share your projects or code with colleagues who haven't yet upgraded.
SCENARIO: The language has new features, so you have to invest in updating your own skillset, in writing new coding guidelines for your team, in updating your books.
SCENARIO: You frequently go to the web to find "best practice" code snippets. But now, in the light of the new feature, the code on these web pages is now only "second-best-practice".
Also, there's the argument that languages get creaky once you try to fit too many things into them. BASIC has already changed radically: it started as an unstructured language with GOTOs, then became structured with Subroutines, then a Rapid Application Development environment with Visual Basic, then became object-oriented, and then became partway functional with lambdas and LINQ, and partway declarative with XML literals. (Yes you can still have a GOTO inside a lambda!) Sometimes you just lose the original elegance of a language.
If we go a release without adding new language features, then the compiler team would be free to spend its efforts on performance, refactoring our codebase, rewriting it from C++ into VB, and making it better able to support IDE features like refactoring and compiler-as-a-service.
Here is the counter-argument from "Things To Come":
"Rest enough for the individual man - too much, and too soon - and we call it death. But for Man, no rest and no ending. He must go on, conquest beyond conquest. First this little planet with its winds and ways, and then all the laws of mind and matter that restrain him. Then the planets about him and at last out across immensity to the stars. And when he has conquered all the deeps of space and all the mysteries of time, still he will be beginning." [ibid]
The rest of the counter-argument consists of all the individual ideas that I'll be blogging about in the coming weeks.
One thing we're conscious of is that users see .NET as a "happening" platform. They trust VB and C# (and now F# and IronPython) to bring them innovation and stay on top of future industry trends. They are reassured that their .NET investment is not a dead-end.
Provisional evaluation from VB team: This is a decent idea, one that we should consider against the other decent ideas. What do you think? Please blog or comment with your thoughts.