C# Everywhere

« Conversational Interfaces Redux | Main | Leverage in the Software Business »

January 23, 2012

C# Everywhere

Miguel de Icaza, founder of Xamarin, describes his C# Everywhere strategy for Mono. Earlier this year, there was a question of Mono’s survival, when the project was canceled after the Attachmate acquisition. However, the Mono team reconstituted itself under the umbrella of Xamarin, and have regained the rights to sell MonoTouch and MonoDroid.

I have standardized on C# years ago because it offers a cleaner and highly productive cross-platform solution than other languages that I have considered. C# is available for all Windows-based platforms. Mono fills in the gap for the other platforms with MonoMac for Mac OS, MonoTouch for iOS, and MonoDroid for Android. C# is used for games through Sony PSSuite, Unity, and XNA. C# is available in the browser with Google NativeClient support. One downside of Mono is that, in platforms that do not support C# natively, build times are considerably slower. Generally, I use C# for both development and for scripts. I don’t really see the strong benefits of using dynamic languages; with C#, I have easier access to and type-checking support for existing .NET libraries.

However, C++ has not been standing still. With the new additions in C++11, C++ has become increasingly tempting with its ruthless efficiency and new support for functional programming including lambda expressions. Most advanced software projects are in C++. Objective C is compatible with C++. Nokia’s Qt framework is a fantastic cross-platform objected-oriented C++ framework, better designed than MFC and supported by a much more polished IDE, QtCreator, than Visual Studio. I have gained enormous respected for the Nokia’s development team from my exposure to Qt and QtCreator.

The new Windows Runtime of Window 8 includes better integration with C++ than .NET with special C++/CX component extensions to the language. Though WinRT is currently limited to supporting Metro-based applications, I suspect over time that WinRT will expand to cover desktop applications and gradually replace the legacy Win32 APIs in future Windows releases.

There’s another candidate language, Adobe Air, that offers multiplatform support for mobile devices (Android, Blackberry, iOS) and desktops (PCs and Mac). The programming language/runtime is used by Balsamiq Mockups. While I am not altogether familiar with it, Air is based on web technologies like HTML, JavaScript, and ActionScript.

Comments