Starting my summer internship at NEC Labs

My summer internship at NEC Laboratories America starts from this week! This year’s internship is going to be another exciting experience – I have realized that only “real” and “big” stuff can make me feel excited.

Back to the summer of 2012, I was working on some OS performance stuff with the Software Analytics Group at Microsoft Research Asia. That experience was so memorable – I had a good chance to understand what could happen inside an operating system to slow down the whole ecosystem, which includes the operating system itself as well as the applications running on it. By analyzing large-scale real runtime data, I was able to acquire some valuable knowledge of OS performance, and to know what kind of research was attractive to people in industrial labs – I will use another post to discuss.

Let’s see what will happen this year – we are going to start another “real” and “big” project. Allow me to keep it a little bit mysterious for now, in the Cloud.

Microsoft announced .NET Native

Microsoft announced .NET Native at //BUILD 2014. .NET Native compiles MSIL programs to native machine code for performance benefits. The current released developer preview enables native code generation for Windows Store apps on ARM and x64 architectures. It is claimed to speed up the app start-up time by 60%, and use a smaller memory footprint.

Compared to the long-existing NGEN tool (ngen.exe), the new .NET Native allows MSIL programs to totally get rid of .NET Framework, whose size is usually tens to hundreds of megabytes. In a nutshell, the major difference is that .NET Native analyzes and extracts the transitive closure of all dependent .NET libraries and statically links them to the program. An optimized CLR runtime (MRT.dll, only hundreds of kilobytes) is also provided for fast start-up and memory management.

It is good to see that Microsoft has made substantial efforts to improve both developer and end-user experiences. More than ten years ago, Microsoft announced its “.NET Strategy” to provide developers an elegant platform for rapid multi-platform development. After years’ evolution, developers have been able to use the same set of programming languages and tools with similar programming interfaces to build apps for desktops, phones, tablets, and many more other devices. “Write once, run anywhere” has become a semi-standard, and greatly eased the cross-platform development.

On the other hand, nowadays various types of devices start running Windows with .NET Framework. The highly diversified hardware and software raise the bar of performance requirements. End-users expect more responsive and performant apps even on resource-limited devices, but managed apps are not running as fast as native apps by the nature of JIT and CLR. Microsoft has to be more developer-friendly to encourage developers contributing to the Windows ecosystem, and at the same time, satisfying users’ expectation is another tricky task. .NET Native is no doubt a crucial and affirmative step for improving user experiences across multiple devices without adding extra burden to developers.

For more information about .NET Native, please visit http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx and http://channel9.msdn.com/Shows/Going+Deep/Inside-NET-Native.