It’s hard to believe, but it’s been ten whole years since I joined the Visual Basic team. Back in January of 1997 I moved from Access over to OLE Automation with the thought that automation was going to be the central place to be for development tools at Microsoft. A month or two after I’d made the switch, I had a meeting with some random guy named Brian Harry and some other people talking about this great metadata engine they were working on that was going to totally replace OLE Automation. I remember thinking, “yeah, right.” Of course, that metadata engine went on to become the metadata engine for the CLR…
After a year and a half working on OLE Automation (and, I hope, working on the first and last component I’ll ever have to check directly into Windows), I moved over to the Visual Basic compiler team. To say I had no idea what I was getting into was an understatement. We’d just shipped VB 6.0 and were figuring out what to do next…
The last ten years have been a real learning experience. Sure, I did well in my compiler class in college, but let’s face it–I had only scratched the surface of what it means to build a compiler, and I knew absolutely zip about language design (they just don’t teach you that in college). I’ve been blessed by the opportunity to work with a whole lot of really bright people who were patient enough to teach me what I needed to know along the way and to put up with me the times I got things wrong. I’m proud of the products that I’ve contributed to over the years, and am looking forward to the work that’s left to be done. The great thing about working on development tools is that there’s always something new…
Dunno if I’ll still be doing VB ten years from now, but as Fats Waller said, “One never knows, do one?”
IIF does really annoy me, so much so that when I see it in code i insessently have to replace it with an If.. End If block.
But something else that annoys me in vb 8.0 is having to write this:
Dim felix as Cat = TryCast(aMamal,Cat)
If felix IsNot Nothing Then
Admittedly its alot better than its predecessor in 7.0 where I had to write this:
If TypeOf aMamal Is Cat Then
Dim felix as Cat = CType(aMamal,Cat)
But what i would like to do is this:
If CanCast aMamal To felix As Cat Then
Where cancast is a ternary operator that returns true if aMamal is an instance of (isinst) Cat, the result is stored in felix.
Its basically just syntactic sugar, but I find myself writing this type of code alot, maybe my coding practices are wrong, and I should NOT be using runtime casting so much or indeed should be using a Visitor pattern or something else.
Also I find that sometimes I want to write a Select Case statement that based on the type of object perfoms a different action e.g:
Select Case TypeOf aMammal
Case felix As Cat
Case Maxwell As Dog
I hate that Visual Studio uses version years instead of version editions.