WARNING: This is a speculative post. Caveat emptor.
I know that I'm running a great risk of touching the third rail of the VB community by even speculating about this, but it seems like the right time to have a bit of a conversation about the big "D"-word.
That is, deprecation.
Yes, deprecation. Now before anyone starts freaking out, foaming at the mouth or writing a petition, let me emphasize that my thinking along these lines is entirely within the guidelines discussed in the language specification, which mandates a long and gradual process of deprecation that involves continuing to support the deprecated feature for a reasonable period of time. The guidelines also state in part:
...feedback must be solicited from the user community on deprecation of the feature and full notice given before any final deprecation decision is made. The deprecation process may be reversed or abandoned at any point based on user community feedback.
So I'm really just floating some personal trial balloons here. After all, it's now been almost three major releases since the big move to .NET, and I think it's started to become clear that some of the features we carried forward are a bit, uh, underused. In the interest of paring down the language specification just a bit in it's inevitable march towards more and more pages, I've been pondering the question: "If I was going to deprecate parts of the language that don't seem to be used, what would I deprecate?" I've come up with a few candidates that seem pretty safe:
- Type characters. Yes, we still allow you to say "Dim a$". So far as I have ever seen, no one uses them anymore. It would be nice to reclaim a bunch of characters at some point in the future, and it would be relatively easy to include error corrections to fix this up.
- Copying of boxed value types. I'm not even sure I could explain this in a bullet point. If you read section 8.6 of the language spec, Value Type Conversions, it'll discuss this a little more detail. I think this is counterintuitive behavior for most people and is incomplete in any case. The only real question here is: are there programs that depend on this behavior? We'd need to think/talk a lot more about it before we could even consider this one.
- Mid$() assignment. Bet you didn't know you could even do this, did you? See section 10.6.3 in the language spec for more on this.
- End statement. I'm curious if this one is still used by people, especially now that most frameworks like WinForms and WPF have Application objects that have a proper Exit/End method. If this one is popular, it might not fly as deprecatable.
- Erase statement. I've found that ReDim is actually still fairly useful as a shorthand way to redimension an array. However, Erase is completely useless--you could just replace it with an assignment to Nothing and you'd get the same thing.
- REM comments. Bet you didn't know you could even do this one either, did you? There's something nostalgic about it (Erik Meijer loves them), but, really, who uses them anymore?
You'll note that I'm only including things here that I think are truly not used much or not useful. There are things I think some people would like to see disappear (like, say, On Error), but are still being used heavily enough to make them be not reasonable candidates.
I'm curious what's people's feelings about this are. Does this just bring up bad memories? Are there other candidates you'd throw on the list? As I said, at this point, I'm just talking. Depending on the reaction, the next step would be to look a little more formally at it in the team...