The Visual Studio 2008 Shell Integrated Mode (a.k.a. the ‘Shell’) is a stripped down Visual Studio 2008. Except that it isn’t that much stripped down as we’ll see. I’ve been working with the Visual Studio SDK now for about two years and I’ve become quite familiar with the ins and outs of Visual Studio in the process. The main difficulty with the SDK is that apart from the initial steep (vertical, more like) learning curve and the patchy documentation, there’s just so much of it to master. Even now, I’m continually coming across things I didn’t know and new ways of achieving my objectives.
To those not familiar with Visual Studio, it can seem a monster (‘feature bloat’ is the usual term of abuse). However, when you build a ‘package’ for Visual Studio, you don’t have to use all of the things that come with Visual Studio. In fact, you don’t have to use very much at all if you don’t want to. It’s often just more convenient to use what’s there though.
Internally, Visual Studio looks like a gigantic collection of COM interfaces. It’s written in C++ and uses very little (if any) of .NET. This is one of the reasons that it’s faster initially than Eclipse (written in Java), though once Eclipse ‘warms up’, due to the JIT compilation process there seems to me little discernable difference in performance. However, Visual Studio does require a fair bit of physical memory to run efficiently – I’d say 1GB minimum and 2GB a lot better.
Ruby In Steel Ain’t No Plug-in!
One of the things that isn’t often appreciated by Visual Studio users is that all products such as C#, C++ and VB are implemented as packages. And so is Ruby in Steel: it has exactly the same relation to Visual Studio as Microsoft’s C#, though unlike C# RIS is written in C# (believe me, writing in a managed language is an order of magnitude faster than in an unmanaged one like C++). One of the things I find slightly irritating is to see RIS described as a ‘plug-in’. You don’t see C# or VB described as ‘plug-ins’!
Really, there are three levels of VS integration. The simplest is a macro that you might use to automate a common operation. The next level is an ‘add-in’ (this is what I think of as a ’plug-in’). This uses the VS ‘automation model’ to get deep inside Visual Studio and do often very complex and clever operations. However, you can’t do languages using an add-in. To do those (and handle IntelliSense) you have to use the deepest level of integration, the ’package’. In a package you implement COM interfaces and Visual Studio calls you using those interfaces. A working knowledge of COM is pretty near essential – monikers anyone?
Back to the Shell. The Shell is just Visual Studio with no packages whatsoever. If you install the Shell and nothing else, you get a fancy text editor and half an HTML editor – and nothing else. However, all the underlying functionally required to implement a language (such as C# or Ruby) is still there. To get the full HTML editor (design surfaces and the like) you have to install the Visual Studio Web Authoring Component which comes with the Shell distribution kit. And to do anything useful, you have to install one or more packages – such as RIS.
Visual Studio For Free? Yes, Really!
Once you’ve installed a package, you’ve got exactly the same functionality (for the package) as you would if you had installed the package in a full standard edition of Visual Studio. But what’s important is that the Shell is free!! The cost of the Shell is zilch. And so now (at last) we can introduce a low cost version (the Text Edition) of RIS that doesn’t require a fully paid up Visual Studio license to go with it. Or for that matter we can even allow users to buy a full Developer Edition licence without having to buy Visual Studio as well.
Microsoft (being Microsoft) has imposed a couple of restrictions on using the VS Express editions. You can’t use the free Visual Studio C# Express Edition in a Shell – it just won’t work.
We’ve done quite a bit of work in packaging up the Shell components into a nice ‘all-in-one’ installer. Written (believe it or not) in C++ and Microsoft Foundation Classes (MFC). Talk about back to the future! It was hard work dredging up deeply buried nuggets of MFC lore from my misspent youth. But this was necessary because the .NET runtimes may need to be installed, so using a managed system is a non-starter. Essentially, we install all the bits of .NET required (getting it from Microsoft as necessary), then the Shell and the Web Authoring Component followed by MySQL 5 (database and tools), Ruby 1.8.6, Rails (1.2.6 by default, 2.x as an option) and finally the Text Edition of RIS. The download comes to 170MB (expands to: 55MB MySQL, 23MB Ruby, 6 MB RIS, 55MB Visual Studio and 55MB Web Authoring Component) - biggish, but it does include everything you need to get started in Ruby and Rails.
Enjoy!