Mono JIT, GC Get Better
Mono 3.2.7 is out, with a lot of new features such as an improved JIT, new interpreter for LINQ, use of native instructions for 64 bits, and more.
This is a major feature release, accumulating about 5 months of development. Most improvements seem to be under-the-hood performance improvements, optimizations and better compatibility. Some of the highlights -
- Initial support for the HardFP ABI (Application Binary Interface) on ARM. This enables mono to be used on more recent versions of linux and produce better code on those targets. Read more to understand the difference between HardFP and SoftFP.
- The ABCREM (array bound checks removal) optimization now works much better on 64 bit systems
- Two new optimizations - a Loop Invariant Code Motion pass and Alias Analysis. Can lead upto 20% performance gains in some functions
- 64-bit CAS instructions now supported on 32 bit systems leading to significant boost on PLINQ workloads with multi core.
- More recent version of LLVM is used, and it can now generate fast TLS (Thread Local Storage) access
- Micro-optimizations for the GC - optimizations in internal data structures and use of intrinsics to speed up core loops
- An interpreter for LINQ and dynamic statements that can be used by FullAOT runtimes
- Better support for custom task schedulers with task awaiters
- Significantly improved reachability and flow analysis in the C# compiler - this leads to better code warnings
The release also includes several bug fixes. To see a full list of improvements, have a look at the release notes.