I am a developer at Microsoft and work in the .NET Common Language Runtime (CLR) team. For the last 4 years I have been working on virtual machine technologies on a variety of form factors including desktops (Windows, Linux), tablets (Win8), gaming-consoles (Xbox 360), mobile devices (Windows Phone 7, Windows CE, Symbian).I have worked on various core pieces of the runtime including Garbage Collector, memory manager, platform abstraction layer, runtime-performance, etc.Before working on .NET I worked on Visual Studio Team Foundation Server, Visual Studio Team System, Adobe Framemaker, Adobe Acrobat, Texas Instrument's Code Composer Studio.
I have heard about and experienced myself the fun/pain of transitioning into managed code from native. However, right now I'm going through the reverse phase. I'm coding in pure C++ after almost 3 years. Its not maintainence work but designing and creating new COM components that are used from managed and native code, which makes it all the more difficult.
The feeling is kind of weird. I get the same macho-geeky feelings one gets when mucking around with COM pointers and weird ATL macros and fix memory corruption/leaks. But mostly I feel scared. I double check every allocation I make to ensure I have released them and feel helplessly out of Fx support.
The funny part is that all the weird COM things which I desperately wanted to forget came back seamlessly. I have an advice for people working on COM. Bring up a text editor and code COM scratch up without any Fx support once. Manage all the ugly vtables, aggregation, dispatch tables yourself and then you'll never ever forget it. I think inside COM or one such books Essential COM takes the reader through this step and thats the one I followed and its helping me immensely now.
I thought I knew the answer but a discussion in the internal alias proved me wrong :)
enum e1 : int
enum e2 : Int32
The first enum complies fine but the second doesn't. The reason is apparent from the compiler error message "error CS1008: Type byte, sbyte, short, ushort, int, uint, long, or ulong expected". It means that the C# compiler accepts only built in types. The reason is simply because one can define a class as follows
In this case enum e2 : Int32 will be invalid. The compiler could've taken extra pains in ensuring that the .NET types are not overloaded but it'd have extra cost which the compiler guys didn't take.
Thanks to Cyrus for the info. It's unfortunate that he has stopped blogging he used to be among my favorite bloggers.