Mono 3.2.7, sorti récemment, apporte beaucoup de nouvelles fonctionnalités avec entre autres un JIT amélioré, un nouveau LINQ interpreter et l'utilisation d'instructions natives 64 bits.
Cette sortie correspond à une release majeure, résultat de près de 5 mois de développement. La plupart des éléments semblent correspondre à des améliorations de performance, des optimisations et des améliorations de compatibilité. Voici quelques-uns de ces éléments :
- Support initial de HardFP ABI (Application Binary Interface) sur ARM. Ceci permet d'utiliser Mono sur des versions de Linux plus récentes et produit un meilleur code sur les versions ciblées. Plus de détails ici, pour mieux comprendre la différence entre HardFP et SoftFP.
- L'optimisation ABCREM (array bound check removal) fonctionne maintenant beaucoup mieux sur les systèmes 64 bits.
- Deux nouvelles optimisations pouvant apporter jusqu'à 20% de gain de performance sur certaines fonctions : une passe de Loop Invariant Code Motion et l'analyse d'alias, Alias Analysis.
- Les instructions CAS 64-bits sont maintenant supportées sur les systèmes 32 bits, ce qui conduit à une amélioration significative des tâches PLINQ sur du multi-core.
- Une version plus récente de LLVM est utilisée et peut maintenant générer des accès TLS (Thread Local Storage) rapides.
- Des micro-optimisations du GC ont été effectuées sur les structures de données internes et l'utilisation de constructions intrinsèques pour accélérer les boucles principales.
- Un interpreter pour LINQ et les instructions dynamiques qui peuvent être utilisées par les runtimes FullAOT.
- Un meilleur support pour les schedulers de tâches personnalisées avec les task awaiters.
- L'accessibilité et l'analyse de flux par le compilateur C# ont été améliorées de façon significative, ce qui permet de meilleurs warnings de code.
Cette release inclut également plusieurs corrections d'anomalies. Pour voir une liste complète des améliorations, vous pouvez consulter les release notes.