The Mono project, which produces an open source implementation of the .NET runtime, has released version 2.8. The update brings full support for version 4.0 of the C# programming language, substantial improvements to the optional LLVM-based Mono backend, and a new garbage collection implementation that is more efficient.
Mono was originally created to accelerate Linux application development and enable Windows developers to bring some of their existing code and skills to the Linux platform. The focus of the project has expanded in recent years as Novell has explored ways to monetize the underlying technology. Mono is increasingly viewed as a compelling tool for supporting rich embedded scripting in applications and bringing C# to environments where it wouldn’t otherwise run.
The Mono developers initially supplied a preview of C# 4.0 in Mono 2.6, but it is now feature-complete in 2.8 and has consequently graduated to fully-supported status. Mono’s standard “mcs” C# compiler will now target 4.0 by default. Some noteworthy C# 4.0 features offered by Mono include dynamic binding and named arguments.
Mono 2.8 introduces a new generational garbage collector that is demonstrably more efficient. It hasn’t been made the default yet, however, and must be activated with a special option. Detailed documentation that describes how the new garbage collector works can be found on the Mono project’s website. There are also independent benchmarks available that demonstrate some of the performance characteristics.
Mono has gained several .NET libraries that were released by Microsoft under permissive open source licenses. These include the Dynamic Language Runtime and the Managed Extensibility Framework.
Another nice addition is x86 support for ahead-of-time (AOT) compilation. Mono’s AOT compilation will convert .NET intermediate code directly into native code at compile time. This allows developers to create static binaries and obviates the need to use JIT compilation at runtime. Mono supports this on several architectures like PowerPC and ARM for the benefit of mobile and embedded developers who are deploying on mobile handsets or gaming consoles. Adding support for the x86 architecture will make it easier for those developers to test the applications on their own development workstation.