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!