Monthly Archives: November 2005

Extension methods + late binding = trouble?

I’m clearing out some old mail and I came across a reference to a blog entry by Jon Skeet about extension methods that I saved a while back. He says:

One of the things I don’t like about the proposed extension methods is the way the compiler is made aware of them – on a namespace basis. “Using” directives are very common to add for any namespace used in a class, and quite often I wouldn’t want the extension methods within that namespace to be applied. I propose using using static System.Query.Sequence; instead, in a way that is analogous to the static imports of Java 1.5 (except without importing single members or requiring the “.*” part. This would make it clearer what you were actually trying to do.

The interesting thing is, if you look at the document that we released on LINQ at the PDC, you’ll see that our design for extension methods incorporates this suggestion: extension methods in VB are brought into scope by directly importing the containing type, not the namespace. Imports System.Query isn’t sufficient to get LINQ methods in scope; you have to say Imports System.Query.Sequence. I agree with Jon that it’s clearer to do it this way, but that’s not the whole reason we did it. You see, the real problem is late binding.

Yes, late binding. We still support that, you know? And if you think for a minute about late binding and extension methods the way C# does them, you’ll quickly see that the two things don’t go together very well. When we go to late bind a member “foo” on an instance of a type “bar” today things are relatively simple — we gather all the members of “bar” with the name “foo” and then apply our regular binding rules to determine which, if any, of them fit the bill. All we need to know at run-time is the type of the instance we’re late binding on. With extension methods, though, this breaks down. Now we need to know not just the type of the instance, but also all of the extension methods in scope at the point of invocation. That’s because if “bar” doesn’t have a member “foo,” then in the early-bound case the compiler is going to go looking for extensions method. And the late-binder needs to do this, too!

If you look at how C# does extension methods, they go out and start looking in all the enclosing namespaces for extension methods, then look in all the imported namespaces for extension methods, etc. Replicating this at run-time would be difficult, at best — at every late-bound invocation point you would have to capture the complete binding context. And this binding context would change from method to method. What a nightmare! Our design is more friendly to late-binding. Our current design says that if “bar” doesn’t have a member “foo,” then we’ll look only at types whose members have been imported for extension methods. This collapses down the search space hugely and also means that the binding context is per-file (since we only allow file-level imports, unlike C#). While still a bit bulky, this seems much more manageable. Although we’ll see — although we’ve implemented early-bound extension methods, we haven’t gotten to the late bound stuff yet. <g>

Although we felt we had to do extension methods this way because of late-binding, we also believe there are some other advantages to the scheme. Jon lists one: it becomes much easier to be clear about the extensions you are using. You won’t import some useful namespace and then, whoops!, you just added a whole bunch of extension methods that you didn’t want. It’s also fairly congruent with the fact that VB (again, unlike C#) allows you to import a type directly, allowing access to its shared members without qualification.

Of course, now that I think of it, I’m not sure how this works with standard modules and their special binding rules. Hmmmm. I’m going to have to look at that…

Japanese Launch of VB 2005

OK, well, now that I’ve had a chance to recover a bit from the jet-lag from flying back and forth from Tokyo in just three days, I thought I’d give a short update on how the launch went there.

Executive summary: Great!

This was my first experience presenting outside of the US, and it was very interesting. My main presentation on VB 2005 was simultaneously translated, but everything else was done sequentially. So I spent a lot of time saying one or two sentences, pausing, saying one or two more sentences, pausing, saying one or two more sentences, listening to the reply in Japanese, waiting, then hearing it in English. Rinse, repeat. The translators that I worked with were great, so it wasn’t difficult or anything, just a little… different. I did my PDC presentation for a small group of people and it took about twice as long as the original did. I’m also not sure how much of what I was saying got across — all the technical stuff did, for sure, but I think so much of the inflection and all gets, you know, lost in translation.

The special keynote that I did for VB 2005 seemed to go over well, although the fact that the audience was much more reticent that I was used to was a bit disconcerting at times. At first when I wasn’t getting any applause when demoing some of the cool VB 2005 stuff, I started to panic that I was doing something wrong, but then it smoothed itself out. Everyone seemed very excited and had lots of questions about the new version, VB6 migration, the future, etc. Overall, a wonderful experience!

My main regret was that I had to leave right after the conference was over… it would have been great to have been able to spend some time in Japan getting to see something more than the hotel I was staying in. Alas, the confluence of the conference and the impending Thanksgiving holiday made that impractical. Thankfully, I did get a chance to hang out a bit with Cameron Beccario, which was a treat. I tried to convince him to come back and help us out with LINQ, but he’s still pretty settled in Tokyo, unfortunately…

If you read Japanese, feel free to check out my special MSDN website that they put up for me. I’d also highly recommend the VS User Group (VSUG) website — I got a chance to talk with their founding members, and it looks like a great organization! (They said that usually user groups start in the US and then create a Japanese chapter — this time they’re starting the group in Japan, but are open to having a US chapter join. <g>) All in all, a great trip!

Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005

While I was at the Japanese launch (more on that soon), one of the questions that came up often was, unsurprisingly, about migration from VB 6. We continue to have the resources available on the VBRun website, but we’ve also had some new migration resources released recently by the MS Patterns and Practices Team (thanks to Jackie Goldstein for the link). Check them out!

VB language spec 8.0 now available…

We’ve now got the final version of the Visual Basic 8.0 Language Specification now up and available on MSDN! And, as it seems with everything these days, I’ve already gotten several bug reports for the samples. I guess I can go ahead and commit to shipping a service pack for the language specification in the near future…

Updated 11/26/05: Corrected link to language specification. (Thanks Roger!)

It’s not for vanity, it’s for you, the reader…

As a few people have commented, I’ve added a picture of myself to my blog. This was, indeed, prompted by a number of the “how to make your blog better” memes that have been bouncing around lately. I don’t think most people really care that much about what I look like, but I have found blog pictures to be very helpful when attending conferences and meeting people — the people that have pictures on their blogs are immediately recognizable by me, whereas people who don’t have their picture on their blog fall into the unfortunate black hole of memory that I have around faces and names. So I figured if it was valuable for me, it might be valuable for others.

The downside at the moment is that I don’t look like that picture. I perodically cycle through growing a beard, if only to avoid the joy of having to shave too regularly, and I’m on the more hirsute end of the spectrum right now. In fact, at the VS launch in Japan yesterday, I managed to confuse several people who were looking for me based on my picture and thought that the guy with the beard was going to be Jim Gray, not me… In the end, though, we got it all straightened out.

Channel9 interview on VB…

The VP for the division that VB is a part of, S. Somasegar, recently sat down with Ken Levy for Channel9 and had a chat about VB, the future and other stuff. Ken asks him a lot of the frequently asked questions about VB, like:

  • How much does Microsoft use VB internally?
  • How much does Bill Gates care about VB?
  • Why wasn’t there an unmanaged VB upgrade from VB6?
  • What are the plans for the future?
  • And more…

I’d encourage people to check it out…

(Funny side note: To deal with the persistent annoyance of comment spam, I instituted some extra filters in the blog database that would reject any posting that contained certain words in the title such as that drug that people use for ED. Because I included the full range of pharmaceutical drugs that seem to be all the rage in spam these days, my original post, which was entitled “Soma on VB and other things,” was initially rejected because “the title contains a banned word.” Oh, yeah, that’s right. There’s some drug called “soma.” Oh, well…)

Heading to Japan…

Just as an FYI for those of you in Japan who read my blog, I’m going to be in Tokyo next week for the Microsoft Conference 2005, where we’ll be doing the Japanese launch of VB 2005! I’m going to give the VB 2005 launch keynote, which is very exiciting, as well as doing a number of community events. My only regret is that since the conference is the week before Thanksgiving here, I’ll only be in Tokyo (a place I’ve never been before) for only a few days… Maybe next time!

Speaking of Microsoft Access…

…I have to say I’m very heartened by Erik Ruker’s discussion of the features in the upcoming Access 12. My outside perception is that not a lot has been happening with Access in the past few releases (something that I’m sure is not totally true, but there you are), but it looks like they’re definitely getting a lot of traction in Access 12. Lots of interesting stuff coming up! I’m looking forward to the beta…

Is VB 2005 buggy?

In the comments to my notice that we shipped, karl asks:

I haven’t played with VB.Net 2005, but are all of the bugs also causing problems? Most seem CLR related, but with a hint of IDE link, and I know C# and VB.Net don’t share all the IDE code.

The list of reported issues has put a halt, possibly permenantly, on my push to upgrade the entire team to 2005.

I’m guessing Karl is talking about a lot of the blog entries that came out around the release of VS 2005 to MSDN subscribers, some of which are summarized by MiniMSFT.

So, is VB 2005 a buggy piece of crap? In a word, no. Although I have not been intimately involved with bug triage for quite some time, I do know that we’ve spent a very long time working very hard to ensure that VB 2005 (and VS 2005) is a solid, quality release. My own personal experience with it is that it’s very stable and so far I don’t see a groundswell of complaints that would indicate serious problems.

When, then, to make of the brouhaha? Well, first we should be clear: VS 2005 shipped with bugs. This happened for two reasons. One, as has been discussed elsewhere, the only way to “converge” on a release is to steadily raise the bar for the severity of bugs that you’re going to accept fixes for in the product. This is because every bug fix, no matter how benign, has the possibility to uncover or cause more bugs. Ergo, the only way to reach a steady state is to stop fixing most bugs. Some bugs, I should be clear, are always going to be fixed if found before shipping — if we product incorrect code, for example. But others can be postponed. And this is how it’s worked for pretty much every product you’ve ever bought from Microsoft (or any other vendor, for that matter, I would guess).

The other reason VB 2005 shipped with bugs is that I know that there are bugs we didn’t find. Again, Whidbey was a pretty long release cycle, so we had plenty of opportunities to flush out problems. But no matter how hard we look, there are always bugs that slip through. We could spend years in beta and still would find serious problems after we ship. It’s a fact of life given the myraid of different ways that our products can be used.

OK, so what about the reports of bugs bouncing around the blogsphere? Like I said, it’s inevitable we shipped with bugs so I’m not surprised that, given the high level of sophistication of the most prolific bloggers, a few things are going to show up right away. Murphy’s Law in action. However, as I also said, I’m not seeing the volume that would indicate significant problems. Instead, it’s a handful of reports that have then been bouncing madly around the echo chamber of the web. This doesn’t mean that the bugs that have been verified aren’t real or aren’t serious — any bug that impacts a customer is a serious problem and one that will need to be addressed — just that the preponderance of the evidence so far is that we’ve got a solid release. Time, of course, will tell. I encourage anyone who’s worried about the stability of the release to: a) give it a bit of time and see what the consensus is after people have had a few months to live with the release, and b) try it out yourself and see what you think, either by using the trial version or the Express version (see here for links to those).

All this is deja vu for me, I might add. The very first product I shipped at Microsoft was Access 1.0. It was a great product and a solid piece of engineering. However, we had a slight mishap — during the launch event at Comdex, Bill Gates was up on stage with someone (forget who) doing a demo of the great features of Access 1.0. Everything was going great and then suddenly WHAM! Access crashed. (Thankfully, I was in the second wave of team members to go down to Comdex, so I only heard about it. Half the team had to sit in the audience and just watch the whole thing unfold.) This wasn’t great, but in theory it wasn’t the end of the world — after all, it was just one crash. However, Phillipe Kahn, whose product Paradox for Windows we had just beaten to market by (I think) a good six months, saw an opening and started going on about how people shouldn’t buy Access because it was “too buggy.” Was this true? No. Did it matter? Not really. The perception stuck and was part of the reason that we shipped a 1.1 version, so people would think that we fixed all those nasty bugs that weren’t really there. (Of course, in the long run, Access did just fine.)

I doubt that’s going to happen here, thankfully…

Oh, and, yeah, we launched, too…

In case anyone missed it, we launched Visual Basic 2005 this Monday (along with a couple of other small products like SQL Server and the rest of Visual Studio)! This means everyone can now get their mitts on VB 2005 — you can also get trial downloads and the free-as-in-beer-for-a-year Express version.


We’ve also updated the VB Dev Center, so check it out! Now the fun can begin…